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

Commit 4d8bd13

Browse files
authored
Merge pull request #1067 from ajnavarro/fix/log-all-missing-objects
Ignore missing references/objects on log --all
2 parents 2ab6d5c + 2b24822 commit 4d8bd13

File tree

2 files changed

+85
-11
lines changed

2 files changed

+85
-11
lines changed

plumbing/object/commit_walker.go

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -197,26 +197,38 @@ func NewCommitAllIter(repoStorer storage.Storer, commitIterFunc func(*Commit) Co
197197
commitsPath := list.New()
198198
commitsLookup := make(map[plumbing.Hash]*list.Element)
199199
head, err := storer.ResolveReference(repoStorer, plumbing.HEAD)
200-
if err != nil {
201-
return nil, err
200+
if err == nil {
201+
err = addReference(repoStorer, commitIterFunc, head, commitsPath, commitsLookup)
202202
}
203203

204-
// add all references along with the HEAD
205-
if err = addReference(repoStorer, commitIterFunc, head, commitsPath, commitsLookup); err != nil {
204+
if err != nil && err != plumbing.ErrReferenceNotFound {
206205
return nil, err
207206
}
207+
208+
// add all references along with the HEAD
208209
refIter, err := repoStorer.IterReferences()
209210
if err != nil {
210211
return nil, err
211212
}
212213
defer refIter.Close()
213-
err = refIter.ForEach(
214-
func(ref *plumbing.Reference) error {
215-
return addReference(repoStorer, commitIterFunc, ref, commitsPath, commitsLookup)
216-
},
217-
)
218-
if err != nil {
219-
return nil, err
214+
215+
for {
216+
ref, err := refIter.Next()
217+
if err == io.EOF {
218+
break
219+
}
220+
221+
if err == plumbing.ErrReferenceNotFound {
222+
continue
223+
}
224+
225+
if err != nil {
226+
return nil, err
227+
}
228+
229+
if err = addReference(repoStorer, commitIterFunc, ref, commitsPath, commitsLookup); err != nil {
230+
return nil, err
231+
}
220232
}
221233

222234
return &commitAllIterator{commitsPath.Front()}, nil

repository_test.go

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1256,8 +1256,18 @@ func (s *RepositorySuite) TestLogAll(c *C) {
12561256
err := r.clone(context.Background(), &CloneOptions{
12571257
URL: s.GetBasicLocalRepositoryURL(),
12581258
})
1259+
c.Assert(err, IsNil)
1260+
1261+
rIter, err := r.Storer.IterReferences()
1262+
c.Assert(err, IsNil)
12591263

1264+
refCount := 0
1265+
err = rIter.ForEach(func(ref *plumbing.Reference) error {
1266+
refCount++
1267+
return nil
1268+
})
12601269
c.Assert(err, IsNil)
1270+
c.Assert(refCount, Equals, 5)
12611271

12621272
cIter, err := r.Log(&LogOptions{
12631273
All: true,
@@ -1286,6 +1296,58 @@ func (s *RepositorySuite) TestLogAll(c *C) {
12861296
cIter.Close()
12871297
}
12881298

1299+
func (s *RepositorySuite) TestLogAllMissingReferences(c *C) {
1300+
r, _ := Init(memory.NewStorage(), nil)
1301+
err := r.clone(context.Background(), &CloneOptions{
1302+
URL: s.GetBasicLocalRepositoryURL(),
1303+
})
1304+
c.Assert(err, IsNil)
1305+
err = r.Storer.RemoveReference(plumbing.HEAD)
1306+
c.Assert(err, IsNil)
1307+
1308+
rIter, err := r.Storer.IterReferences()
1309+
c.Assert(err, IsNil)
1310+
1311+
refCount := 0
1312+
err = rIter.ForEach(func(ref *plumbing.Reference) error {
1313+
refCount++
1314+
return nil
1315+
})
1316+
c.Assert(err, IsNil)
1317+
c.Assert(refCount, Equals, 4)
1318+
1319+
err = r.Storer.SetReference(plumbing.NewHashReference(plumbing.ReferenceName("DUMMY"), plumbing.NewHash("DUMMY")))
1320+
c.Assert(err, IsNil)
1321+
1322+
rIter, err = r.Storer.IterReferences()
1323+
c.Assert(err, IsNil)
1324+
1325+
refCount = 0
1326+
err = rIter.ForEach(func(ref *plumbing.Reference) error {
1327+
refCount++
1328+
return nil
1329+
})
1330+
c.Assert(err, IsNil)
1331+
c.Assert(refCount, Equals, 5)
1332+
1333+
cIter, err := r.Log(&LogOptions{
1334+
All: true,
1335+
})
1336+
c.Assert(cIter, NotNil)
1337+
c.Assert(err, IsNil)
1338+
1339+
cCount := 0
1340+
cIter.ForEach(func(c *object.Commit) error {
1341+
cCount++
1342+
return nil
1343+
})
1344+
c.Assert(cCount, Equals, 9)
1345+
1346+
_, err = cIter.Next()
1347+
c.Assert(err, Equals, io.EOF)
1348+
cIter.Close()
1349+
}
1350+
12891351
func (s *RepositorySuite) TestLogAllOrderByTime(c *C) {
12901352
r, _ := Init(memory.NewStorage(), nil)
12911353
err := r.clone(context.Background(), &CloneOptions{

0 commit comments

Comments
 (0)