X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/418c57bce3aac1a22548e53e1018a1547d9efee4..cb13593decb097f501c0a1d64510a653b3233395:/sdk/go/arvados/fs_site.go diff --git a/sdk/go/arvados/fs_site.go b/sdk/go/arvados/fs_site.go index e9c83870d1..82114e2ea9 100644 --- a/sdk/go/arvados/fs_site.go +++ b/sdk/go/arvados/fs_site.go @@ -6,6 +6,7 @@ package arvados import ( "os" + "strings" "sync" "time" ) @@ -60,7 +61,7 @@ func (fs *customFileSystem) MountByID(mount string) { mode: 0755 | os.ModeDir, }, }, - create: fs.mountCollection, + create: fs.mountByID, }, nil }) } @@ -73,7 +74,10 @@ func (fs *customFileSystem) MountProject(mount, uuid string) { func (fs *customFileSystem) MountUsers(mount string) { fs.root.inode.Child(mount, func(inode) (inode, error) { - return &usersnode{ + return &lookupnode{ + stale: fs.Stale, + loadOne: fs.usersLoadOne, + loadAll: fs.usersLoadAll, inode: &treenode{ fs: fs, parent: fs.root, @@ -120,6 +124,16 @@ func (fs *customFileSystem) newNode(name string, perm os.FileMode, modTime time. return nil, ErrInvalidOperation } +func (fs *customFileSystem) mountByID(parent inode, id string) inode { + if strings.Contains(id, "-4zz18-") || pdhRegexp.MatchString(id) { + return fs.mountCollection(parent, id) + } else if strings.Contains(id, "-j7d0g-") { + return fs.newProjectNode(fs.root, id, id) + } else { + return nil + } +} + func (fs *customFileSystem) mountCollection(parent inode, id string) inode { var coll Collection err := fs.RequestAndDecode(&coll, "GET", "arvados/v1/collections/"+id, nil, nil) @@ -136,24 +150,10 @@ func (fs *customFileSystem) mountCollection(parent inode, id string) inode { } func (fs *customFileSystem) newProjectNode(root inode, name, uuid string) inode { - return &projectnode{ - uuid: uuid, - inode: &treenode{ - fs: fs, - parent: root, - inodes: make(map[string]inode), - fileinfo: fileinfo{ - name: name, - modTime: time.Now(), - mode: 0755 | os.ModeDir, - }, - }, - } -} - -func (fs *customFileSystem) newUserNode(root inode, name, uuid string) inode { - return &projectnode{ - uuid: uuid, + return &lookupnode{ + stale: fs.Stale, + loadOne: func(parent inode, name string) (inode, error) { return fs.projectsLoadOne(parent, uuid, name) }, + loadAll: func(parent inode) ([]inode, error) { return fs.projectsLoadAll(parent, uuid) }, inode: &treenode{ fs: fs, parent: root,