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

Commit 9c80677

Browse files
committed
dotgit: don't list references twice
Restore the `seen` map that avoided listing packed-refs twice.
1 parent 129ff16 commit 9c80677

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

storage/filesystem/internal/dotgit/dotgit.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ func (d *DotGit) Refs() ([]*plumbing.Reference, error) {
268268
return nil, err
269269
}
270270

271-
if err := d.addRefsFromPackedRefs(&refs); err != nil {
271+
if err := d.addRefsFromPackedRefs(&refs, seen); err != nil {
272272
return nil, err
273273
}
274274

@@ -347,13 +347,18 @@ func (d *DotGit) RemoveRef(name plumbing.ReferenceName) error {
347347
return d.rewritePackedRefsWithoutRef(name)
348348
}
349349

350-
func (d *DotGit) addRefsFromPackedRefs(refs *[]*plumbing.Reference) (err error) {
350+
func (d *DotGit) addRefsFromPackedRefs(refs *[]*plumbing.Reference, seen map[plumbing.ReferenceName]bool) (err error) {
351351
packedRefs, err := d.findPackedRefs()
352352
if err != nil {
353353
return err
354354
}
355355

356-
*refs = append(*refs, packedRefs...)
356+
for _, ref := range packedRefs {
357+
if !seen[ref.Name()] {
358+
*refs = append(*refs, ref)
359+
seen[ref.Name()] = true
360+
}
361+
}
357362
return nil
358363
}
359364

storage/filesystem/internal/dotgit/dotgit_test.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,17 @@ func (s *SuiteDotGit) TestRemoveRefFromReferenceFileAndPackedRefs(c *C) {
194194
"e8d3ffab552895c19b9fcf7aa264d277cde33881",
195195
))
196196

197+
// Make sure it only appears once in the refs list.
198+
refs, err := dir.Refs()
199+
c.Assert(err, IsNil)
200+
found := false
201+
for _, ref := range refs {
202+
if ref.Name() == "refs/remotes/origin/branch" {
203+
c.Assert(found, Equals, false)
204+
found = true
205+
}
206+
}
207+
197208
name := plumbing.ReferenceName("refs/remotes/origin/branch")
198209
err = dir.RemoveRef(name)
199210
c.Assert(err, IsNil)
@@ -206,7 +217,7 @@ func (s *SuiteDotGit) TestRemoveRefFromReferenceFileAndPackedRefs(c *C) {
206217
"6ecf0ef2c2dffb796033e5a02219af86ec6584e5 refs/heads/master\n"+
207218
"6ecf0ef2c2dffb796033e5a02219af86ec6584e5 refs/remotes/origin/master\n")
208219

209-
refs, err := dir.Refs()
220+
refs, err = dir.Refs()
210221
c.Assert(err, IsNil)
211222

212223
ref := findReference(refs, string(name))

0 commit comments

Comments
 (0)