From 32b86c0a132534ce43489729af6a6dcd98f5edf1 Mon Sep 17 00:00:00 2001 From: Ishank Arora Date: Tue, 16 Nov 2021 09:21:54 +0100 Subject: [PATCH] Return the inode of the version folder for files when listing in EOS --- .../unreleased/eos-list-file-version-inode.md | 3 +++ pkg/eosclient/eosbinary/eosbinary.go | 18 ++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 changelog/unreleased/eos-list-file-version-inode.md diff --git a/changelog/unreleased/eos-list-file-version-inode.md b/changelog/unreleased/eos-list-file-version-inode.md new file mode 100644 index 0000000000..09761a76a5 --- /dev/null +++ b/changelog/unreleased/eos-list-file-version-inode.md @@ -0,0 +1,3 @@ +Bugfix: Return the inode of the version folder for files when listing in EOS + +https://github.com/cs3org/reva/pull/2279 \ No newline at end of file diff --git a/pkg/eosclient/eosbinary/eosbinary.go b/pkg/eosclient/eosbinary/eosbinary.go index 582c4a63dd..4c8284e5c1 100644 --- a/pkg/eosclient/eosbinary/eosbinary.go +++ b/pkg/eosclient/eosbinary/eosbinary.go @@ -873,6 +873,7 @@ func getMap(partsBySpace []string) map[string]string { func (c *Client) parseFind(dirPath, raw string) ([]*eosclient.FileInfo, error) { finfos := []*eosclient.FileInfo{} + versionFolders := map[string]*eosclient.FileInfo{} rawLines := strings.FieldsFunc(raw, func(c rune) bool { return c == '\n' }) @@ -894,13 +895,26 @@ func (c *Client) parseFind(dirPath, raw string) ([]*eosclient.FileInfo, error) { continue } + // If it's a version folder, store it in a map, so that for the corresponding file, + // we can return its inode instead + if isVersionFolder(fi.File) { + versionFolders[fi.File] = fi + } + finfos = append(finfos, fi) } for _, fi := range finfos { // For files, inherit ACLs from the parent - if !fi.IsDir && parent != nil { - fi.SysACL.Entries = append(fi.SysACL.Entries, parent.SysACL.Entries...) + // And set the inode to that of their version folder + if !fi.IsDir { + if parent != nil { + fi.SysACL.Entries = append(fi.SysACL.Entries, parent.SysACL.Entries...) + } + versionFolderPath := getVersionFolder(fi.File) + if vf, ok := versionFolders[versionFolderPath]; ok { + fi.Inode = vf.Inode + } } }