Skip to content

Commit dcec851

Browse files
authored
Merge pull request src-d#640 from cesanta/fixdirsymlink
utils: merkletrie, filesystem fix symlinks to dir
2 parents 4cbf210 + c0e26a1 commit dcec851

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

utils/merkletrie/filesystem/node.go

+4
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@ func (n *node) NumChildren() (int, error) {
7777
}
7878

7979
func (n *node) calculateChildren() error {
80+
if !n.IsDir() {
81+
return nil
82+
}
83+
8084
if len(n.children) != 0 {
8185
return nil
8286
}

utils/merkletrie/filesystem/node_test.go

+36
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,42 @@ func (s *NoderSuite) TestDiffChangeContent(c *C) {
8282
c.Assert(ch, HasLen, 1)
8383
}
8484

85+
func (s *NoderSuite) TestDiffSymlinkDirOnA(c *C) {
86+
fsA := memfs.New()
87+
WriteFile(fsA, "qux/qux", []byte("foo"), 0644)
88+
89+
fsB := memfs.New()
90+
fsB.Symlink("qux", "foo")
91+
WriteFile(fsB, "qux/qux", []byte("foo"), 0644)
92+
93+
ch, err := merkletrie.DiffTree(
94+
NewRootNode(fsA, nil),
95+
NewRootNode(fsB, nil),
96+
IsEquals,
97+
)
98+
99+
c.Assert(err, IsNil)
100+
c.Assert(ch, HasLen, 1)
101+
}
102+
103+
func (s *NoderSuite) TestDiffSymlinkDirOnB(c *C) {
104+
fsA := memfs.New()
105+
fsA.Symlink("qux", "foo")
106+
WriteFile(fsA, "qux/qux", []byte("foo"), 0644)
107+
108+
fsB := memfs.New()
109+
WriteFile(fsB, "qux/qux", []byte("foo"), 0644)
110+
111+
ch, err := merkletrie.DiffTree(
112+
NewRootNode(fsA, nil),
113+
NewRootNode(fsB, nil),
114+
IsEquals,
115+
)
116+
117+
c.Assert(err, IsNil)
118+
c.Assert(ch, HasLen, 1)
119+
}
120+
85121
func (s *NoderSuite) TestDiffChangeMissing(c *C) {
86122
fsA := memfs.New()
87123
WriteFile(fsA, "foo", []byte("foo"), 0644)

0 commit comments

Comments
 (0)