mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 01:34:27 +00:00 
			
		
		
		
	Fix download archive issue
This commit is contained in:
		@@ -343,6 +343,7 @@ func runWeb(*cli.Context) {
 | 
				
			|||||||
		r.Get("/issues/:index", repo.ViewIssue)
 | 
							r.Get("/issues/:index", repo.ViewIssue)
 | 
				
			||||||
		r.Get("/pulls", repo.Pulls)
 | 
							r.Get("/pulls", repo.Pulls)
 | 
				
			||||||
		r.Get("/branches", repo.Branches)
 | 
							r.Get("/branches", repo.Branches)
 | 
				
			||||||
 | 
							r.Get("/archive/*", repo.Download)
 | 
				
			||||||
	}, ignSignIn, middleware.RepoAssignment(true))
 | 
						}, ignSignIn, middleware.RepoAssignment(true))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	m.Group("/:username/:reponame", func(r *macaron.Router) {
 | 
						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("/commit/:branchname/*", repo.Diff)
 | 
							r.Get("/commit/:branchname/*", repo.Diff)
 | 
				
			||||||
		r.Get("/releases", repo.Releases)
 | 
							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)
 | 
							r.Get("/compare/:before([a-z0-9]+)...:after([a-z0-9]+)", repo.CompareDiff)
 | 
				
			||||||
	}, ignSignIn, middleware.RepoAssignment(true, true))
 | 
						}, ignSignIn, middleware.RepoAssignment(true, true))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							@@ -17,7 +17,7 @@ import (
 | 
				
			|||||||
	"github.com/gogits/gogs/modules/setting"
 | 
						"github.com/gogits/gogs/modules/setting"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const APP_VER = "0.5.4.0923 Beta"
 | 
					const APP_VER = "0.5.4.0924 Beta"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func init() {
 | 
					func init() {
 | 
				
			||||||
	runtime.GOMAXPROCS(runtime.NumCPU())
 | 
						runtime.GOMAXPROCS(runtime.NumCPU())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -200,7 +200,7 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
					ctx.Repo.Commit, err = gitRepo.GetCommitOfBranch(refName)
 | 
										ctx.Repo.Commit, err = gitRepo.GetCommitOfBranch(refName)
 | 
				
			||||||
					if err != nil {
 | 
										if err != nil {
 | 
				
			||||||
						ctx.Handle(404, "RepoAssignment invalid branch", nil)
 | 
											ctx.Handle(500, "RepoAssignment invalid branch", err)
 | 
				
			||||||
						return
 | 
											return
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					ctx.Repo.CommitId = ctx.Repo.Commit.Id.String()
 | 
										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.IsTag = true
 | 
				
			||||||
					ctx.Repo.BranchName = refName
 | 
										ctx.Repo.BranchName = refName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					ctx.Repo.Tag, err = gitRepo.GetTag(refName)
 | 
										ctx.Repo.Commit, err = gitRepo.GetCommitOfTag(refName)
 | 
				
			||||||
					if err != nil {
 | 
										if err != nil {
 | 
				
			||||||
						ctx.Handle(404, "RepoAssignment invalid tag", nil)
 | 
											ctx.Handle(500, "RepoAssignment invalid tag", err)
 | 
				
			||||||
						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))
 | 
					 | 
				
			||||||
						return
 | 
											return
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					ctx.Repo.CommitId = ctx.Repo.Commit.Id.String()
 | 
										ctx.Repo.CommitId = ctx.Repo.Commit.Id.String()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -244,18 +244,25 @@ func Action(ctx *middleware.Context) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Download(ctx *middleware.Context) {
 | 
					func Download(ctx *middleware.Context) {
 | 
				
			||||||
	ext := "." + ctx.Params(":ext")
 | 
						var (
 | 
				
			||||||
 | 
							uri         = ctx.Params("*")
 | 
				
			||||||
 | 
							refName     string
 | 
				
			||||||
 | 
							ext         string
 | 
				
			||||||
 | 
							archivePath string
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var archivePath string
 | 
						switch {
 | 
				
			||||||
	switch ext {
 | 
						case strings.HasSuffix(uri, ".zip"):
 | 
				
			||||||
	case ".zip":
 | 
							ext = ".zip"
 | 
				
			||||||
		archivePath = path.Join(ctx.Repo.GitRepo.Path, "archives/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")
 | 
							archivePath = path.Join(ctx.Repo.GitRepo.Path, "archives/targz")
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		ctx.Error(404)
 | 
							ctx.Error(404)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						refName = strings.TrimSuffix(uri, ext)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !com.IsDir(archivePath) {
 | 
						if !com.IsDir(archivePath) {
 | 
				
			||||||
		if err := os.MkdirAll(archivePath, os.ModePerm); err != nil {
 | 
							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)
 | 
						archivePath = path.Join(archivePath, ctx.Repo.CommitId+ext)
 | 
				
			||||||
	if !com.IsFile(archivePath) {
 | 
						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)
 | 
								ctx.Handle(500, "Download -> CreateArchive "+archivePath, err)
 | 
				
			||||||
			return
 | 
								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}}
 | 
					                        {{str2html .Note}}
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                    <p class="download">
 | 
					                    <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}}.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}}.tar.gz"><i class="fa fa-download"></i>Source Code (TAR.GZ)</a>
 | 
				
			||||||
                    </p>
 | 
					                    </p>
 | 
				
			||||||
                    <span class="dot"> </span>
 | 
					                    <span class="dot"> </span>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
@@ -48,8 +48,8 @@
 | 
				
			|||||||
                <div class="col-md-10">
 | 
					                <div class="col-md-10">
 | 
				
			||||||
                    <h5 class="title"><a href="{{$.RepoLink}}/src/{{.TagName}}" rel="nofollow">{{.TagName}}</a><i class="fa fa-tag"></i></h5>
 | 
					                    <h5 class="title"><a href="{{$.RepoLink}}/src/{{.TagName}}" rel="nofollow">{{.TagName}}</a><i class="fa fa-tag"></i></h5>
 | 
				
			||||||
                    <p class="download">
 | 
					                    <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}}.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}}.tar.gz"><i class="fa fa-download"></i>tar.gz</a>
 | 
				
			||||||
                    </p>
 | 
					                    </p>
 | 
				
			||||||
                    <span class="dot"> </span>
 | 
					                    <span class="dot"> </span>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user