Throw errors for incorrectly tagged as empty paths (#386)
diff --git a/go/pkg/client/tree.go b/go/pkg/client/tree.go
index dae11e5..eb3ddb2 100644
--- a/go/pkg/client/tree.go
+++ b/go/pkg/client/tree.go
@@ -254,10 +254,14 @@
}
}
- if e := loadFiles(execRoot, is.InputExclusions, is.Inputs, fs, cache, treeSymlinkOpts(c.TreeSymlinkOpts, is.SymlinkBehavior)); e != nil {
- return digest.Empty, nil, nil, e
+ if err := loadFiles(execRoot, is.InputExclusions, is.Inputs, fs, cache, treeSymlinkOpts(c.TreeSymlinkOpts, is.SymlinkBehavior)); err != nil {
+ return digest.Empty, nil, nil, err
}
- ft := buildTree(fs)
+
+ ft, err := buildTree(fs)
+ if err != nil {
+ return digest.Empty, nil, nil, err
+ }
var blobs map[digest.Digest]*uploadinfo.Entry
root, blobs, err = packageTree(ft, stats)
if err != nil {
@@ -269,7 +273,7 @@
return root, inputs, stats, nil
}
-func buildTree(files map[string]*fileSysNode) *treeNode {
+func buildTree(files map[string]*fileSysNode) (*treeNode, error) {
root := &treeNode{}
for name, fn := range files {
segs := strings.Split(name, string(filepath.Separator))
@@ -293,6 +297,9 @@
if node.dirs == nil {
node.dirs = make(map[string]*treeNode)
}
+ if node.dirs[base] != nil {
+ return nil, fmt.Errorf("path %v was tagged as an empty dir but isn't empty", name)
+ }
node.dirs[base] = &treeNode{}
continue
}
@@ -308,7 +315,7 @@
node.symlinks[base] = fn.symlink
}
}
- return root
+ return root, nil
}
func packageTree(t *treeNode, stats *TreeStats) (root digest.Digest, blobs map[digest.Digest]*uploadinfo.Entry, err error) {
@@ -507,7 +514,10 @@
if e := loadFiles(absPath, nil, []string{"."}, fs, cache, treeSymlinkOpts(c.TreeSymlinkOpts, sb)); e != nil {
return nil, nil, e
}
- ft := buildTree(fs)
+ ft, err := buildTree(fs)
+ if err != nil {
+ return nil, nil, err
+ }
treePb := &repb.Tree{}
rootDir, childDirs, files, err := packageDirectories(ft)