fix go get subpackage bug (#2584)
* fix go get subpackage bug * merge the duplicated funtions
This commit is contained in:
parent
2db424c3f1
commit
2ef8b8bcbe
|
@ -134,21 +134,23 @@ func RetrieveBaseRepo(ctx *Context, repo *models.Repository) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// composeGoGetImport returns go-get-import meta content.
|
// ComposeGoGetImport returns go-get-import meta content.
|
||||||
func composeGoGetImport(owner, repo string) string {
|
func ComposeGoGetImport(owner, repo string) string {
|
||||||
return path.Join(setting.Domain, setting.AppSubURL, owner, repo)
|
return path.Join(setting.Domain, setting.AppSubURL, owner, repo)
|
||||||
}
|
}
|
||||||
|
|
||||||
// earlyResponseForGoGetMeta responses appropriate go-get meta with status 200
|
// EarlyResponseForGoGetMeta responses appropriate go-get meta with status 200
|
||||||
// if user does not have actual access to the requested repository,
|
// if user does not have actual access to the requested repository,
|
||||||
// or the owner or repository does not exist at all.
|
// or the owner or repository does not exist at all.
|
||||||
// This is particular a workaround for "go get" command which does not respect
|
// This is particular a workaround for "go get" command which does not respect
|
||||||
// .netrc file.
|
// .netrc file.
|
||||||
func earlyResponseForGoGetMeta(ctx *Context) {
|
func EarlyResponseForGoGetMeta(ctx *Context) {
|
||||||
|
username := ctx.Params(":username")
|
||||||
|
reponame := ctx.Params(":reponame")
|
||||||
ctx.PlainText(200, []byte(com.Expand(`<meta name="go-import" content="{GoGetImport} git {CloneLink}">`,
|
ctx.PlainText(200, []byte(com.Expand(`<meta name="go-import" content="{GoGetImport} git {CloneLink}">`,
|
||||||
map[string]string{
|
map[string]string{
|
||||||
"GoGetImport": composeGoGetImport(ctx.Params(":username"), strings.TrimSuffix(ctx.Params(":reponame"), ".git")),
|
"GoGetImport": ComposeGoGetImport(username, strings.TrimSuffix(reponame, ".git")),
|
||||||
"CloneLink": models.ComposeHTTPSCloneURL(ctx.Params(":username"), ctx.Params(":reponame")),
|
"CloneLink": models.ComposeHTTPSCloneURL(username, reponame),
|
||||||
})))
|
})))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -216,7 +218,7 @@ func RepoIDAssignment() macaron.Handler {
|
||||||
// Check access.
|
// Check access.
|
||||||
if ctx.Repo.AccessMode == models.AccessModeNone {
|
if ctx.Repo.AccessMode == models.AccessModeNone {
|
||||||
if ctx.Query("go-get") == "1" {
|
if ctx.Query("go-get") == "1" {
|
||||||
earlyResponseForGoGetMeta(ctx)
|
EarlyResponseForGoGetMeta(ctx)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.Handle(404, "no access right", err)
|
ctx.Handle(404, "no access right", err)
|
||||||
|
@ -260,7 +262,7 @@ func RepoAssignment() macaron.Handler {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if models.IsErrUserNotExist(err) {
|
if models.IsErrUserNotExist(err) {
|
||||||
if ctx.Query("go-get") == "1" {
|
if ctx.Query("go-get") == "1" {
|
||||||
earlyResponseForGoGetMeta(ctx)
|
EarlyResponseForGoGetMeta(ctx)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.Handle(404, "GetUserByName", nil)
|
ctx.Handle(404, "GetUserByName", nil)
|
||||||
|
@ -282,7 +284,7 @@ func RepoAssignment() macaron.Handler {
|
||||||
RedirectToRepo(ctx, redirectRepoID)
|
RedirectToRepo(ctx, redirectRepoID)
|
||||||
} else if models.IsErrRepoRedirectNotExist(err) {
|
} else if models.IsErrRepoRedirectNotExist(err) {
|
||||||
if ctx.Query("go-get") == "1" {
|
if ctx.Query("go-get") == "1" {
|
||||||
earlyResponseForGoGetMeta(ctx)
|
EarlyResponseForGoGetMeta(ctx)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.Handle(404, "GetRepositoryByName", nil)
|
ctx.Handle(404, "GetRepositoryByName", nil)
|
||||||
|
@ -315,7 +317,7 @@ func RepoAssignment() macaron.Handler {
|
||||||
// Check access.
|
// Check access.
|
||||||
if ctx.Repo.AccessMode == models.AccessModeNone {
|
if ctx.Repo.AccessMode == models.AccessModeNone {
|
||||||
if ctx.Query("go-get") == "1" {
|
if ctx.Query("go-get") == "1" {
|
||||||
earlyResponseForGoGetMeta(ctx)
|
EarlyResponseForGoGetMeta(ctx)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.Handle(404, "no access right", err)
|
ctx.Handle(404, "no access right", err)
|
||||||
|
@ -443,7 +445,7 @@ func RepoAssignment() macaron.Handler {
|
||||||
ctx.Data["PullRequestCtx"] = ctx.Repo.PullRequest
|
ctx.Data["PullRequestCtx"] = ctx.Repo.PullRequest
|
||||||
|
|
||||||
if ctx.Query("go-get") == "1" {
|
if ctx.Query("go-get") == "1" {
|
||||||
ctx.Data["GoGetImport"] = composeGoGetImport(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)
|
prefix := setting.AppURL + path.Join(owner.Name, repo.Name, "src", ctx.Repo.BranchName)
|
||||||
ctx.Data["GoDocDirectory"] = prefix + "{/dir}"
|
ctx.Data["GoDocDirectory"] = prefix + "{/dir}"
|
||||||
ctx.Data["GoDocFile"] = prefix + "{/dir}/{file}#L{line}"
|
ctx.Data["GoDocFile"] = prefix + "{/dir}/{file}#L{line}"
|
||||||
|
|
|
@ -22,35 +22,15 @@ import (
|
||||||
"code.gitea.io/gitea/modules/context"
|
"code.gitea.io/gitea/modules/context"
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
|
||||||
"github.com/Unknwon/com"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func composeGoGetImport(owner, repo, sub string) string {
|
|
||||||
return path.Join(setting.Domain, setting.AppSubURL, owner, repo, sub)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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.Context, username, reponame, subpath string) {
|
|
||||||
ctx.PlainText(200, []byte(com.Expand(`<meta name="go-import" content="{GoGetImport} git {CloneLink}">`,
|
|
||||||
map[string]string{
|
|
||||||
"GoGetImport": composeGoGetImport(username, reponame, subpath),
|
|
||||||
"CloneLink": models.ComposeHTTPSCloneURL(username, reponame),
|
|
||||||
})))
|
|
||||||
}
|
|
||||||
|
|
||||||
// HTTP implmentation git smart HTTP protocol
|
// HTTP implmentation git smart HTTP protocol
|
||||||
func HTTP(ctx *context.Context) {
|
func HTTP(ctx *context.Context) {
|
||||||
username := ctx.Params(":username")
|
username := ctx.Params(":username")
|
||||||
reponame := strings.TrimSuffix(ctx.Params(":reponame"), ".git")
|
reponame := strings.TrimSuffix(ctx.Params(":reponame"), ".git")
|
||||||
subpath := ctx.Params("*")
|
|
||||||
|
|
||||||
if ctx.Query("go-get") == "1" {
|
if ctx.Query("go-get") == "1" {
|
||||||
earlyResponseForGoGetMeta(ctx, username, reponame, subpath)
|
context.EarlyResponseForGoGetMeta(ctx)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue