diff options
author | Alan Cabrera <adc@toolazydogs.com> | 2018-03-14 07:58:13 -0700 |
---|---|---|
committer | Alan Cabrera <acabrera@nianticlabs.com> | 2018-03-14 08:06:44 -0700 |
commit | d873056e03f21724f799824e02a17b2da7fd29af (patch) | |
tree | 5230fc30372b4f0414509b473b281cecbac6204d | |
parent | ecda5c1512bcb19e1802d629b18872ec995e23cf (diff) | |
download | go-git-d873056e03f21724f799824e02a17b2da7fd29af.tar.gz |
Fix RefSpec.Src()
Previously, the Src() function was assuming there are no “+” characters in the refspec src
and erroneously used the strings.Index() function to compute the start index of src in the
refspec. This change now uses the IsForceUpdate() method to decide how to elide the
force update token.
Signed-off-by: Alan Cabrera <adc@toolazydogs.com>
-rw-r--r-- | config/refspec.go | 8 | ||||
-rw-r--r-- | config/refspec_test.go | 6 |
2 files changed, 13 insertions, 1 deletions
diff --git a/config/refspec.go b/config/refspec.go index af7e732..c9b9d52 100644 --- a/config/refspec.go +++ b/config/refspec.go @@ -62,7 +62,13 @@ func (s RefSpec) IsDelete() bool { // Src return the src side. func (s RefSpec) Src() string { spec := string(s) - start := strings.Index(spec, refSpecForce) + 1 + + var start int + if s.IsForceUpdate() { + start = 1 + } else { + start = 0 + } end := strings.Index(spec, refSpecSeparator) return spec[start:end] diff --git a/config/refspec_test.go b/config/refspec_test.go index 5ee6108..6daddb4 100644 --- a/config/refspec_test.go +++ b/config/refspec_test.go @@ -64,6 +64,9 @@ func (s *RefSpecSuite) TestRefSpecSrc(c *C) { spec = RefSpec(":refs/heads/master") c.Assert(spec.Src(), Equals, "") + + spec = RefSpec("refs/heads/love+hate:refs/heads/love+hate") + c.Assert(spec.Src(), Equals, "refs/heads/love+hate") } func (s *RefSpecSuite) TestRefSpecMatch(c *C) { @@ -74,6 +77,9 @@ func (s *RefSpecSuite) TestRefSpecMatch(c *C) { spec = RefSpec(":refs/heads/master") c.Assert(spec.Match(plumbing.ReferenceName("")), Equals, true) c.Assert(spec.Match(plumbing.ReferenceName("refs/heads/master")), Equals, false) + + spec = RefSpec("refs/heads/love+hate:heads/love+hate") + c.Assert(spec.Match(plumbing.ReferenceName("refs/heads/love+hate")), Equals, true) } func (s *RefSpecSuite) TestRefSpecMatchGlob(c *C) { |