mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	#2825 early response 200 when ?go-get=1
This commit is contained in:
		@@ -9,6 +9,7 @@ import (
 | 
			
		||||
	"path"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/Unknwon/com"
 | 
			
		||||
	"gopkg.in/macaron.v1"
 | 
			
		||||
 | 
			
		||||
	"github.com/gogits/git-module"
 | 
			
		||||
@@ -84,6 +85,24 @@ func RetrieveBaseRepo(ctx *Context, repo *models.Repository) {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// composeGoGetImport returns go-get-import meta content.
 | 
			
		||||
func composeGoGetImport(owner, repo string) string {
 | 
			
		||||
	return path.Join(setting.Domain, setting.AppSubUrl, owner, repo)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// earlyResponseForGoGetMeta responses appropriate go-get meta with status 200
 | 
			
		||||
// if user does not have actual access to the requested repository,
 | 
			
		||||
// or the owner or repository does not exist at all.
 | 
			
		||||
// This is particular a workaround for "go get" command which does not respect
 | 
			
		||||
// .netrc file.
 | 
			
		||||
func earlyResponseForGoGetMeta(ctx *Context) {
 | 
			
		||||
	ctx.PlainText(200, []byte(com.Expand(`<meta name="go-import" content="{GoGetImport} git {CloneLink}">`,
 | 
			
		||||
		map[string]string{
 | 
			
		||||
			"GoGetImport": composeGoGetImport(ctx.Params(":username"), ctx.Params(":reponame")),
 | 
			
		||||
			"CloneLink":   models.ComposeHTTPSCloneURL(ctx.Params(":username"), ctx.Params(":reponame")),
 | 
			
		||||
		})))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func RepoAssignment(args ...bool) macaron.Handler {
 | 
			
		||||
	return func(ctx *Context) {
 | 
			
		||||
		var (
 | 
			
		||||
@@ -112,6 +131,10 @@ func RepoAssignment(args ...bool) macaron.Handler {
 | 
			
		||||
			owner, err = models.GetUserByName(userName)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				if models.IsErrUserNotExist(err) {
 | 
			
		||||
					if ctx.Query("go-get") == "1" {
 | 
			
		||||
						earlyResponseForGoGetMeta(ctx)
 | 
			
		||||
						return
 | 
			
		||||
					}
 | 
			
		||||
					ctx.Handle(404, "GetUserByName", err)
 | 
			
		||||
				} else {
 | 
			
		||||
					ctx.Handle(500, "GetUserByName", err)
 | 
			
		||||
@@ -125,6 +148,10 @@ func RepoAssignment(args ...bool) macaron.Handler {
 | 
			
		||||
		repo, err := models.GetRepositoryByName(owner.ID, repoName)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			if models.IsErrRepoNotExist(err) {
 | 
			
		||||
				if ctx.Query("go-get") == "1" {
 | 
			
		||||
					earlyResponseForGoGetMeta(ctx)
 | 
			
		||||
					return
 | 
			
		||||
				}
 | 
			
		||||
				ctx.Handle(404, "GetRepositoryByName", err)
 | 
			
		||||
			} else {
 | 
			
		||||
				ctx.Handle(500, "GetRepositoryByName", err)
 | 
			
		||||
@@ -149,6 +176,10 @@ func RepoAssignment(args ...bool) macaron.Handler {
 | 
			
		||||
 | 
			
		||||
		// Check access.
 | 
			
		||||
		if ctx.Repo.AccessMode == models.ACCESS_MODE_NONE {
 | 
			
		||||
			if ctx.Query("go-get") == "1" {
 | 
			
		||||
				earlyResponseForGoGetMeta(ctx)
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
			ctx.Handle(404, "no access right", err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
@@ -269,7 +300,7 @@ func RepoAssignment(args ...bool) macaron.Handler {
 | 
			
		||||
		ctx.Data["PullRequestCtx"] = ctx.Repo.PullRequest
 | 
			
		||||
 | 
			
		||||
		if ctx.Query("go-get") == "1" {
 | 
			
		||||
			ctx.Data["GoGetImport"] = path.Join(setting.Domain, setting.AppSubUrl, owner.Name, repo.Name)
 | 
			
		||||
			ctx.Data["GoGetImport"] = composeGoGetImport(owner.Name, repo.Name)
 | 
			
		||||
			prefix := setting.AppUrl + path.Join(owner.Name, repo.Name, "src", ctx.Repo.BranchName)
 | 
			
		||||
			ctx.Data["GoDocDirectory"] = prefix + "{/dir}"
 | 
			
		||||
			ctx.Data["GoDocFile"] = prefix + "{/dir}/{file}#L{line}"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user