@@ -343,6 +343,7 @@ func runWeb(*cli.Context) { | |||
r.Get("/issues/:index", repo.ViewIssue) | |||
r.Get("/pulls", repo.Pulls) | |||
r.Get("/branches", repo.Branches) | |||
r.Get("/archive/*", repo.Download) | |||
}, ignSignIn, middleware.RepoAssignment(true)) | |||
m.Group("/:username/:reponame", func(r *macaron.Router) { | |||
@@ -355,8 +356,6 @@ func runWeb(*cli.Context) { | |||
r.Get("/commit/:branchname", repo.Diff) | |||
r.Get("/commit/:branchname/*", repo.Diff) | |||
r.Get("/releases", repo.Releases) | |||
r.Get("/archive/:branchname/*.*", repo.Download) | |||
r.Get("/archive/*.*", repo.Download) | |||
r.Get("/compare/:before([a-z0-9]+)...:after([a-z0-9]+)", repo.CompareDiff) | |||
}, ignSignIn, middleware.RepoAssignment(true, true)) | |||
@@ -17,7 +17,7 @@ import ( | |||
"github.com/gogits/gogs/modules/setting" | |||
) | |||
const APP_VER = "0.5.4.0923 Beta" | |||
const APP_VER = "0.5.4.0924 Beta" | |||
func init() { | |||
runtime.GOMAXPROCS(runtime.NumCPU()) | |||
@@ -200,7 +200,7 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler { | |||
ctx.Repo.Commit, err = gitRepo.GetCommitOfBranch(refName) | |||
if err != nil { | |||
ctx.Handle(404, "RepoAssignment invalid branch", nil) | |||
ctx.Handle(500, "RepoAssignment invalid branch", err) | |||
return | |||
} | |||
ctx.Repo.CommitId = ctx.Repo.Commit.Id.String() | |||
@@ -209,14 +209,9 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler { | |||
ctx.Repo.IsTag = true | |||
ctx.Repo.BranchName = refName | |||
ctx.Repo.Tag, err = gitRepo.GetTag(refName) | |||
ctx.Repo.Commit, err = gitRepo.GetCommitOfTag(refName) | |||
if err != nil { | |||
ctx.Handle(404, "RepoAssignment invalid tag", nil) | |||
return | |||
} | |||
ctx.Repo.Commit, err = ctx.Repo.Tag.Commit() | |||
if err != nil { | |||
ctx.Handle(500, "RepoAssignment", fmt.Errorf("fail to get tag commit(%s): %v", refName, err)) | |||
ctx.Handle(500, "RepoAssignment invalid tag", err) | |||
return | |||
} | |||
ctx.Repo.CommitId = ctx.Repo.Commit.Id.String() | |||
@@ -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) | |||
} |
@@ -1 +1 @@ | |||
0.5.4.0923 Beta | |||
0.5.4.0924 Beta |
@@ -36,8 +36,8 @@ | |||
{{str2html .Note}} | |||
</div> | |||
<p class="download"> | |||
<a class="btn btn-default" href="{{$.RepoLink}}/archive/{{.TagName}}/{{$.Repository.Name}}.zip" rel="nofollow"><i class="fa fa-download"></i>Source Code (ZIP)</a> | |||
<a class="btn btn-default" href="{{$.RepoLink}}/archive/{{.TagName}}/{{$.Repository.Name}}.tar.gz"><i class="fa fa-download"></i>Source Code (TAR.GZ)</a> | |||
<a class="btn btn-default" href="{{$.RepoLink}}/archive/{{.TagName}}.zip" rel="nofollow"><i class="fa fa-download"></i>Source Code (ZIP)</a> | |||
<a class="btn btn-default" href="{{$.RepoLink}}/archive/{{.TagName}}.tar.gz"><i class="fa fa-download"></i>Source Code (TAR.GZ)</a> | |||
</p> | |||
<span class="dot"> </span> | |||
</div> | |||
@@ -48,8 +48,8 @@ | |||
<div class="col-md-10"> | |||
<h5 class="title"><a href="{{$.RepoLink}}/src/{{.TagName}}" rel="nofollow">{{.TagName}}</a><i class="fa fa-tag"></i></h5> | |||
<p class="download"> | |||
<a class="download-link" href="{{$.RepoLink}}/archive/{{.TagName}}/{{$.Repository.Name}}.zip" rel="nofollow"><i class="fa fa-download"></i>zip</a> | |||
<a class="download-link" href="{{$.RepoLink}}/archive/{{.TagName}}/{{$.Repository.Name}}.tar.gz"><i class="fa fa-download"></i>tar.gz</a> | |||
<a class="download-link" href="{{$.RepoLink}}/archive/{{.TagName}}.zip" rel="nofollow"><i class="fa fa-download"></i>zip</a> | |||
<a class="download-link" href="{{$.RepoLink}}/archive/{{.TagName}}.tar.gz"><i class="fa fa-download"></i>tar.gz</a> | |||
</p> | |||
<span class="dot"> </span> | |||
</div> | |||