diff options
author | Máximo Cuadros <mcuadros@gmail.com> | 2018-12-04 13:43:21 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-04 13:43:21 +0100 |
commit | 443abf89696c62d46e0c3e567c8ba380ff974d0d (patch) | |
tree | f7aa2fc1c67af06a0ff5f53c9fef3fc46f303780 | |
parent | 8f52c5099e7fe4a2519920a7bbf5a9bb52ff9cec (diff) | |
parent | a4278c1c081578055c1e4df96aef54257729a100 (diff) | |
download | go-git-443abf89696c62d46e0c3e567c8ba380ff974d0d.tar.gz |
Merge pull request #1031 from jfontan/fix/error-fetching
git: return better error message when packfile cannot be downloaded
-rw-r--r-- | plumbing/format/packfile/common.go | 8 | ||||
-rw-r--r-- | plumbing/format/packfile/common_test.go | 14 | ||||
-rw-r--r-- | repository.go | 4 |
3 files changed, 25 insertions, 1 deletions
diff --git a/plumbing/format/packfile/common.go b/plumbing/format/packfile/common.go index 2b4aceb..0d9ed54 100644 --- a/plumbing/format/packfile/common.go +++ b/plumbing/format/packfile/common.go @@ -51,7 +51,13 @@ func WritePackfileToObjectStorage( } defer ioutil.CheckClose(w, &err) - _, err = io.Copy(w, packfile) + + var n int64 + n, err = io.Copy(w, packfile) + if err == nil && n == 0 { + return ErrEmptyPackfile + } + return err } diff --git a/plumbing/format/packfile/common_test.go b/plumbing/format/packfile/common_test.go index 387c0d1..eafc617 100644 --- a/plumbing/format/packfile/common_test.go +++ b/plumbing/format/packfile/common_test.go @@ -1,15 +1,29 @@ package packfile import ( + "bytes" "testing" "gopkg.in/src-d/go-git.v4/plumbing" + "gopkg.in/src-d/go-git.v4/storage/memory" . "gopkg.in/check.v1" ) func Test(t *testing.T) { TestingT(t) } +type CommonSuite struct{} + +var _ = Suite(&CommonSuite{}) + +func (s *CommonSuite) TestEmptyUpdateObjectStorage(c *C) { + var buf bytes.Buffer + sto := memory.NewStorage() + + err := UpdateObjectStorage(sto, &buf) + c.Assert(err, Equals, ErrEmptyPackfile) +} + func newObject(t plumbing.ObjectType, cont []byte) plumbing.EncodedObject { o := plumbing.MemoryObject{} o.SetType(t) diff --git a/repository.go b/repository.go index 97134ec..1f64b9f 100644 --- a/repository.go +++ b/repository.go @@ -41,6 +41,8 @@ var ( ErrTagExists = errors.New("tag already exists") // ErrTagNotFound an error stating the specified tag does not exist ErrTagNotFound = errors.New("tag not found") + // ErrFetching is returned when the packfile could not be downloaded + ErrFetching = errors.New("unable to fetch packfile") ErrInvalidReference = errors.New("invalid reference, should be a tag or a branch") ErrRepositoryNotExists = errors.New("repository does not exist") @@ -858,6 +860,8 @@ func (r *Repository) fetchAndUpdateReferences( remoteRefs, err := remote.fetch(ctx, o) if err == NoErrAlreadyUpToDate { objsUpdated = false + } else if err == packfile.ErrEmptyPackfile { + return nil, ErrFetching } else if err != nil { return nil, err } |