diff options
Diffstat (limited to 'plumbing/transport')
-rw-r--r-- | plumbing/transport/common.go | 2 | ||||
-rw-r--r-- | plumbing/transport/http/fetch_pack.go | 47 | ||||
-rw-r--r-- | plumbing/transport/http/fetch_pack_test.go | 4 |
3 files changed, 20 insertions, 33 deletions
diff --git a/plumbing/transport/common.go b/plumbing/transport/common.go index 73b7d27..a20fa14 100644 --- a/plumbing/transport/common.go +++ b/plumbing/transport/common.go @@ -131,8 +131,6 @@ func transformSCPLikeIfNeeded(endpoint string) string { var UnsupportedCapabilities = []capability.Capability{ capability.MultiACK, capability.MultiACKDetailed, - capability.Sideband, - capability.Sideband64k, capability.ThinPack, } diff --git a/plumbing/transport/http/fetch_pack.go b/plumbing/transport/http/fetch_pack.go index 20cdb55..1548110 100644 --- a/plumbing/transport/http/fetch_pack.go +++ b/plumbing/transport/http/fetch_pack.go @@ -5,7 +5,7 @@ import ( "fmt" "io" "net/http" - "strings" + "strconv" "gopkg.in/src-d/go-git.v4/plumbing" "gopkg.in/src-d/go-git.v4/plumbing/format/pktline" @@ -117,7 +117,7 @@ func (s *fetchPackSession) Close() error { return nil } -func (s *fetchPackSession) doRequest(method, url string, content *strings.Reader) (*http.Response, error) { +func (s *fetchPackSession) doRequest(method, url string, content *bytes.Buffer) (*http.Response, error) { var body io.Reader if content != nil { body = content @@ -144,44 +144,33 @@ func (s *fetchPackSession) doRequest(method, url string, content *strings.Reader return res, nil } -func (s *fetchPackSession) applyHeadersToRequest(req *http.Request, content *strings.Reader) { +// it requires a bytes.Buffer, because we need to know the length +func (s *fetchPackSession) applyHeadersToRequest(req *http.Request, content *bytes.Buffer) { req.Header.Add("User-Agent", "git/1.0") - req.Header.Add("Host", "github.com") + req.Header.Add("Host", s.endpoint.Host) if content == nil { req.Header.Add("Accept", "*/*") - } else { - req.Header.Add("Accept", "application/x-git-upload-pack-result") - req.Header.Add("Content-Type", "application/x-git-upload-pack-request") - req.Header.Add("Content-Length", string(content.Len())) + return } + + req.Header.Add("Accept", "application/x-git-upload-pack-result") + req.Header.Add("Content-Type", "application/x-git-upload-pack-request") + req.Header.Add("Content-Length", strconv.Itoa(content.Len())) } -func uploadPackRequestToReader(r *packp.UploadPackRequest) (*strings.Reader, error) { - var buf bytes.Buffer - e := pktline.NewEncoder(&buf) +func uploadPackRequestToReader(req *packp.UploadPackRequest) (*bytes.Buffer, error) { + buf := bytes.NewBuffer(nil) + e := pktline.NewEncoder(buf) - for _, want := range r.Wants { - _ = e.Encodef("want %s\n", want) + if err := req.UploadRequest.Encode(buf); err != nil { + return nil, fmt.Errorf("sending upload-req message: %s", err) } - for _, have := range r.Haves { - _ = e.Encodef("have %s\n", have) + if err := req.UploadHaves.Encode(buf); err != nil { + return nil, fmt.Errorf("sending haves message: %s", err) } - if r.Depth != nil { - depth, ok := r.Depth.(packp.DepthCommits) - if !ok { - return nil, fmt.Errorf("only commit depth is supported") - } - - if depth != 0 { - _ = e.Encodef("deepen %d\n", depth) - } - } - - _ = e.Flush() _ = e.EncodeString("done\n") - - return strings.NewReader(buf.String()), nil + return buf, nil } diff --git a/plumbing/transport/http/fetch_pack_test.go b/plumbing/transport/http/fetch_pack_test.go index 920b623..6c40e60 100644 --- a/plumbing/transport/http/fetch_pack_test.go +++ b/plumbing/transport/http/fetch_pack_test.go @@ -51,8 +51,8 @@ func (s *FetchPackSuite) TestuploadPackRequestToReader(c *C) { c.Assert(err, IsNil) b, _ := ioutil.ReadAll(sr) c.Assert(string(b), Equals, - "0032want d82f291cde9987322c8a0c81a325e1ba6159684c\n"+ - "0032want 2b41ef280fdb67a9b250678686a0c3e03b0a9989\n"+ + "0032want 2b41ef280fdb67a9b250678686a0c3e03b0a9989\n"+ + "0032want d82f291cde9987322c8a0c81a325e1ba6159684c\n0000"+ "0032have 6ecf0ef2c2dffb796033e5a02219af86ec6584e5\n0000"+ "0009done\n", ) |