|
|
|
@ -244,18 +244,25 @@ func Action(ctx *middleware.Context) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func Download(ctx *middleware.Context) {
|
|
|
|
|
ext := "." + ctx.Params(":ext")
|
|
|
|
|
|
|
|
|
|
var archivePath string
|
|
|
|
|
switch ext {
|
|
|
|
|
case ".zip":
|
|
|
|
|
var (
|
|
|
|
|
uri = ctx.Params("*")
|
|
|
|
|
refName string
|
|
|
|
|
ext string
|
|
|
|
|
archivePath string
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
switch {
|
|
|
|
|
case strings.HasSuffix(uri, ".zip"):
|
|
|
|
|
ext = ".zip"
|
|
|
|
|
archivePath = path.Join(ctx.Repo.GitRepo.Path, "archives/zip")
|
|
|
|
|
case ".tar.gz":
|
|
|
|
|
case strings.HasSuffix(uri, ".tar.gz"):
|
|
|
|
|
ext = ".tar.gz"
|
|
|
|
|
archivePath = path.Join(ctx.Repo.GitRepo.Path, "archives/targz")
|
|
|
|
|
default:
|
|
|
|
|
ctx.Error(404)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
refName = strings.TrimSuffix(uri, ext)
|
|
|
|
|
|
|
|
|
|
if !com.IsDir(archivePath) {
|
|
|
|
|
if err := os.MkdirAll(archivePath, os.ModePerm); err != nil {
|
|
|
|
@ -264,13 +271,42 @@ func Download(ctx *middleware.Context) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Get corresponding commit.
|
|
|
|
|
var (
|
|
|
|
|
commit *git.Commit
|
|
|
|
|
err error
|
|
|
|
|
)
|
|
|
|
|
gitRepo := ctx.Repo.GitRepo
|
|
|
|
|
if gitRepo.IsBranchExist(refName) {
|
|
|
|
|
commit, err = gitRepo.GetCommitOfBranch(refName)
|
|
|
|
|
if err != nil {
|
|
|
|
|
ctx.Handle(500, "Download", err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
} else if gitRepo.IsTagExist(refName) {
|
|
|
|
|
commit, err = gitRepo.GetCommitOfTag(refName)
|
|
|
|
|
if err != nil {
|
|
|
|
|
ctx.Handle(500, "Download", err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
} else if len(refName) == 40 {
|
|
|
|
|
commit, err = gitRepo.GetCommit(refName)
|
|
|
|
|
if err != nil {
|
|
|
|
|
ctx.Handle(404, "Download", nil)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
ctx.Error(404)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
archivePath = path.Join(archivePath, ctx.Repo.CommitId+ext)
|
|
|
|
|
if !com.IsFile(archivePath) {
|
|
|
|
|
if err := ctx.Repo.Commit.CreateArchive(archivePath, git.ZIP); err != nil {
|
|
|
|
|
if err := commit.CreateArchive(archivePath, git.ZIP); err != nil {
|
|
|
|
|
ctx.Handle(500, "Download -> CreateArchive "+archivePath, err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ctx.ServeFile(archivePath, ctx.Repo.Repository.Name+"-"+base.ShortSha(ctx.Repo.CommitId)+ext)
|
|
|
|
|
ctx.ServeFile(archivePath, ctx.Repo.Repository.Name+"-"+base.ShortSha(commit.Id.String())+ext)
|
|
|
|
|
}
|
|
|
|
|