aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMáximo Cuadros <mcuadros@gmail.com>2020-03-19 15:27:26 +0100
committerGitHub <noreply@github.com>2020-03-19 15:27:26 +0100
commitf6305131a06bd94ef39e444b60f773db75b054f6 (patch)
tree5165824443497a01df13657d0128766fd852b865
parent1dbaf49cde7bc189fb05b875aec535b124d7dc43 (diff)
parentcec6ee36305b9d64abf78bfac637eb164be1217a (diff)
downloadgo-git-f6305131a06bd94ef39e444b60f773db75b054f6.tar.gz
Merge pull request #11 from brandonwestcott/fix/empty-packfile-server
plumbing: transport server check for nil Packfile, fixes ref deletes
-rw-r--r--plumbing/transport/server/receive_pack_test.go30
-rw-r--r--plumbing/transport/server/server.go12
2 files changed, 37 insertions, 5 deletions
diff --git a/plumbing/transport/server/receive_pack_test.go b/plumbing/transport/server/receive_pack_test.go
index de072f3..2c5b0ae 100644
--- a/plumbing/transport/server/receive_pack_test.go
+++ b/plumbing/transport/server/receive_pack_test.go
@@ -1,8 +1,13 @@
package server_test
import (
+ "context"
+
+ "github.com/go-git/go-git/v5/plumbing"
+ "github.com/go-git/go-git/v5/plumbing/protocol/packp"
"github.com/go-git/go-git/v5/plumbing/transport"
+ fixtures "github.com/go-git/go-git-fixtures/v4"
. "gopkg.in/check.v1"
)
@@ -31,3 +36,28 @@ func (s *ReceivePackSuite) TestAdvertisedReferencesNotExists(c *C) {
c.Assert(err, Equals, transport.ErrRepositoryNotFound)
c.Assert(r, IsNil)
}
+
+func (s *ReceivePackSuite) TestReceivePackWithNilPackfile(c *C) {
+ endpoint := s.Endpoint
+ auth := s.EmptyAuth
+
+ fixture := fixtures.Basic().ByTag("packfile").One()
+ req := packp.NewReferenceUpdateRequest()
+ req.Commands = []*packp.Command{
+ {Name: "refs/heads/newbranch", Old: plumbing.NewHash(fixture.Head), New: plumbing.ZeroHash},
+ }
+ // default is already nil, but be explicit since this is what the test is for
+ req.Packfile = nil
+
+ comment := Commentf(
+ "failed with ep=%s fixture=%s",
+ endpoint.String(), fixture.URL,
+ )
+
+ r, err := s.Client.NewReceivePackSession(endpoint, auth)
+ c.Assert(err, IsNil, comment)
+ defer func() { c.Assert(r.Close(), IsNil, comment) }()
+
+ report, err := r.ReceivePack(context.Background(), req)
+ c.Assert(report, IsNil, comment)
+}
diff --git a/plumbing/transport/server/server.go b/plumbing/transport/server/server.go
index 71845e3..727f902 100644
--- a/plumbing/transport/server/server.go
+++ b/plumbing/transport/server/server.go
@@ -243,11 +243,13 @@ func (s *rpSession) ReceivePack(ctx context.Context, req *packp.ReferenceUpdateR
//TODO: Implement 'atomic' update of references.
- r := ioutil.NewContextReadCloser(ctx, req.Packfile)
- if err := s.writePackfile(r); err != nil {
- s.unpackErr = err
- s.firstErr = err
- return s.reportStatus(), err
+ if req.Packfile != nil {
+ r := ioutil.NewContextReadCloser(ctx, req.Packfile)
+ if err := s.writePackfile(r); err != nil {
+ s.unpackErr = err
+ s.firstErr = err
+ return s.reportStatus(), err
+ }
}
s.updateReferences(req)