21214: Fix lookup of file with trailing slash.
[arvados.git] / sdk / go / arvados / fs_project.go
index 88766129ae557962ecb4eb72282ccd2759096e6d..df1d06e753b35191f344499fe17c9953dc849daa 100644 (file)
@@ -35,10 +35,11 @@ func (fs *customFileSystem) projectsLoadOne(parent inode, uuid, name string) (in
                contents = CollectionList{}
                err = fs.RequestAndDecode(&contents, "GET", "arvados/v1/groups/"+uuid+"/contents", nil, ResourceListParams{
                        Count: "none",
+                       Order: "uuid",
                        Filters: []Filter{
                                {"name", "=", strings.Replace(name, subst, "/", -1)},
                                {"uuid", "is_a", []string{"arvados#collection", "arvados#group"}},
-                               {"groups.group_class", "=", "project"},
+                               {"groups.group_class", "in", []string{"project", "filter"}},
                        },
                        Select: []string{"uuid", "name", "modified_at", "properties"},
                })
@@ -77,7 +78,7 @@ func (fs *customFileSystem) projectsLoadOne(parent inode, uuid, name string) (in
                        name:   coll.Name,
                }, nil
        } else if strings.Contains(coll.UUID, "-4zz18-") {
-               return fs.newDeferredCollectionDir(parent, name, coll.UUID, coll.ModifiedAt), nil
+               return fs.newDeferredCollectionDir(parent, name, coll.UUID, coll.ModifiedAt, coll.Properties), nil
        } else {
                log.Printf("group contents: unrecognized UUID in response: %q", coll.UUID)
                return nil, ErrInvalidArgument
@@ -104,7 +105,7 @@ func (fs *customFileSystem) projectsLoadAll(parent inode, uuid string) ([]inode,
                        {"uuid", "is_a", class},
                }
                if class == "arvados#group" {
-                       filters = append(filters, Filter{"group_class", "=", "project"})
+                       filters = append(filters, Filter{"groups.group_class", "in", []string{"project", "filter"}})
                }
 
                params := ResourceListParams{
@@ -147,7 +148,7 @@ func (fs *customFileSystem) projectsLoadAll(parent inode, uuid string) ([]inode,
                                                Properties: i.Properties,
                                        }))
                                } else if strings.Contains(i.UUID, "-4zz18-") {
-                                       inodes = append(inodes, fs.newDeferredCollectionDir(parent, i.Name, i.UUID, i.ModifiedAt))
+                                       inodes = append(inodes, fs.newDeferredCollectionDir(parent, i.Name, i.UUID, i.ModifiedAt, i.Properties))
                                } else {
                                        log.Printf("group contents: unrecognized UUID in response: %q", i.UUID)
                                        return nil, ErrInvalidArgument
@@ -163,7 +164,7 @@ func (fs *customFileSystem) newProjectDir(parent inode, name, uuid string, proj
        return &hardlink{inode: fs.projectSingleton(uuid, proj), parent: parent, name: name}
 }
 
-func (fs *customFileSystem) newDeferredCollectionDir(parent inode, name, uuid string, modTime time.Time) inode {
+func (fs *customFileSystem) newDeferredCollectionDir(parent inode, name, uuid string, modTime time.Time, props map[string]interface{}) inode {
        if modTime.IsZero() {
                modTime = time.Now()
        }
@@ -175,7 +176,7 @@ func (fs *customFileSystem) newDeferredCollectionDir(parent inode, name, uuid st
                        name:    name,
                        modTime: modTime,
                        mode:    0755 | os.ModeDir,
-                       sys:     func() interface{} { return &Collection{UUID: uuid, Name: name, ModifiedAt: modTime} },
+                       sys:     func() interface{} { return &Collection{UUID: uuid, Name: name, ModifiedAt: modTime, Properties: props} },
                },
        }
        return &deferrednode{wrapped: placeholder, create: func() inode {