diff options
Diffstat (limited to 'plumbing')
-rw-r--r-- | plumbing/format/idxfile/decoder_test.go | 3 | ||||
-rw-r--r-- | plumbing/format/idxfile/encoder_test.go | 3 | ||||
-rw-r--r-- | plumbing/format/packfile/decoder_test.go | 2 | ||||
-rw-r--r-- | plumbing/object/commit_walker.go | 8 | ||||
-rw-r--r-- | plumbing/object/commit_walker_test.go | 4 | ||||
-rw-r--r-- | plumbing/revlist/revlist.go | 2 | ||||
-rw-r--r-- | plumbing/storer/storer.go | 2 | ||||
-rw-r--r-- | plumbing/transport/file/client.go | 17 | ||||
-rw-r--r-- | plumbing/transport/file/receive_pack_test.go | 4 | ||||
-rw-r--r-- | plumbing/transport/file/server_test.go | 4 | ||||
-rw-r--r-- | plumbing/transport/file/upload_pack_test.go | 7 | ||||
-rw-r--r-- | plumbing/transport/git/common.go | 10 | ||||
-rw-r--r-- | plumbing/transport/git/receive_pack_test.go | 140 | ||||
-rw-r--r-- | plumbing/transport/internal/common/common.go | 50 | ||||
-rw-r--r-- | plumbing/transport/server/loader.go | 10 | ||||
-rw-r--r-- | plumbing/transport/server/server_test.go | 22 | ||||
-rw-r--r-- | plumbing/transport/test/receive_pack.go | 9 |
17 files changed, 223 insertions, 74 deletions
diff --git a/plumbing/format/idxfile/decoder_test.go b/plumbing/format/idxfile/decoder_test.go index 27aa59b..609f4e3 100644 --- a/plumbing/format/idxfile/decoder_test.go +++ b/plumbing/format/idxfile/decoder_test.go @@ -5,10 +5,11 @@ import ( "fmt" "testing" - . "gopkg.in/check.v1" "github.com/src-d/go-git-fixtures" "gopkg.in/src-d/go-git.v4/plumbing/format/packfile" "gopkg.in/src-d/go-git.v4/storage/memory" + + . "gopkg.in/check.v1" ) func Test(t *testing.T) { TestingT(t) } diff --git a/plumbing/format/idxfile/encoder_test.go b/plumbing/format/idxfile/encoder_test.go index fab87b3..1fc4e9c 100644 --- a/plumbing/format/idxfile/encoder_test.go +++ b/plumbing/format/idxfile/encoder_test.go @@ -4,9 +4,10 @@ import ( "bytes" "io/ioutil" - . "gopkg.in/check.v1" "github.com/src-d/go-git-fixtures" "gopkg.in/src-d/go-git.v4/plumbing" + + . "gopkg.in/check.v1" ) func (s *IdxfileSuite) TestEncode(c *C) { diff --git a/plumbing/format/packfile/decoder_test.go b/plumbing/format/packfile/decoder_test.go index f081fd7..f1e2ed7 100644 --- a/plumbing/format/packfile/decoder_test.go +++ b/plumbing/format/packfile/decoder_test.go @@ -3,7 +3,7 @@ package packfile_test import ( "io" - "gopkg.in/src-d/go-billy.v2/memfs" + "gopkg.in/src-d/go-billy.v3/memfs" "github.com/src-d/go-git-fixtures" "gopkg.in/src-d/go-git.v4/plumbing" diff --git a/plumbing/object/commit_walker.go b/plumbing/object/commit_walker.go index 3316fab..8d2c6e8 100644 --- a/plumbing/object/commit_walker.go +++ b/plumbing/object/commit_walker.go @@ -13,13 +13,13 @@ type commitPreIterator struct { start *Commit } -// NewCommitPreIterator returns a CommitIter that walks the commit history, +// NewCommitPreorderIter returns a CommitIter that walks the commit history, // starting at the given commit and visiting its parents in pre-order. // The given callback will be called for each visited commit. Each commit will // be visited only once. If the callback returns an error, walking will stop // and will return the error. Other errors might be returned if the history // cannot be traversed (e.g. missing objects). -func NewCommitPreIterator(c *Commit) CommitIter { +func NewCommitPreorderIter(c *Commit) CommitIter { return &commitPreIterator{ seen: make(map[plumbing.Hash]bool), stack: make([]CommitIter, 0), @@ -94,12 +94,12 @@ type commitPostIterator struct { seen map[plumbing.Hash]bool } -// NewCommitPostIterator returns a CommitIter that walks the commit +// NewCommitPostorderIter returns a CommitIter that walks the commit // history like WalkCommitHistory but in post-order. This means that after // walking a merge commit, the merged commit will be walked before the base // it was merged on. This can be useful if you wish to see the history in // chronological order. -func NewCommitPostIterator(c *Commit) CommitIter { +func NewCommitPostorderIter(c *Commit) CommitIter { return &commitPostIterator{ stack: []*Commit{c}, seen: make(map[plumbing.Hash]bool), diff --git a/plumbing/object/commit_walker_test.go b/plumbing/object/commit_walker_test.go index 7d04bce..2a03057 100644 --- a/plumbing/object/commit_walker_test.go +++ b/plumbing/object/commit_walker_test.go @@ -12,7 +12,7 @@ func (s *CommitWalkerSuite) TestCommitPreIterator(c *C) { commit := s.commit(c, s.Fixture.Head) var commits []*Commit - wIter := NewCommitPreIterator(commit) + wIter := NewCommitPreorderIter(commit) wIter.ForEach(func(c *Commit) error { commits = append(commits, c) return nil @@ -39,7 +39,7 @@ func (s *CommitWalkerSuite) TestCommitPostIterator(c *C) { commit := s.commit(c, s.Fixture.Head) var commits []*Commit - wIter := NewCommitPostIterator(commit) + wIter := NewCommitPostorderIter(commit) wIter.ForEach(func(c *Commit) error { commits = append(commits, c) return nil diff --git a/plumbing/revlist/revlist.go b/plumbing/revlist/revlist.go index fbd1bd9..3e02184 100644 --- a/plumbing/revlist/revlist.go +++ b/plumbing/revlist/revlist.go @@ -82,7 +82,7 @@ func reachableObjects( commit *object.Commit, seen map[plumbing.Hash]bool, cb func(h plumbing.Hash)) error { - return object.NewCommitPreIterator(commit). + return object.NewCommitPreorderIter(commit). ForEach(func(commit *object.Commit) error { if seen[commit.Hash] { return nil diff --git a/plumbing/storer/storer.go b/plumbing/storer/storer.go index 863070d..c7bc65a 100644 --- a/plumbing/storer/storer.go +++ b/plumbing/storer/storer.go @@ -8,7 +8,7 @@ type Storer interface { // Initializer should be implemented by storers that require to perform any // operation when creating a new repository (i.e. git init). -type Initializer interface{ +type Initializer interface { // Init performs initialization of the storer and returns the error, if // any. Init() error diff --git a/plumbing/transport/file/client.go b/plumbing/transport/file/client.go index d2a57d0..a199b01 100644 --- a/plumbing/transport/file/client.go +++ b/plumbing/transport/file/client.go @@ -3,6 +3,7 @@ package file import ( "io" + "os" "os/exec" "gopkg.in/src-d/go-git.v4/plumbing/transport" @@ -71,10 +72,16 @@ func (c *command) Close() error { return nil } - return c.cmd.Process.Kill() -} - -func (c *command) Wait() error { defer func() { c.closed = true }() - return c.cmd.Wait() + err := c.cmd.Wait() + if _, ok := err.(*os.PathError); ok { + return nil + } + + // When a repository does not exist, the command exits with code 128. + if _, ok := err.(*exec.ExitError); ok { + return nil + } + + return err } diff --git a/plumbing/transport/file/receive_pack_test.go b/plumbing/transport/file/receive_pack_test.go index 5bbad44..ab21aea 100644 --- a/plumbing/transport/file/receive_pack_test.go +++ b/plumbing/transport/file/receive_pack_test.go @@ -23,11 +23,11 @@ func (s *ReceivePackSuite) SetUpSuite(c *C) { func (s *ReceivePackSuite) SetUpTest(c *C) { fixture := fixtures.Basic().One() - path := fixture.DotGit().Base() + path := fixture.DotGit().Root() s.Endpoint = prepareRepo(c, path) fixture = fixtures.ByTag("empty").One() - path = fixture.DotGit().Base() + path = fixture.DotGit().Root() s.EmptyEndpoint = prepareRepo(c, path) s.NonExistentEndpoint = prepareRepo(c, "/non-existent") diff --git a/plumbing/transport/file/server_test.go b/plumbing/transport/file/server_test.go index 176d6ee..ee72282 100644 --- a/plumbing/transport/file/server_test.go +++ b/plumbing/transport/file/server_test.go @@ -24,10 +24,10 @@ func (s *ServerSuite) SetUpSuite(c *C) { s.RemoteName = "test" fixture := fixtures.Basic().One() - s.SrcPath = fixture.DotGit().Base() + s.SrcPath = fixture.DotGit().Root() fixture = fixtures.ByTag("empty").One() - s.DstPath = fixture.DotGit().Base() + s.DstPath = fixture.DotGit().Root() cmd := exec.Command("git", "remote", "add", s.RemoteName, s.DstPath) cmd.Dir = s.SrcPath diff --git a/plumbing/transport/file/upload_pack_test.go b/plumbing/transport/file/upload_pack_test.go index f013683..f894935 100644 --- a/plumbing/transport/file/upload_pack_test.go +++ b/plumbing/transport/file/upload_pack_test.go @@ -24,13 +24,13 @@ func (s *UploadPackSuite) SetUpSuite(c *C) { s.UploadPackSuite.Client = DefaultClient fixture := fixtures.Basic().One() - path := fixture.DotGit().Base() + path := fixture.DotGit().Root() ep, err := transport.NewEndpoint(path) c.Assert(err, IsNil) s.Endpoint = ep fixture = fixtures.ByTag("empty").One() - path = fixture.DotGit().Base() + path = fixture.DotGit().Root() ep, err = transport.NewEndpoint(path) c.Assert(err, IsNil) s.EmptyEndpoint = ep @@ -74,6 +74,7 @@ func (s *UploadPackSuite) TestNonExistentCommand(c *C) { cmd := "/non-existent-git" client := NewClient(cmd, cmd) session, err := client.NewUploadPackSession(s.Endpoint, s.EmptyAuth) - c.Assert(err, ErrorMatches, ".*no such file or directory.*") + // Error message is OS-dependant, so do a broad check + c.Assert(err, ErrorMatches, ".*file.*") c.Assert(session, IsNil) } diff --git a/plumbing/transport/git/common.go b/plumbing/transport/git/common.go index 753f125..fcd02f8 100644 --- a/plumbing/transport/git/common.go +++ b/plumbing/transport/git/common.go @@ -90,12 +90,12 @@ func (c *command) StdoutPipe() (io.Reader, error) { } func endpointToCommand(cmd string, ep transport.Endpoint) string { - return fmt.Sprintf("%s %s%chost=%s%c", cmd, ep.Path(), 0, ep.Host(), 0) -} + host := ep.Host() + if ep.Port() != DefaultPort { + host = fmt.Sprintf("%s:%d", ep.Host(), ep.Port()) + } -// Wait no-op function, required by the interface -func (c *command) Wait() error { - return nil + return fmt.Sprintf("%s %s%chost=%s%c", cmd, ep.Path(), 0, host, 0) } // Close closes the TCP connection and connection. diff --git a/plumbing/transport/git/receive_pack_test.go b/plumbing/transport/git/receive_pack_test.go new file mode 100644 index 0000000..326ef1b --- /dev/null +++ b/plumbing/transport/git/receive_pack_test.go @@ -0,0 +1,140 @@ +package git + +import ( + "fmt" + "io" + "io/ioutil" + "net" + "os" + "os/exec" + "path/filepath" + "strings" + "time" + + "github.com/src-d/go-git-fixtures" + "gopkg.in/src-d/go-git.v4/plumbing/transport" + "gopkg.in/src-d/go-git.v4/plumbing/transport/test" + + . "gopkg.in/check.v1" +) + +type ReceivePackSuite struct { + test.ReceivePackSuite + fixtures.Suite + + base string + daemon *exec.Cmd +} + +var _ = Suite(&ReceivePackSuite{}) + +func (s *ReceivePackSuite) SetUpTest(c *C) { + s.ReceivePackSuite.Client = DefaultClient + + port, err := freePort() + c.Assert(err, IsNil) + + base, err := ioutil.TempDir(os.TempDir(), "go-git-daemon-test") + c.Assert(err, IsNil) + s.base = base + + host := fmt.Sprintf("localhost_%d", port) + interpolatedBase := filepath.Join(base, host) + err = os.MkdirAll(interpolatedBase, 0755) + c.Assert(err, IsNil) + + dotgit := fixtures.Basic().One().DotGit().Root() + prepareRepo(c, dotgit) + err = os.Rename(dotgit, filepath.Join(interpolatedBase, "basic.git")) + c.Assert(err, IsNil) + + ep, err := transport.NewEndpoint(fmt.Sprintf("git://localhost:%d/basic.git", port)) + c.Assert(err, IsNil) + s.ReceivePackSuite.Endpoint = ep + + dotgit = fixtures.ByTag("empty").One().DotGit().Root() + prepareRepo(c, dotgit) + err = os.Rename(dotgit, filepath.Join(interpolatedBase, "empty.git")) + c.Assert(err, IsNil) + + ep, err = transport.NewEndpoint(fmt.Sprintf("git://localhost:%d/empty.git", port)) + c.Assert(err, IsNil) + s.ReceivePackSuite.EmptyEndpoint = ep + + ep, err = transport.NewEndpoint(fmt.Sprintf("git://localhost:%d/non-existent.git", port)) + c.Assert(err, IsNil) + s.ReceivePackSuite.NonExistentEndpoint = ep + + s.daemon = exec.Command( + "git", + "daemon", + fmt.Sprintf("--base-path=%s", base), + "--export-all", + "--enable=receive-pack", + "--reuseaddr", + fmt.Sprintf("--port=%d", port), + // Use interpolated paths to validate that clients are specifying + // host and port properly. + // Note that some git versions (e.g. v2.11.0) had a bug that prevented + // the use of repository paths containing colons (:), so we use + // underscore (_) instead of colon in the interpolation. + // See https://github.com/git/git/commit/fe050334074c5132d01e1df2c1b9a82c9b8d394c + fmt.Sprintf("--interpolated-path=%s/%%H_%%P%%D", base), + // Unless max-connections is limited to 1, a git-receive-pack + // might not be seen by a subsequent operation. + "--max-connections=1", + // Whitelist required for interpolated paths. + fmt.Sprintf("%s/%s", interpolatedBase, "basic.git"), + fmt.Sprintf("%s/%s", interpolatedBase, "empty.git"), + ) + + // Environment must be inherited in order to acknowledge GIT_EXEC_PATH if set. + s.daemon.Env = os.Environ() + + err = s.daemon.Start() + c.Assert(err, IsNil) + + // Connections might be refused if we start sending request too early. + time.Sleep(time.Millisecond * 500) +} + +func (s *ReceivePackSuite) TearDownTest(c *C) { + err := s.daemon.Process.Signal(os.Interrupt) + c.Assert(err, IsNil) + _ = s.daemon.Wait() + err = os.RemoveAll(s.base) + c.Assert(err, IsNil) +} + +func freePort() (int, error) { + addr, err := net.ResolveTCPAddr("tcp", "localhost:0") + if err != nil { + return 0, err + } + + l, err := net.ListenTCP("tcp", addr) + if err != nil { + return 0, err + } + + return l.Addr().(*net.TCPAddr).Port, l.Close() +} + +const bareConfig = `[core] +repositoryformatversion = 0 +filemode = true +bare = true` + +func prepareRepo(c *C, path string) { + // git-receive-pack refuses to update refs/heads/master on non-bare repo + // so we ensure bare repo config. + config := filepath.Join(path, "config") + if _, err := os.Stat(config); err == nil { + f, err := os.OpenFile(config, os.O_TRUNC|os.O_WRONLY, 0) + c.Assert(err, IsNil) + content := strings.NewReader(bareConfig) + _, err = io.Copy(f, content) + c.Assert(err, IsNil) + c.Assert(f.Close(), IsNil) + } +} diff --git a/plumbing/transport/internal/common/common.go b/plumbing/transport/internal/common/common.go index f67ae29..c1e1518 100644 --- a/plumbing/transport/internal/common/common.go +++ b/plumbing/transport/internal/common/common.go @@ -59,14 +59,8 @@ type Command interface { // Start starts the specified command. It does not wait for it to // complete. Start() error - // Wait waits for the command to exit. It must have been started by - // Start. The returned error is nil if the command runs, has no - // problems copying stdin, stdout, and stderr, and exits with a zero - // exit status. - Wait() error // Close closes the command and releases any resources used by it. It - // can be called to forcibly finish the command without calling to Wait - // or to release resources after calling Wait. + // will block until the command exits. Close() error } @@ -178,6 +172,7 @@ func (s *session) handleAdvRefDecodeError(err error) error { // If repository is not found, we get empty stdout and server writes an // error to stderr. if err == packp.ErrEmptyInput { + s.finished = true if err := s.checkNotFoundError(); err != nil { return err } @@ -246,9 +241,7 @@ func (s *session) UploadPack(req *packp.UploadPackRequest) (*packp.UploadPackRes return nil, err } - wc := &waitCloser{s.Command} - rc := ioutil.NewReadCloser(r, wc) - + rc := ioutil.NewReadCloser(r, s.Command) return DecodeUploadPackResponse(rc, req) } @@ -263,10 +256,14 @@ func (s *session) ReceivePack(req *packp.ReferenceUpdateRequest) (*packp.ReportS return nil, err } + if err := s.Stdin.Close(); err != nil { + return nil, err + } + if !req.Capabilities.Supports(capability.ReportStatus) { // If we have neither report-status or sideband, we can only // check return value error. - return nil, s.Command.Wait() + return nil, s.Command.Close() } report := packp.NewReportStatus() @@ -278,7 +275,7 @@ func (s *session) ReceivePack(req *packp.ReferenceUpdateRequest) (*packp.ReportS return report, err } - return report, s.Command.Wait() + return report, s.Command.Close() } func (s *session) finish() error { @@ -302,7 +299,7 @@ func (s *session) finish() error { func (s *session) Close() error { if err := s.finish(); err != nil { _ = s.Command.Close() - return nil + return err } return s.Command.Close() @@ -329,10 +326,12 @@ func (s *session) checkNotFoundError() error { } var ( - githubRepoNotFoundErr = "ERROR: Repository not found." - bitbucketRepoNotFoundErr = "conq: repository does not exist." - localRepoNotFoundErr = "does not appear to be a git repository" - gitProtocolNotFoundErr = "ERR \n Repository not found." + githubRepoNotFoundErr = "ERROR: Repository not found." + bitbucketRepoNotFoundErr = "conq: repository does not exist." + localRepoNotFoundErr = "does not appear to be a git repository" + gitProtocolNotFoundErr = "ERR \n Repository not found." + gitProtocolNoSuchErr = "ERR no such repository" + gitProtocolAccessDeniedErr = "ERR access denied" ) func isRepoNotFoundError(s string) bool { @@ -352,6 +351,14 @@ func isRepoNotFoundError(s string) bool { return true } + if strings.HasPrefix(s, gitProtocolNoSuchErr) { + return true + } + + if strings.HasPrefix(s, gitProtocolAccessDeniedErr) { + return true + } + return false } @@ -403,12 +410,3 @@ func DecodeUploadPackResponse(r io.ReadCloser, req *packp.UploadPackRequest) ( return res, nil } - -type waitCloser struct { - Command Command -} - -// Close waits until the command exits and returns error, if any. -func (c *waitCloser) Close() error { - return c.Command.Wait() -} diff --git a/plumbing/transport/server/loader.go b/plumbing/transport/server/loader.go index 386c2f0..d4eccd4 100644 --- a/plumbing/transport/server/loader.go +++ b/plumbing/transport/server/loader.go @@ -5,8 +5,8 @@ import ( "gopkg.in/src-d/go-git.v4/plumbing/transport" "gopkg.in/src-d/go-git.v4/storage/filesystem" - "gopkg.in/src-d/go-billy.v2" - "gopkg.in/src-d/go-billy.v2/osfs" + "gopkg.in/src-d/go-billy.v3" + "gopkg.in/src-d/go-billy.v3/osfs" ) // DefaultLoader is a filesystem loader ignoring host and resolving paths to /. @@ -34,7 +34,11 @@ func NewFilesystemLoader(base billy.Filesystem) Loader { // storer for it. Returns transport.ErrRepositoryNotFound if a repository does // not exist in the given path. func (l *fsLoader) Load(ep transport.Endpoint) (storer.Storer, error) { - fs := l.base.Dir(ep.Path()) + fs, err := l.base.Chroot(ep.Path()) + if err != nil { + return nil, err + } + if _, err := fs.Stat("config"); err != nil { return nil, transport.ErrRepositoryNotFound } diff --git a/plumbing/transport/server/server_test.go b/plumbing/transport/server/server_test.go index 6a64674..0f7201c 100644 --- a/plumbing/transport/server/server_test.go +++ b/plumbing/transport/server/server_test.go @@ -1,7 +1,6 @@ package server_test import ( - "fmt" "testing" "github.com/src-d/go-git-fixtures" @@ -16,8 +15,6 @@ import ( func Test(t *testing.T) { TestingT(t) } -const inprocScheme = "inproc" - type BaseSuite struct { fixtures.Suite loader server.MapLoader @@ -29,15 +26,15 @@ func (s *BaseSuite) SetUpSuite(c *C) { s.Suite.SetUpSuite(c) s.loader = server.MapLoader{} s.client = server.NewServer(s.loader) - s.clientBackup = client.Protocols[inprocScheme] - client.Protocols[inprocScheme] = s.client + s.clientBackup = client.Protocols["file"] + client.Protocols["file"] = s.client } func (s *BaseSuite) TearDownSuite(c *C) { if s.clientBackup == nil { - delete(client.Protocols, inprocScheme) + delete(client.Protocols, "file") } else { - client.Protocols[inprocScheme] = s.clientBackup + client.Protocols["file"] = s.clientBackup } } @@ -46,9 +43,8 @@ func (s *BaseSuite) prepareRepositories(c *C, basic *transport.Endpoint, f := fixtures.Basic().One() fs := f.DotGit() - path := fs.Base() - url := fmt.Sprintf("%s://%s", inprocScheme, path) - ep, err := transport.NewEndpoint(url) + path := fs.Root() + ep, err := transport.NewEndpoint(path) c.Assert(err, IsNil) *basic = ep sto, err := filesystem.NewStorage(fs) @@ -56,15 +52,13 @@ func (s *BaseSuite) prepareRepositories(c *C, basic *transport.Endpoint, s.loader[ep.String()] = sto path = "/empty.git" - url = fmt.Sprintf("%s://%s", inprocScheme, path) - ep, err = transport.NewEndpoint(url) + ep, err = transport.NewEndpoint(path) c.Assert(err, IsNil) *empty = ep s.loader[ep.String()] = memory.NewStorage() path = "/non-existent.git" - url = fmt.Sprintf("%s://%s", inprocScheme, path) - ep, err = transport.NewEndpoint(url) + ep, err = transport.NewEndpoint(path) c.Assert(err, IsNil) *nonExistent = ep } diff --git a/plumbing/transport/test/receive_pack.go b/plumbing/transport/test/receive_pack.go index f4be8c8..bb1c58a 100644 --- a/plumbing/transport/test/receive_pack.go +++ b/plumbing/transport/test/receive_pack.go @@ -39,10 +39,10 @@ func (s *ReceivePackSuite) TestAdvertisedReferencesEmpty(c *C) { func (s *ReceivePackSuite) TestAdvertisedReferencesNotExists(c *C) { r, err := s.Client.NewReceivePackSession(s.NonExistentEndpoint, s.EmptyAuth) c.Assert(err, IsNil) - defer func() { c.Assert(r.Close(), IsNil) }() ar, err := r.AdvertisedReferences() c.Assert(err, Equals, transport.ErrRepositoryNotFound) c.Assert(ar, IsNil) + c.Assert(r.Close(), IsNil) r, err = s.Client.NewReceivePackSession(s.NonExistentEndpoint, s.EmptyAuth) c.Assert(err, IsNil) @@ -54,6 +54,7 @@ func (s *ReceivePackSuite) TestAdvertisedReferencesNotExists(c *C) { writer, err := r.ReceivePack(req) c.Assert(err, Equals, transport.ErrRepositoryNotFound) c.Assert(writer, IsNil) + c.Assert(r.Close(), IsNil) } func (s *ReceivePackSuite) TestCallAdvertisedReferenceTwice(c *C) { @@ -270,7 +271,6 @@ func (s *ReceivePackSuite) TestSendPackAddDeleteReference(c *C) { func (s *ReceivePackSuite) testSendPackAddReference(c *C) { r, err := s.Client.NewReceivePackSession(s.Endpoint, s.EmptyAuth) c.Assert(err, IsNil) - defer func() { c.Assert(r.Close(), IsNil) }() fixture := fixtures.Basic().ByTag("packfile").One() @@ -285,6 +285,8 @@ func (s *ReceivePackSuite) testSendPackAddReference(c *C) { req.Capabilities.Set(capability.ReportStatus) } + c.Assert(r.Close(), IsNil) + s.receivePack(c, s.Endpoint, req, nil, false) s.checkRemoteReference(c, s.Endpoint, "refs/heads/newbranch", fixture.Head) } @@ -292,7 +294,6 @@ func (s *ReceivePackSuite) testSendPackAddReference(c *C) { func (s *ReceivePackSuite) testSendPackDeleteReference(c *C) { r, err := s.Client.NewReceivePackSession(s.Endpoint, s.EmptyAuth) c.Assert(err, IsNil) - defer func() { c.Assert(r.Close(), IsNil) }() fixture := fixtures.Basic().ByTag("packfile").One() @@ -307,6 +308,8 @@ func (s *ReceivePackSuite) testSendPackDeleteReference(c *C) { req.Capabilities.Set(capability.ReportStatus) } + c.Assert(r.Close(), IsNil) + s.receivePack(c, s.Endpoint, req, nil, false) s.checkRemoteReference(c, s.Endpoint, "refs/heads/newbranch", plumbing.ZeroHash) } |