Skip to content

Commit 758f84f

Browse files
GiteaBotZoupers
andauthored
Fix go-gitea#31185 try fix lfs download from bitbucket failed (go-gitea#31201) (go-gitea#31329)
Backport go-gitea#31201 by @Zoupers Fix go-gitea#31185 Co-authored-by: Zoupers Zou <1171443643@qq.com>
1 parent 3fcf865 commit 758f84f

8 files changed

+16
-13
lines changed

modules/lfs/http_client.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ func createRequest(ctx context.Context, method, url string, headers map[string]s
211211
for key, value := range headers {
212212
req.Header.Set(key, value)
213213
}
214-
req.Header.Set("Accept", MediaType)
214+
req.Header.Set("Accept", AcceptHeader)
215215

216216
return req, nil
217217
}
@@ -251,6 +251,6 @@ func handleErrorResponse(resp *http.Response) error {
251251
return err
252252
}
253253

254-
log.Trace("ErrorResponse: %v", er)
254+
log.Trace("ErrorResponse(%v): %v", resp.Status, er)
255255
return errors.New(er.Message)
256256
}

modules/lfs/http_client_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ func TestHTTPClientDownload(t *testing.T) {
155155
hc := &http.Client{Transport: RoundTripFunc(func(req *http.Request) *http.Response {
156156
assert.Equal(t, "POST", req.Method)
157157
assert.Equal(t, MediaType, req.Header.Get("Content-type"))
158-
assert.Equal(t, MediaType, req.Header.Get("Accept"))
158+
assert.Equal(t, AcceptHeader, req.Header.Get("Accept"))
159159

160160
var batchRequest BatchRequest
161161
err := json.NewDecoder(req.Body).Decode(&batchRequest)
@@ -263,7 +263,7 @@ func TestHTTPClientUpload(t *testing.T) {
263263
hc := &http.Client{Transport: RoundTripFunc(func(req *http.Request) *http.Response {
264264
assert.Equal(t, "POST", req.Method)
265265
assert.Equal(t, MediaType, req.Header.Get("Content-type"))
266-
assert.Equal(t, MediaType, req.Header.Get("Accept"))
266+
assert.Equal(t, AcceptHeader, req.Header.Get("Accept"))
267267

268268
var batchRequest BatchRequest
269269
err := json.NewDecoder(req.Body).Decode(&batchRequest)

modules/lfs/shared.go

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import (
1010
const (
1111
// MediaType contains the media type for LFS server requests
1212
MediaType = "application/vnd.git-lfs+json"
13+
// Some LFS servers offer content with other types, so fallback to '*/*' if application/vnd.git-lfs+json cannot be served
14+
AcceptHeader = "application/vnd.git-lfs+json;q=0.9, */*;q=0.8"
1315
)
1416

1517
// BatchRequest contains multiple requests processed in one batch operation.

modules/lfs/transferadapter.go

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ func (a *BasicTransferAdapter) Download(ctx context.Context, l *Link) (io.ReadCl
3737
if err != nil {
3838
return nil, err
3939
}
40+
log.Debug("Download Request: %+v", req)
4041
resp, err := performRequest(ctx, a.client, req)
4142
if err != nil {
4243
return nil, err

modules/lfs/transferadapter_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ func TestBasicTransferAdapter(t *testing.T) {
2626
p := Pointer{Oid: "b5a2c96250612366ea272ffac6d9744aaf4b45aacd96aa7cfcb931ee3b558259", Size: 5}
2727

2828
roundTripHandler := func(req *http.Request) *http.Response {
29-
assert.Equal(t, MediaType, req.Header.Get("Accept"))
29+
assert.Equal(t, AcceptHeader, req.Header.Get("Accept"))
3030
assert.Equal(t, "test-value", req.Header.Get("test-header"))
3131

3232
url := req.URL.String()

services/lfs/server.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@ func buildObjectResponse(rc *requestContext, pointer lfs_module.Pointer, downloa
477477
}
478478

479479
// This is only needed to workaround https://github.com/git-lfs/git-lfs/issues/3662
480-
verifyHeader["Accept"] = lfs_module.MediaType
480+
verifyHeader["Accept"] = lfs_module.AcceptHeader
481481

482482
rep.Actions["verify"] = &lfs_module.Link{Href: rc.VerifyLink(pointer), Header: verifyHeader}
483483
}

tests/integration/api_repo_lfs_locks_test.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ func TestAPILFSLocksLogged(t *testing.T) {
105105
for _, test := range tests {
106106
session := loginUser(t, test.user.Name)
107107
req := NewRequestWithJSON(t, "POST", fmt.Sprintf("/%s.git/info/lfs/locks", test.repo.FullName()), map[string]string{"path": test.path})
108-
req.Header.Set("Accept", lfs.MediaType)
108+
req.Header.Set("Accept", lfs.AcceptHeader)
109109
req.Header.Set("Content-Type", lfs.MediaType)
110110
resp := session.MakeRequest(t, req, test.httpResult)
111111
if len(test.addTime) > 0 {
@@ -123,7 +123,7 @@ func TestAPILFSLocksLogged(t *testing.T) {
123123
for _, test := range resultsTests {
124124
session := loginUser(t, test.user.Name)
125125
req := NewRequestf(t, "GET", "/%s.git/info/lfs/locks", test.repo.FullName())
126-
req.Header.Set("Accept", lfs.MediaType)
126+
req.Header.Set("Accept", lfs.AcceptHeader)
127127
resp := session.MakeRequest(t, req, http.StatusOK)
128128
var lfsLocks api.LFSLockList
129129
DecodeJSON(t, resp, &lfsLocks)
@@ -135,7 +135,7 @@ func TestAPILFSLocksLogged(t *testing.T) {
135135
}
136136

137137
req = NewRequestWithJSON(t, "POST", fmt.Sprintf("/%s.git/info/lfs/locks/verify", test.repo.FullName()), map[string]string{})
138-
req.Header.Set("Accept", lfs.MediaType)
138+
req.Header.Set("Accept", lfs.AcceptHeader)
139139
req.Header.Set("Content-Type", lfs.MediaType)
140140
resp = session.MakeRequest(t, req, http.StatusOK)
141141
var lfsLocksVerify api.LFSLockListVerify
@@ -159,7 +159,7 @@ func TestAPILFSLocksLogged(t *testing.T) {
159159
for _, test := range deleteTests {
160160
session := loginUser(t, test.user.Name)
161161
req := NewRequestWithJSON(t, "POST", fmt.Sprintf("/%s.git/info/lfs/locks/%s/unlock", test.repo.FullName(), test.lockID), map[string]string{})
162-
req.Header.Set("Accept", lfs.MediaType)
162+
req.Header.Set("Accept", lfs.AcceptHeader)
163163
req.Header.Set("Content-Type", lfs.MediaType)
164164
resp := session.MakeRequest(t, req, http.StatusOK)
165165
var lfsLockRep api.LFSLockResponse
@@ -172,7 +172,7 @@ func TestAPILFSLocksLogged(t *testing.T) {
172172
for _, test := range resultsTests {
173173
session := loginUser(t, test.user.Name)
174174
req := NewRequestf(t, "GET", "/%s.git/info/lfs/locks", test.repo.FullName())
175-
req.Header.Set("Accept", lfs.MediaType)
175+
req.Header.Set("Accept", lfs.AcceptHeader)
176176
resp := session.MakeRequest(t, req, http.StatusOK)
177177
var lfsLocks api.LFSLockList
178178
DecodeJSON(t, resp, &lfsLocks)

tests/integration/api_repo_lfs_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func TestAPILFSBatch(t *testing.T) {
8484

8585
newRequest := func(t testing.TB, br *lfs.BatchRequest) *RequestWrapper {
8686
return NewRequestWithJSON(t, "POST", "/user2/lfs-batch-repo.git/info/lfs/objects/batch", br).
87-
SetHeader("Accept", lfs.MediaType).
87+
SetHeader("Accept", lfs.AcceptHeader).
8888
SetHeader("Content-Type", lfs.MediaType)
8989
}
9090
decodeResponse := func(t *testing.T, b *bytes.Buffer) *lfs.BatchResponse {
@@ -447,7 +447,7 @@ func TestAPILFSVerify(t *testing.T) {
447447

448448
newRequest := func(t testing.TB, p *lfs.Pointer) *RequestWrapper {
449449
return NewRequestWithJSON(t, "POST", "/user2/lfs-verify-repo.git/info/lfs/verify", p).
450-
SetHeader("Accept", lfs.MediaType).
450+
SetHeader("Accept", lfs.AcceptHeader).
451451
SetHeader("Content-Type", lfs.MediaType)
452452
}
453453

0 commit comments

Comments
 (0)