@@ -20,15 +20,12 @@ import (
20
20
21
21
const httpBatchSize = 20
22
22
23
- var ErrUnexpectedEOF = errors .New ("unexpected EOF in response" )
24
-
25
23
// HTTPClient is used to communicate with the LFS server
26
24
// https://github.com/git-lfs/git-lfs/blob/main/docs/api/batch.md
27
25
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
32
29
}
33
30
34
31
// BatchSize returns the preferred size of batchs to process
@@ -54,26 +51,36 @@ func newHTTPClient(endpoint *url.URL, httpTransport *http.Transport) *HTTPClient
54
51
transfers : map [string ]TransferAdapter {
55
52
basic .Name (): basic ,
56
53
},
57
- transferNames : []string {basic .Name ()},
58
54
}
59
55
60
56
return client
61
57
}
62
58
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
+
63
69
func (c * HTTPClient ) batch (ctx context.Context , operation string , objects []Pointer ) (* BatchResponse , error ) {
64
70
log .Trace ("BATCH operation with objects: %v" , objects )
65
71
66
72
url := fmt .Sprintf ("%s/objects/batch" , c .endpoint )
67
73
68
- request := & BatchRequest {operation , c .transferNames , nil , objects }
74
+ request := & BatchRequest {operation , c .transferNames () , nil , objects }
69
75
payload := new (bytes.Buffer )
70
76
err := json .NewEncoder (payload ).Encode (request )
71
77
if err != nil {
72
78
log .Error ("Error encoding json: %v" , err )
73
79
return nil , err
74
80
}
75
81
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 )
77
84
if err != nil {
78
85
return nil , err
79
86
}
@@ -194,8 +201,8 @@ func (c *HTTPClient) performOperation(ctx context.Context, objects []Pointer, dc
194
201
return nil
195
202
}
196
203
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 ) {
199
206
log .Trace ("createRequest: %s" , url )
200
207
req , err := http .NewRequestWithContext (ctx , method , url , body )
201
208
if err != nil {
@@ -206,9 +213,6 @@ func createRequest(ctx context.Context, method, url, contentType string, headers
206
213
for key , value := range headers {
207
214
req .Header .Set (key , value )
208
215
}
209
- if req .Header .Get ("Content-Type" ) == "" {
210
- req .Header .Set ("Content-Type" , contentType )
211
- }
212
216
req .Header .Set ("Accept" , MediaType )
213
217
214
218
return req , nil
@@ -243,7 +247,7 @@ func handleErrorResponse(resp *http.Response) error {
243
247
err := json .NewDecoder (resp .Body ).Decode (& er )
244
248
if err != nil {
245
249
if err == io .EOF {
246
- return ErrUnexpectedEOF
250
+ return io . ErrUnexpectedEOF
247
251
}
248
252
log .Error ("Error decoding json: %v" , err )
249
253
return err
0 commit comments