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

Commit 3ba215f

Browse files
authored
Merge pull request #479 from mcuadros/duplicate
remote: avoid duplicate haves
2 parents 6b3a6df + c0de884 commit 3ba215f

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

remote.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -356,20 +356,30 @@ func getHaves(localRefs storer.ReferenceStorer) ([]plumbing.Hash, error) {
356356
return nil, err
357357
}
358358

359-
var haves []plumbing.Hash
359+
haves := map[plumbing.Hash]bool{}
360360
err = iter.ForEach(func(ref *plumbing.Reference) error {
361+
if haves[ref.Hash()] == true {
362+
return nil
363+
}
364+
361365
if ref.Type() != plumbing.HashReference {
362366
return nil
363367
}
364368

365-
haves = append(haves, ref.Hash())
369+
haves[ref.Hash()] = true
366370
return nil
367371
})
372+
368373
if err != nil {
369374
return nil, err
370375
}
371376

372-
return haves, nil
377+
var result []plumbing.Hash
378+
for h := range haves {
379+
result = append(result, h)
380+
}
381+
382+
return result, nil
373383
}
374384

375385
func getWants(

remote_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,25 @@ func (s *RemoteSuite) TestPushWrongRemoteName(c *C) {
499499
c.Assert(err, ErrorMatches, ".*remote names don't match.*")
500500
}
501501

502+
func (s *RemoteSuite) TestGetHaves(c *C) {
503+
st := memory.NewStorage()
504+
st.SetReference(plumbing.NewReferenceFromStrings(
505+
"foo", "f7b877701fbf855b44c0a9e86f3fdce2c298b07f",
506+
))
507+
508+
st.SetReference(plumbing.NewReferenceFromStrings(
509+
"bar", "fe6cb94756faa81e5ed9240f9191b833db5f40ae",
510+
))
511+
512+
st.SetReference(plumbing.NewReferenceFromStrings(
513+
"qux", "f7b877701fbf855b44c0a9e86f3fdce2c298b07f",
514+
))
515+
516+
l, err := getHaves(st)
517+
c.Assert(err, IsNil)
518+
c.Assert(l, HasLen, 2)
519+
}
520+
502521
const bareConfig = `[core]
503522
repositoryformatversion = 0
504523
filemode = true

0 commit comments

Comments
 (0)