Skip to content

Commit 64e7516

Browse files
committed
Address review comments
1 parent 1f4c2e3 commit 64e7516

File tree

4 files changed

+24227
-24
lines changed

4 files changed

+24227
-24
lines changed

modules/lfs/http_client.go

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,12 @@ import (
2020

2121
const httpBatchSize = 20
2222

23-
var ErrUnexpectedEOF = errors.New("unexpected EOF in response")
24-
2523
// HTTPClient is used to communicate with the LFS server
2624
// https://github.com/git-lfs/git-lfs/blob/main/docs/api/batch.md
2725
type HTTPClient struct {
28-
client *http.Client
29-
endpoint string
30-
transfers map[string]TransferAdapter
31-
transferNames []string
26+
client *http.Client
27+
endpoint string
28+
transfers map[string]TransferAdapter
3229
}
3330

3431
// BatchSize returns the preferred size of batchs to process
@@ -54,26 +51,36 @@ func newHTTPClient(endpoint *url.URL, httpTransport *http.Transport) *HTTPClient
5451
transfers: map[string]TransferAdapter{
5552
basic.Name(): basic,
5653
},
57-
transferNames: []string{basic.Name()},
5854
}
5955

6056
return client
6157
}
6258

59+
func (c *HTTPClient) transferNames() []string {
60+
keys := make([]string, len(c.transfers))
61+
i := 0
62+
for k := range c.transfers {
63+
keys[i] = k
64+
i++
65+
}
66+
return keys
67+
}
68+
6369
func (c *HTTPClient) batch(ctx context.Context, operation string, objects []Pointer) (*BatchResponse, error) {
6470
log.Trace("BATCH operation with objects: %v", objects)
6571

6672
url := fmt.Sprintf("%s/objects/batch", c.endpoint)
6773

68-
request := &BatchRequest{operation, c.transferNames, nil, objects}
74+
request := &BatchRequest{operation, c.transferNames(), nil, objects}
6975
payload := new(bytes.Buffer)
7076
err := json.NewEncoder(payload).Encode(request)
7177
if err != nil {
7278
log.Error("Error encoding json: %v", err)
7379
return nil, err
7480
}
7581

76-
req, err := createRequest(ctx, http.MethodPost, url, MediaType, nil, payload)
82+
req, err := createRequest(ctx, http.MethodPost, url, nil, payload)
83+
req.Header.Set("Content-Type", MediaType)
7784
if err != nil {
7885
return nil, err
7986
}
@@ -194,8 +201,8 @@ func (c *HTTPClient) performOperation(ctx context.Context, objects []Pointer, dc
194201
return nil
195202
}
196203

197-
// createRequest creates a new request, and sets the Content-Type and Accept headers.
198-
func createRequest(ctx context.Context, method, url, contentType string, headers map[string]string, body io.Reader) (*http.Request, error) {
204+
// createRequest creates a new request, and sets the headers.
205+
func createRequest(ctx context.Context, method, url string, headers map[string]string, body io.Reader) (*http.Request, error) {
199206
log.Trace("createRequest: %s", url)
200207
req, err := http.NewRequestWithContext(ctx, method, url, body)
201208
if err != nil {
@@ -206,9 +213,6 @@ func createRequest(ctx context.Context, method, url, contentType string, headers
206213
for key, value := range headers {
207214
req.Header.Set(key, value)
208215
}
209-
if req.Header.Get("Content-Type") == "" {
210-
req.Header.Set("Content-Type", contentType)
211-
}
212216
req.Header.Set("Accept", MediaType)
213217

214218
return req, nil
@@ -243,7 +247,7 @@ func handleErrorResponse(resp *http.Response) error {
243247
err := json.NewDecoder(resp.Body).Decode(&er)
244248
if err != nil {
245249
if err == io.EOF {
246-
return ErrUnexpectedEOF
250+
return io.ErrUnexpectedEOF
247251
}
248252
log.Error("Error decoding json: %v", err)
249253
return err

modules/lfs/http_client_test.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ func TestHTTPClientDownload(t *testing.T) {
177177
// case 0
178178
{
179179
endpoint: "https://status-not-ok.io",
180-
expectederror: ErrUnexpectedEOF.Error(),
180+
expectederror: io.ErrUnexpectedEOF.Error(),
181181
},
182182
// case 1
183183
{
@@ -238,7 +238,6 @@ func TestHTTPClientDownload(t *testing.T) {
238238
transfers: map[string]TransferAdapter{
239239
"dummy": dummy,
240240
},
241-
transferNames: []string{"dummy"},
242241
}
243242

244243
err := client.Download(context.Background(), []Pointer{p}, func(p Pointer, content io.ReadCloser, objectError error) error {
@@ -286,7 +285,7 @@ func TestHTTPClientUpload(t *testing.T) {
286285
// case 0
287286
{
288287
endpoint: "https://status-not-ok.io",
289-
expectederror: ErrUnexpectedEOF.Error(),
288+
expectederror: io.ErrUnexpectedEOF.Error(),
290289
},
291290
// case 1
292291
{
@@ -347,7 +346,6 @@ func TestHTTPClientUpload(t *testing.T) {
347346
transfers: map[string]TransferAdapter{
348347
"dummy": dummy,
349348
},
350-
transferNames: []string{"dummy"},
351349
}
352350

353351
err := client.Upload(context.Background(), []Pointer{p}, func(p Pointer, objectError error) (io.ReadCloser, error) {

modules/lfs/transferadapter.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func (a *BasicTransferAdapter) Name() string {
3333

3434
// Download reads the download location and downloads the data.
3535
func (a *BasicTransferAdapter) Download(ctx context.Context, l *Link) (io.ReadCloser, error) {
36-
req, err := createRequest(ctx, http.MethodGet, l.Href, "", l.Header, nil)
36+
req, err := createRequest(ctx, http.MethodGet, l.Href, l.Header, nil)
3737
if err != nil {
3838
return nil, err
3939
}
@@ -46,8 +46,8 @@ func (a *BasicTransferAdapter) Download(ctx context.Context, l *Link) (io.ReadCl
4646

4747
// Upload sends the content to the LFS server.
4848
func (a *BasicTransferAdapter) Upload(ctx context.Context, l *Link, p Pointer, r io.Reader) error {
49-
contentType := "application/octet-stream"
50-
req, err := createRequest(ctx, http.MethodPut, l.Href, contentType, l.Header, r)
49+
req, err := createRequest(ctx, http.MethodPut, l.Href, l.Header, r)
50+
req.Header.Set("Content-Type", "application/octet-stream")
5151
if err != nil {
5252
return err
5353
}
@@ -72,8 +72,8 @@ func (a *BasicTransferAdapter) Verify(ctx context.Context, l *Link, p Pointer) e
7272
return err
7373
}
7474

75-
contentType := MediaType
76-
req, err := createRequest(ctx, http.MethodPost, l.Href, contentType, l.Header, bytes.NewReader(b))
75+
req, err := createRequest(ctx, http.MethodPost, l.Href, l.Header, bytes.NewReader(b))
76+
req.Header.Set("Content-Type", MediaType)
7777
if err != nil {
7878
return err
7979
}

0 commit comments

Comments
 (0)