Skip to content

Commit f630513

Browse files
authored
Merge pull request go-git#11 from brandonwestcott/fix/empty-packfile-server
plumbing: transport server check for nil Packfile, fixes ref deletes
2 parents 1dbaf49 + cec6ee3 commit f630513

File tree

2 files changed

+37
-5
lines changed

2 files changed

+37
-5
lines changed

plumbing/transport/server/receive_pack_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
package server_test
22

33
import (
4+
"context"
5+
6+
"github.com/go-git/go-git/v5/plumbing"
7+
"github.com/go-git/go-git/v5/plumbing/protocol/packp"
48
"github.com/go-git/go-git/v5/plumbing/transport"
59

10+
fixtures "github.com/go-git/go-git-fixtures/v4"
611
. "gopkg.in/check.v1"
712
)
813

@@ -31,3 +36,28 @@ func (s *ReceivePackSuite) TestAdvertisedReferencesNotExists(c *C) {
3136
c.Assert(err, Equals, transport.ErrRepositoryNotFound)
3237
c.Assert(r, IsNil)
3338
}
39+
40+
func (s *ReceivePackSuite) TestReceivePackWithNilPackfile(c *C) {
41+
endpoint := s.Endpoint
42+
auth := s.EmptyAuth
43+
44+
fixture := fixtures.Basic().ByTag("packfile").One()
45+
req := packp.NewReferenceUpdateRequest()
46+
req.Commands = []*packp.Command{
47+
{Name: "refs/heads/newbranch", Old: plumbing.NewHash(fixture.Head), New: plumbing.ZeroHash},
48+
}
49+
// default is already nil, but be explicit since this is what the test is for
50+
req.Packfile = nil
51+
52+
comment := Commentf(
53+
"failed with ep=%s fixture=%s",
54+
endpoint.String(), fixture.URL,
55+
)
56+
57+
r, err := s.Client.NewReceivePackSession(endpoint, auth)
58+
c.Assert(err, IsNil, comment)
59+
defer func() { c.Assert(r.Close(), IsNil, comment) }()
60+
61+
report, err := r.ReceivePack(context.Background(), req)
62+
c.Assert(report, IsNil, comment)
63+
}

plumbing/transport/server/server.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -243,11 +243,13 @@ func (s *rpSession) ReceivePack(ctx context.Context, req *packp.ReferenceUpdateR
243243

244244
//TODO: Implement 'atomic' update of references.
245245

246-
r := ioutil.NewContextReadCloser(ctx, req.Packfile)
247-
if err := s.writePackfile(r); err != nil {
248-
s.unpackErr = err
249-
s.firstErr = err
250-
return s.reportStatus(), err
246+
if req.Packfile != nil {
247+
r := ioutil.NewContextReadCloser(ctx, req.Packfile)
248+
if err := s.writePackfile(r); err != nil {
249+
s.unpackErr = err
250+
s.firstErr = err
251+
return s.reportStatus(), err
252+
}
251253
}
252254

253255
s.updateReferences(req)

0 commit comments

Comments
 (0)