summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmd/web.go3
-rw-r--r--gogs.go2
-rw-r--r--modules/middleware/repo.go11
-rw-r--r--routers/repo/repo.go52
-rw-r--r--templates/.VERSION2
-rw-r--r--templates/repo/release/list.tmpl8
6 files changed, 54 insertions, 24 deletions
diff --git a/cmd/web.go b/cmd/web.go
index 0d472cd73a..2376fd2126 100644
--- a/cmd/web.go
+++ b/cmd/web.go
@@ -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))
diff --git a/gogs.go b/gogs.go
index 0821dbc220..6956b9f50a 100644
--- a/gogs.go
+++ b/gogs.go
@@ -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())
diff --git a/modules/middleware/repo.go b/modules/middleware/repo.go
index e447ee3a4d..c0290b2e8f 100644
--- a/modules/middleware/repo.go
+++ b/modules/middleware/repo.go
@@ -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()
diff --git a/routers/repo/repo.go b/routers/repo/repo.go
index ae599f9fa2..5562a8400a 100644
--- a/routers/repo/repo.go
+++ b/routers/repo/repo.go
@@ -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)
}
diff --git a/templates/.VERSION b/templates/.VERSION
index 23f5f0fe59..49d86b406c 100644
--- a/templates/.VERSION
+++ b/templates/.VERSION
@@ -1 +1 @@
-0.5.4.0923 Beta \ No newline at end of file
+0.5.4.0924 Beta \ No newline at end of file
diff --git a/templates/repo/release/list.tmpl b/templates/repo/release/list.tmpl
index 58a050ab56..1eb11fc5e6 100644
--- a/templates/repo/release/list.tmpl
+++ b/templates/repo/release/list.tmpl
@@ -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">&nbsp;</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">&nbsp;</span>
</div>