Skip to content

Commit

Permalink
fix(sympath): walk symbolic links one once
Browse files Browse the repository at this point in the history
Signed-off-by: Matthew Fisher <matt.fisher@microsoft.com>
  • Loading branch information
Matthew Fisher committed Oct 18, 2019
1 parent c3e356f commit ee8cd8b
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 23 deletions.
3 changes: 2 additions & 1 deletion internal/sympath/walk.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,10 @@ func symwalk(path string, info os.FileInfo, walkFn filepath.WalkFunc) error {
if info, err = os.Lstat(resolved); err != nil {
return err
}
if err := symwalk(resolved, info, walkFn); err != nil && err != filepath.SkipDir {
if err := symwalk(path, info, walkFn); err != nil && err != filepath.SkipDir {
return err
}
return nil
}

if err := walkFn(path, info, nil); err != nil {
Expand Down
61 changes: 39 additions & 22 deletions internal/sympath/walk_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,36 +27,45 @@ import (
)

type Node struct {
name string
entries []*Node // nil if the entry is a file
mark int
name string
entries []*Node // nil if the entry is a file
marks int
expectedMarks int
symLinkedTo string
}

var tree = &Node{
"testdata",
[]*Node{
{"a", nil, 0},
{"b", []*Node{}, 0},
{"c", nil, 0},
{"a", nil, 0, 1, ""},
{"b", []*Node{}, 0, 1, ""},
{"c", nil, 0, 2, ""},
{"d", nil, 0, 0, "c"},
{
"d",
"e",
[]*Node{
{"x", nil, 0},
{"y", []*Node{}, 0},
{"x", nil, 0, 1, ""},
{"y", []*Node{}, 0, 1, ""},
{
"z",
[]*Node{
{"u", nil, 0},
{"v", nil, 0},
{"w", nil, 0},
{"u", nil, 0, 1, ""},
{"v", nil, 0, 1, ""},
{"w", nil, 0, 1, ""},
},
0,
1,
"",
},
},
0,
1,
"",
},
},
0,
1,
"",
}

func walkTree(n *Node, path string, f func(path string, n *Node)) {
Expand All @@ -69,24 +78,32 @@ func walkTree(n *Node, path string, f func(path string, n *Node)) {
func makeTree(t *testing.T) {
walkTree(tree, tree.name, func(path string, n *Node) {
if n.entries == nil {
fd, err := os.Create(path)
if err != nil {
t.Errorf("makeTree: %v", err)
return
if n.symLinkedTo != "" {
if err := os.Symlink(n.symLinkedTo, path); err != nil {
t.Fatalf("makeTree: %v", err)
}
} else {
fd, err := os.Create(path)
if err != nil {
t.Fatalf("makeTree: %v", err)
return
}
fd.Close()
}
fd.Close()
} else {
os.Mkdir(path, 0770)
if err := os.Mkdir(path, 0770); err != nil {
t.Fatalf("makeTree: %v", err)
}
}
})
}

func checkMarks(t *testing.T, report bool) {
walkTree(tree, tree.name, func(path string, n *Node) {
if n.mark != 1 && report {
t.Errorf("node %s mark = %d; expected 1", path, n.mark)
if n.marks != n.expectedMarks && report {
t.Errorf("node %s mark = %d; expected %d", path, n.marks, n.expectedMarks)
}
n.mark = 0
n.marks = 0
})
}

Expand All @@ -104,7 +121,7 @@ func mark(info os.FileInfo, err error, errors *[]error, clear bool) error {
name := info.Name()
walkTree(tree, tree.name, func(path string, n *Node) {
if n.name == name {
n.mark++
n.marks++
}
})
return nil
Expand Down

0 comments on commit ee8cd8b

Please sign in to comment.