@@ -15,9 +15,7 @@ import (
1515 "time"
1616
1717 git_model "code.gitea.io/gitea/models/git"
18- repo_model "code.gitea.io/gitea/models/repo"
1918 "code.gitea.io/gitea/modules/git"
20- "code.gitea.io/gitea/modules/gitrepo"
2119 "code.gitea.io/gitea/modules/httpcache"
2220 "code.gitea.io/gitea/modules/json"
2321 "code.gitea.io/gitea/modules/lfs"
@@ -31,7 +29,6 @@ import (
3129 "code.gitea.io/gitea/routers/common"
3230 "code.gitea.io/gitea/services/context"
3331 pull_service "code.gitea.io/gitea/services/pull"
34- archiver_service "code.gitea.io/gitea/services/repository/archiver"
3532 files_service "code.gitea.io/gitea/services/repository/files"
3633)
3734
@@ -282,74 +279,7 @@ func GetArchive(ctx *context.APIContext) {
282279 // "404":
283280 // "$ref": "#/responses/notFound"
284281
285- if ctx .Repo .GitRepo == nil {
286- var err error
287- ctx .Repo .GitRepo , err = gitrepo .RepositoryFromRequestContextOrOpen (ctx , ctx .Repo .Repository )
288- if err != nil {
289- ctx .APIErrorInternal (err )
290- return
291- }
292- }
293-
294- archiveDownload (ctx )
295- }
296-
297- func archiveDownload (ctx * context.APIContext ) {
298- aReq , err := archiver_service .NewRequest (ctx .Repo .Repository .ID , ctx .Repo .GitRepo , ctx .PathParam ("*" ))
299- if err != nil {
300- if errors .Is (err , archiver_service.ErrUnknownArchiveFormat {}) {
301- ctx .APIError (http .StatusBadRequest , err )
302- } else if errors .Is (err , archiver_service.RepoRefNotFoundError {}) {
303- ctx .APIError (http .StatusNotFound , err )
304- } else {
305- ctx .APIErrorInternal (err )
306- }
307- return
308- }
309-
310- archiver , err := aReq .Await (ctx )
311- if err != nil {
312- ctx .APIErrorInternal (err )
313- return
314- }
315-
316- download (ctx , aReq .GetArchiveName (), archiver )
317- }
318-
319- func download (ctx * context.APIContext , archiveName string , archiver * repo_model.RepoArchiver ) {
320- downloadName := ctx .Repo .Repository .Name + "-" + archiveName
321-
322- // Add nix format link header so tarballs lock correctly:
323- // https://github.com/nixos/nix/blob/56763ff918eb308db23080e560ed2ea3e00c80a7/doc/manual/src/protocols/tarball-fetcher.md
324- ctx .Resp .Header ().Add ("Link" , fmt .Sprintf (`<%s/archive/%s.%s?rev=%s>; rel="immutable"` ,
325- ctx .Repo .Repository .APIURL (),
326- archiver .CommitID ,
327- archiver .Type .String (),
328- archiver .CommitID ,
329- ))
330-
331- rPath := archiver .RelativePath ()
332- if setting .RepoArchive .Storage .ServeDirect () {
333- // If we have a signed url (S3, object storage), redirect to this directly.
334- u , err := storage .RepoArchives .URL (rPath , downloadName , ctx .Req .Method , nil )
335- if u != nil && err == nil {
336- ctx .Redirect (u .String ())
337- return
338- }
339- }
340-
341- // If we have matched and access to release or issue
342- fr , err := storage .RepoArchives .Open (rPath )
343- if err != nil {
344- ctx .APIErrorInternal (err )
345- return
346- }
347- defer fr .Close ()
348-
349- ctx .ServeContent (fr , & context.ServeHeaderOptions {
350- Filename : downloadName ,
351- LastModified : archiver .CreatedUnix .AsLocalTime (),
352- })
282+ serveRepoArchive (ctx , ctx .PathParam ("*" ))
353283}
354284
355285// GetEditorconfig get editor config of a repository
0 commit comments