Skip to content
This repository was archived by the owner on Sep 11, 2020. It is now read-only.

Commit b18d649

Browse files
committed
plumbing/object: allow TreeIter return SubModule entries
1 parent b3b6e51 commit b18d649

File tree

4 files changed

+65
-6
lines changed

4 files changed

+65
-6
lines changed

plumbing/object/file.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ func (iter *FileIter) Next() (*File, error) {
8181
return nil, err
8282
}
8383

84-
if entry.Mode.IsDir() {
84+
if entry.Mode.IsDir() || entry.Mode == SubmoduleMode {
8585
continue
8686
}
8787

plumbing/object/file_test.go

+26
Original file line numberDiff line numberDiff line change
@@ -247,3 +247,29 @@ func (s *FileSuite) TestFileIter(c *C) {
247247

248248
c.Assert(count, Equals, 1)
249249
}
250+
251+
func (s *FileSuite) TestFileIterSubmodule(c *C) {
252+
st, err := filesystem.NewStorage(fixtures.ByTag("submodule").One().DotGit())
253+
c.Assert(err, IsNil)
254+
255+
hash := plumbing.NewHash("a692ec699bff9117c1ed91752afbb7d9d272ebef")
256+
commit, err := GetCommit(st, hash)
257+
c.Assert(err, IsNil)
258+
259+
tree, err := commit.Tree()
260+
c.Assert(err, IsNil)
261+
262+
expected := []string{
263+
".gitmodules",
264+
}
265+
266+
var count int
267+
i := tree.Files()
268+
i.ForEach(func(f *File) error {
269+
c.Assert(f.Name, Equals, expected[count])
270+
count++
271+
return nil
272+
})
273+
274+
c.Assert(count, Equals, 1)
275+
}

plumbing/object/tree.go

-5
Original file line numberDiff line numberDiff line change
@@ -375,11 +375,6 @@ func (w *TreeWalker) Next() (name string, entry TreeEntry, err error) {
375375
return
376376
}
377377

378-
if entry.Mode == SubmoduleMode {
379-
err = nil
380-
continue
381-
}
382-
383378
if entry.Mode.IsDir() {
384379
obj, err = GetTree(w.s, entry.Hash)
385380
}

plumbing/object/tree_test.go

+38
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ import (
44
"io"
55
"os"
66

7+
fixtures "github.com/src-d/go-git-fixtures"
8+
79
"srcd.works/go-git.v4/plumbing"
10+
"srcd.works/go-git.v4/storage/filesystem"
811

912
. "gopkg.in/check.v1"
1013
"srcd.works/go-git.v4/plumbing/storer"
@@ -262,6 +265,41 @@ func (s *TreeSuite) TestTreeWalkerNextNonRecursive(c *C) {
262265
c.Assert(count, Equals, 8)
263266
}
264267

268+
func (s *TreeSuite) TestTreeWalkerNextSubmodule(c *C) {
269+
st, err := filesystem.NewStorage(fixtures.ByTag("submodule").One().DotGit())
270+
c.Assert(err, IsNil)
271+
272+
hash := plumbing.NewHash("a692ec699bff9117c1ed91752afbb7d9d272ebef")
273+
commit, err := GetCommit(st, hash)
274+
c.Assert(err, IsNil)
275+
276+
tree, err := commit.Tree()
277+
c.Assert(err, IsNil)
278+
279+
expected := []string{
280+
".gitmodules",
281+
"basic",
282+
"itself",
283+
}
284+
285+
var count int
286+
walker := NewTreeWalker(tree, true)
287+
for {
288+
name, entry, err := walker.Next()
289+
if err == io.EOF {
290+
break
291+
}
292+
293+
c.Assert(err, IsNil)
294+
c.Assert(entry, NotNil)
295+
c.Assert(name, Equals, expected[count])
296+
297+
count++
298+
}
299+
300+
c.Assert(count, Equals, 3)
301+
}
302+
265303
var treeWalkerExpects = []struct {
266304
Path, Mode, Name, Hash, Tree string
267305
}{{

0 commit comments

Comments
 (0)