mirror of
https://github.com/go-gitea/gitea.git
synced 2025-10-04 13:54:17 +02:00
Initial implementation of linked proposal. * Closes #29942 * Fix #34003 * Fix #30443 --------- Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
// Copyright 2024 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package repo
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
|
|
"code.gitea.io/gitea/modules/git"
|
|
"code.gitea.io/gitea/services/context"
|
|
archiver_service "code.gitea.io/gitea/services/repository/archiver"
|
|
)
|
|
|
|
func serveRepoArchive(ctx *context.APIContext, reqFileName string) {
|
|
aReq, err := archiver_service.NewRequest(ctx.Repo.Repository.ID, ctx.Repo.GitRepo, reqFileName)
|
|
if err != nil {
|
|
if errors.Is(err, archiver_service.ErrUnknownArchiveFormat{}) {
|
|
ctx.APIError(http.StatusBadRequest, err)
|
|
} else if errors.Is(err, archiver_service.RepoRefNotFoundError{}) {
|
|
ctx.APIError(http.StatusNotFound, err)
|
|
} else {
|
|
ctx.APIErrorInternal(err)
|
|
}
|
|
return
|
|
}
|
|
archiver_service.ServeRepoArchive(ctx.Base, ctx.Repo.Repository, ctx.Repo.GitRepo, aReq)
|
|
}
|
|
|
|
func DownloadArchive(ctx *context.APIContext) {
|
|
var tp git.ArchiveType
|
|
switch ballType := ctx.PathParam("ball_type"); ballType {
|
|
case "tarball":
|
|
tp = git.ArchiveTarGz
|
|
case "zipball":
|
|
tp = git.ArchiveZip
|
|
case "bundle":
|
|
tp = git.ArchiveBundle
|
|
default:
|
|
ctx.APIError(http.StatusBadRequest, "Unknown archive type: "+ballType)
|
|
return
|
|
}
|
|
serveRepoArchive(ctx, ctx.PathParam("*")+"."+tp.String())
|
|
}
|