From b094739dda2bd2a0834952830d08557f4a42bf2c Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys <hanwen@google.com> Date: Mon, 25 Apr 2011 19:06:26 -0300 Subject: [PATCH] Parameterize autounion.go; use "root" rather than "autobase". --- unionfs/autounion.go | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/unionfs/autounion.go b/unionfs/autounion.go index 449ecf3..9031a61 100644 --- a/unionfs/autounion.go +++ b/unionfs/autounion.go @@ -33,6 +33,14 @@ type AutoUnionFsOptions struct { UnionFsOptions } +const ( + _READONLY = "READONLY" + _STATUS = "status" + _CONFIG = "config" + _ROOT = "root" + _VERSION = "gounionfs_version" +) + func NewAutoUnionFs(directory string, options AutoUnionFsOptions) *AutoUnionFs { a := new(AutoUnionFs) a.knownFileSystems = make(map[string]*UnionFs) @@ -51,7 +59,7 @@ func (me *AutoUnionFs) addFs(roots []string) { relative := strings.TrimLeft(strings.Replace(roots[0], me.root, "", -1), "/") name := strings.Replace(relative, "/", "-", -1) - if name == "config" || name == "status" { + if name == _CONFIG || name == _STATUS { log.Println("Illegal name for overlay", roots) return } @@ -72,7 +80,7 @@ func (me *AutoUnionFs) addFs(roots []string) { // TODO - should hide these methods. func (me *AutoUnionFs) VisitDir(path string, f *os.FileInfo) bool { - ro := filepath.Join(path, "READONLY") + ro := filepath.Join(path, _READONLY) fi, err := os.Lstat(ro) if err == nil && fi.IsSymlink() { // TODO - should recurse and chain all READONLYs @@ -93,11 +101,11 @@ func (me *AutoUnionFs) updateKnownFses() { func (me *AutoUnionFs) Readlink(path string) (out string, code fuse.Status) { comps := strings.Split(path, filepath.SeparatorString, -1) - if comps[0] == "status" && comps[1] == "autobase" { + if comps[0] == _STATUS && comps[1] == _ROOT { return me.root, fuse.OK } - if comps[0] != "config" { + if comps[0] != _CONFIG { return "", fuse.ENOENT } name := comps[1] @@ -111,21 +119,21 @@ func (me *AutoUnionFs) Readlink(path string) (out string, code fuse.Status) { } func (me *AutoUnionFs) GetAttr(path string) (*fuse.Attr, fuse.Status) { - if path == "" || path == "config" || path == "status" { + if path == "" || path == _CONFIG || path == _STATUS { a := &fuse.Attr{ Mode: fuse.S_IFDIR | 0755, } return a, fuse.OK } - if path == "status/gounionfs_version" { + if path == filepath.Join(_STATUS, _VERSION) { a := &fuse.Attr{ Mode: fuse.S_IFREG | 0644, } return a, fuse.OK } - if path == "status/autobase" { + if path == filepath.Join(_STATUS, _ROOT) { a := &fuse.Attr{ Mode: syscall.S_IFLNK | 0644, } @@ -136,7 +144,7 @@ func (me *AutoUnionFs) GetAttr(path string) (*fuse.Attr, fuse.Status) { me.lock.RLock() defer me.lock.RUnlock() - if len(comps) > 1 && comps[0] == "config" { + if len(comps) > 1 && comps[0] == _CONFIG { fs := me.knownFileSystems[comps[1]] if fs == nil { @@ -161,11 +169,11 @@ func (me *AutoUnionFs) GetAttr(path string) (*fuse.Attr, fuse.Status) { func (me *AutoUnionFs) StatusDir() (stream chan fuse.DirEntry, status fuse.Status) { stream = make(chan fuse.DirEntry, 10) stream <- fuse.DirEntry{ - Name: "gounionfs_version", + Name: _VERSION, Mode: fuse.S_IFREG | 0644, } stream <- fuse.DirEntry{ - Name: "autobase", + Name: _ROOT, Mode: syscall.S_IFLNK | 0644, } @@ -175,9 +183,9 @@ func (me *AutoUnionFs) StatusDir() (stream chan fuse.DirEntry, status fuse.Statu func (me *AutoUnionFs) OpenDir(name string) (stream chan fuse.DirEntry, status fuse.Status) { switch name { - case "status": + case _STATUS: return me.StatusDir() - case "config": + case _CONFIG: me.updateKnownFses() case "/": name = "" @@ -192,7 +200,7 @@ func (me *AutoUnionFs) OpenDir(name string) (stream chan fuse.DirEntry, status f stream = make(chan fuse.DirEntry, len(me.knownFileSystems)+5) for k, _ := range me.knownFileSystems { mode := fuse.S_IFDIR | 0755 - if name == "config" { + if name == _CONFIG { mode = syscall.S_IFLNK | 0644 } @@ -204,11 +212,11 @@ func (me *AutoUnionFs) OpenDir(name string) (stream chan fuse.DirEntry, status f if name == "" { stream <- fuse.DirEntry{ - Name: "config", + Name: _CONFIG, Mode: uint32(fuse.S_IFDIR | 0755), } stream <- fuse.DirEntry{ - Name: "status", + Name: _STATUS, Mode: uint32(fuse.S_IFDIR | 0755), } } -- 2.30.9