X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/840e18117654b70c8cdb28888f227810369f82c1..1012f12d29be01b56f2bbbe2e9bd5969d69f7b89:/sdk/go/arvados/fs_collection.go?ds=inline diff --git a/sdk/go/arvados/fs_collection.go b/sdk/go/arvados/fs_collection.go index 0121d2dccc..fbd9775b0c 100644 --- a/sdk/go/arvados/fs_collection.go +++ b/sdk/go/arvados/fs_collection.go @@ -67,10 +67,23 @@ func (c *Collection) FileSystem(client apiClient, kc keepClient) (CollectionFile if err := root.loadManifest(c.ManifestText); err != nil { return nil, err } + backdateTree(root, modTime) fs.root = root return fs, nil } +func backdateTree(n inode, modTime time.Time) { + switch n := n.(type) { + case *filenode: + n.fileinfo.modTime = modTime + case *dirnode: + n.fileinfo.modTime = modTime + for _, n := range n.inodes { + backdateTree(n, modTime) + } + } +} + func (fs *collectionFileSystem) newNode(name string, perm os.FileMode, modTime time.Time) (node inode, err error) { if name == "" || name == "." || name == ".." { return nil, ErrInvalidArgument @@ -519,7 +532,7 @@ func (dn *dirnode) Child(name string, replace func(inode) inode) inode { } data, err := json.Marshal(&coll) if err == nil { - data = append(data, 10) + data = append(data, '\n') } return data, err }} @@ -826,8 +839,9 @@ func (dn *dirnode) createFileAndParents(path string) (fn *filenode, err error) { } node.Child(name, func(child inode) inode { if child == nil { - node, err = node.FS().newNode(name, 0755|os.ModeDir, node.Parent().FileInfo().ModTime()) - child = node + child, err = node.FS().newNode(name, 0755|os.ModeDir, node.Parent().FileInfo().ModTime()) + child.SetParent(node, name) + node = child } else if !child.IsDir() { err = ErrFileExists } else { @@ -843,6 +857,7 @@ func (dn *dirnode) createFileAndParents(path string) (fn *filenode, err error) { switch child := child.(type) { case nil: child, err = node.FS().newNode(basename, 0755, node.FileInfo().ModTime()) + child.SetParent(node, basename) fn = child.(*filenode) return child case *filenode: