Skip to content

Commit a3e5eaf

Browse files
committed
Revert "Merge remote-tracking branch 'upstream/main'"
This reverts commit 2585c8b, reversing changes made to 8e012eb.
1 parent 2585c8b commit a3e5eaf

File tree

109 files changed

+1476
-1845
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

109 files changed

+1476
-1845
lines changed

custom/conf/app.example.ini

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2642,15 +2642,9 @@ LEVEL = Info
26422642
;; override the azure blob base path if storage type is azureblob
26432643
;AZURE_BLOB_BASE_PATH = lfs/
26442644

2645-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2646-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2647-
;; settings for Gitea's LFS client (eg: mirroring an upstream lfs endpoint)
2648-
;;
26492645
;[lfs_client]
2650-
;; Limit the number of pointers in each batch request to this number
2646+
;; When mirroring an upstream lfs endpoint, limit the number of pointers in each batch request to this number
26512647
;BATCH_SIZE = 20
2652-
;; Limit the number of concurrent upload/download operations within a batch
2653-
;BATCH_OPERATION_CONCURRENCY = 3
26542648

26552649
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
26562650
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ require (
124124
golang.org/x/image v0.21.0
125125
golang.org/x/net v0.30.0
126126
golang.org/x/oauth2 v0.23.0
127-
golang.org/x/sync v0.8.0
128127
golang.org/x/sys v0.26.0
129128
golang.org/x/text v0.19.0
130129
golang.org/x/tools v0.26.0
@@ -317,6 +316,7 @@ require (
317316
go.uber.org/zap v1.27.0 // indirect
318317
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c // indirect
319318
golang.org/x/mod v0.21.0 // indirect
319+
golang.org/x/sync v0.8.0 // indirect
320320
golang.org/x/time v0.7.0 // indirect
321321
google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 // indirect
322322
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect

modules/gitrepo/gitrepo.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111

1212
"code.gitea.io/gitea/modules/git"
1313
"code.gitea.io/gitea/modules/setting"
14-
"code.gitea.io/gitea/modules/util"
1514
)
1615

1716
type Repository interface {
@@ -60,11 +59,15 @@ func repositoryFromContext(ctx context.Context, repo Repository) *git.Repository
6059
return nil
6160
}
6261

62+
type nopCloser func()
63+
64+
func (nopCloser) Close() error { return nil }
65+
6366
// RepositoryFromContextOrOpen attempts to get the repository from the context or just opens it
6467
func RepositoryFromContextOrOpen(ctx context.Context, repo Repository) (*git.Repository, io.Closer, error) {
6568
gitRepo := repositoryFromContext(ctx, repo)
6669
if gitRepo != nil {
67-
return gitRepo, util.NopCloser{}, nil
70+
return gitRepo, nopCloser(nil), nil
6871
}
6972

7073
gitRepo, err := OpenRepository(ctx, repo)
@@ -92,7 +95,7 @@ func repositoryFromContextPath(ctx context.Context, path string) *git.Repository
9295
func RepositoryFromContextOrOpenPath(ctx context.Context, path string) (*git.Repository, io.Closer, error) {
9396
gitRepo := repositoryFromContextPath(ctx, path)
9497
if gitRepo != nil {
95-
return gitRepo, util.NopCloser{}, nil
98+
return gitRepo, nopCloser(nil), nil
9699
}
97100

98101
gitRepo, err := git.OpenRepository(ctx, path)

modules/lfs/http_client.go

Lines changed: 50 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ import (
1717
"code.gitea.io/gitea/modules/log"
1818
"code.gitea.io/gitea/modules/proxy"
1919
"code.gitea.io/gitea/modules/setting"
20-
21-
"golang.org/x/sync/errgroup"
2220
)
2321

2422
// HTTPClient is used to communicate with the LFS server
@@ -115,7 +113,6 @@ func (c *HTTPClient) Upload(ctx context.Context, objects []Pointer, callback Upl
115113
return c.performOperation(ctx, objects, nil, callback)
116114
}
117115

118-
// performOperation takes a slice of LFS object pointers, batches them, and performs the upload/download operations concurrently in each batch
119116
func (c *HTTPClient) performOperation(ctx context.Context, objects []Pointer, dc DownloadCallback, uc UploadCallback) error {
120117
if len(objects) == 0 {
121118
return nil
@@ -136,87 +133,71 @@ func (c *HTTPClient) performOperation(ctx context.Context, objects []Pointer, dc
136133
return fmt.Errorf("TransferAdapter not found: %s", result.Transfer)
137134
}
138135

139-
errGroup, groupCtx := errgroup.WithContext(ctx)
140-
errGroup.SetLimit(setting.LFSClient.BatchOperationConcurrency)
141136
for _, object := range result.Objects {
142-
errGroup.Go(func() error {
143-
return performSingleOperation(groupCtx, object, dc, uc, transferAdapter)
144-
})
145-
}
137+
if object.Error != nil {
138+
log.Trace("Error on object %v: %v", object.Pointer, object.Error)
139+
if uc != nil {
140+
if _, err := uc(object.Pointer, object.Error); err != nil {
141+
return err
142+
}
143+
} else {
144+
if err := dc(object.Pointer, nil, object.Error); err != nil {
145+
return err
146+
}
147+
}
148+
continue
149+
}
146150

147-
// only the first error is returned, preserving legacy behavior before concurrency
148-
return errGroup.Wait()
149-
}
151+
if uc != nil {
152+
if len(object.Actions) == 0 {
153+
log.Trace("%v already present on server", object.Pointer)
154+
continue
155+
}
150156

151-
// performSingleOperation performs an LFS upload or download operation on a single object
152-
func performSingleOperation(ctx context.Context, object *ObjectResponse, dc DownloadCallback, uc UploadCallback, transferAdapter TransferAdapter) error {
153-
// the response from a lfs batch api request for this specific object id contained an error
154-
if object.Error != nil {
155-
log.Trace("Error on object %v: %v", object.Pointer, object.Error)
157+
link, ok := object.Actions["upload"]
158+
if !ok {
159+
log.Debug("%+v", object)
160+
return errors.New("missing action 'upload'")
161+
}
156162

157-
// this was an 'upload' request inside the batch request
158-
if uc != nil {
159-
if _, err := uc(object.Pointer, object.Error); err != nil {
163+
content, err := uc(object.Pointer, nil)
164+
if err != nil {
160165
return err
161166
}
162-
} else {
163-
// this was NOT an 'upload' request inside the batch request, meaning it must be a 'download' request
164-
if err := dc(object.Pointer, nil, object.Error); err != nil {
167+
168+
err = transferAdapter.Upload(ctx, link, object.Pointer, content)
169+
if err != nil {
165170
return err
166171
}
167-
}
168-
// if the callback returns no err, then the error could be ignored, and the operations should continue
169-
return nil
170-
}
171-
172-
// the response from an lfs batch api request contained necessary upload/download fields to act upon
173-
if uc != nil {
174-
if len(object.Actions) == 0 {
175-
log.Trace("%v already present on server", object.Pointer)
176-
return nil
177-
}
178172

179-
link, ok := object.Actions["upload"]
180-
if !ok {
181-
return errors.New("missing action 'upload'")
182-
}
183-
184-
content, err := uc(object.Pointer, nil)
185-
if err != nil {
186-
return err
187-
}
188-
189-
err = transferAdapter.Upload(ctx, link, object.Pointer, content)
190-
if err != nil {
191-
return err
192-
}
173+
link, ok = object.Actions["verify"]
174+
if ok {
175+
if err := transferAdapter.Verify(ctx, link, object.Pointer); err != nil {
176+
return err
177+
}
178+
}
179+
} else {
180+
link, ok := object.Actions["download"]
181+
if !ok {
182+
// no actions block in response, try legacy response schema
183+
link, ok = object.Links["download"]
184+
}
185+
if !ok {
186+
log.Debug("%+v", object)
187+
return errors.New("missing action 'download'")
188+
}
193189

194-
link, ok = object.Actions["verify"]
195-
if ok {
196-
if err := transferAdapter.Verify(ctx, link, object.Pointer); err != nil {
190+
content, err := transferAdapter.Download(ctx, link)
191+
if err != nil {
197192
return err
198193
}
199-
}
200-
} else {
201-
link, ok := object.Actions["download"]
202-
if !ok {
203-
// no actions block in response, try legacy response schema
204-
link, ok = object.Links["download"]
205-
}
206-
if !ok {
207-
log.Debug("%+v", object)
208-
return errors.New("missing action 'download'")
209-
}
210-
211-
content, err := transferAdapter.Download(ctx, link)
212-
if err != nil {
213-
return err
214-
}
215194

216-
if err := dc(object.Pointer, content, nil); err != nil {
217-
return err
195+
if err := dc(object.Pointer, content, nil); err != nil {
196+
return err
197+
}
218198
}
219199
}
200+
220201
return nil
221202
}
222203

0 commit comments

Comments
 (0)