+
+ for {
+ var resp groupContentsResponse
+ err = fs.RequestAndDecode(&resp, "GET", "arvados/v1/groups/"+uuid+"/contents", nil, params)
+ if err != nil {
+ return nil, err
+ }
+ if len(resp.Items) == 0 {
+ break
+ }
+ for _, i := range resp.Items {
+ if fs.forwardSlashNameSubstitution != "" {
+ i.Name = strings.Replace(i.Name, "/", fs.forwardSlashNameSubstitution, -1)
+ }
+ if !permittedName(i.Name) {
+ continue
+ }
+ isGroup := strings.Contains(i.UUID, "-j7d0g-")
+ if strings.Contains(i.UUID, "-4zz18-") {
+ inodes = append(inodes, fs.newDeferredCollectionDir(parent, i.Name, i.UUID, i.ModifiedAt, i.Properties))
+ } else if isGroup && i.GroupClass == "filter" {
+ inode, err := fs.newCollectionOrProjectSymlink(parent, i.Name, i.UUID, i.ModifiedAt, i.Properties)
+ if err != nil {
+ return nil, err
+ }
+ if inode != nil {
+ inodes = append(inodes, inode)
+ }
+ } else if isGroup && i.GroupClass == "project" {
+ inodes = append(inodes, fs.newProjectDir(parent, i.Name, i.UUID, &Group{
+ UUID: i.UUID,
+ Name: i.Name,
+ ModifiedAt: i.ModifiedAt,
+ Properties: i.Properties,
+ }))
+ } else {
+ log.Printf("group contents: unrecognized UUID in response: %q", i.UUID)
+ return nil, ErrInvalidArgument
+ }