This repository was archived by the owner on Sep 11, 2020. It is now read-only.
File tree Expand file tree Collapse file tree 2 files changed +20
-4
lines changed
storage/filesystem/internal/dotgit Expand file tree Collapse file tree 2 files changed +20
-4
lines changed Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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 ))
You can’t perform that action at this time.
0 commit comments