aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMáximo Cuadros <mcuadros@gmail.com>2020-10-09 11:49:30 +0200
committerGitHub <noreply@github.com>2020-10-09 11:49:30 +0200
commit97741e72346716fd90e534a1b9bd9f7643cd0c80 (patch)
treec82068cb9957a5d23c3a3238be8bc69b8fe4d86d
parentb5b59f5fc9f9c0cd3ad1329c814b6a0d8126e675 (diff)
parent9d7bd4d4bded83428a39dda358eef19e98e42f23 (diff)
downloadgo-git-97741e72346716fd90e534a1b9bd9f7643cd0c80.tar.gz
Merge pull request #162 from yabberyabber/fetch-errorv5.2.0
Fetch should return a unique error type when ref not found
-rw-r--r--remote.go15
-rw-r--r--remote_test.go2
2 files changed, 16 insertions, 1 deletions
diff --git a/remote.go b/remote.go
index 89b3051..d88e8e6 100644
--- a/remote.go
+++ b/remote.go
@@ -32,6 +32,19 @@ var (
ErrExactSHA1NotSupported = errors.New("server does not support exact SHA1 refspec")
)
+type NoMatchingRefSpecError struct {
+ refSpec config.RefSpec
+}
+
+func (e NoMatchingRefSpecError) Error() string {
+ return fmt.Sprintf("couldn't find remote ref %q", e.refSpec.Src())
+}
+
+func (e NoMatchingRefSpecError) Is(target error) bool {
+ _, ok := target.(NoMatchingRefSpecError)
+ return ok
+}
+
const (
// This describes the maximum number of commits to walk when
// computing the haves to send to a server, for each ref in the
@@ -751,7 +764,7 @@ func doCalculateRefs(
})
if !matched && !s.IsWildcard() {
- return fmt.Errorf("couldn't find remote ref %q", s.Src())
+ return NoMatchingRefSpecError{refSpec: s}
}
return err
diff --git a/remote_test.go b/remote_test.go
index c6ea9ea..3446f1a 100644
--- a/remote_test.go
+++ b/remote_test.go
@@ -3,6 +3,7 @@ package git
import (
"bytes"
"context"
+ "errors"
"io"
"io/ioutil"
"os"
@@ -145,6 +146,7 @@ func (s *RemoteSuite) TestFetchNonExistantReference(c *C) {
})
c.Assert(err, ErrorMatches, "couldn't find remote ref.*")
+ c.Assert(errors.Is(err, NoMatchingRefSpecError{}), Equals, true)
}
func (s *RemoteSuite) TestFetchContext(c *C) {