|
@@ -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)
|
|
|
}
|