From f0db3da713eb9440923ddf376349e72b65f129ef Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 21 Apr 2017 10:43:29 +0800 Subject: [PATCH] fix go get sub package and add domain on installation to let go get work defaultly (#1518) * fix go get sub package and add domain on installation to let go get work defaultly * fix import sequence * fix .git problem --- modules/context/repo.go | 2 +- routers/install.go | 1 + routers/repo/http.go | 25 +++++++++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/modules/context/repo.go b/modules/context/repo.go index aae76185e..4deae2ebb 100644 --- a/modules/context/repo.go +++ b/modules/context/repo.go @@ -127,7 +127,7 @@ func composeGoGetImport(owner, repo string) string { func earlyResponseForGoGetMeta(ctx *Context) { ctx.PlainText(200, []byte(com.Expand(``, map[string]string{ - "GoGetImport": composeGoGetImport(ctx.Params(":username"), ctx.Params(":reponame")), + "GoGetImport": composeGoGetImport(ctx.Params(":username"), strings.TrimSuffix(ctx.Params(":reponame"), ".git")), "CloneLink": models.ComposeHTTPSCloneURL(ctx.Params(":username"), ctx.Params(":reponame")), }))) } diff --git a/routers/install.go b/routers/install.go index b4df536d0..1ab409d00 100644 --- a/routers/install.go +++ b/routers/install.go @@ -257,6 +257,7 @@ func InstallPost(ctx *context.Context, form auth.InstallForm) { cfg.Section("repository").Key("ROOT").SetValue(form.RepoRootPath) cfg.Section("").Key("RUN_USER").SetValue(form.RunUser) cfg.Section("server").Key("SSH_DOMAIN").SetValue(form.Domain) + cfg.Section("server").Key("DOMAIN").SetValue(form.Domain) cfg.Section("server").Key("HTTP_PORT").SetValue(form.HTTPPort) cfg.Section("server").Key("ROOT_URL").SetValue(form.AppURL) diff --git a/routers/repo/http.go b/routers/repo/http.go index 12fcbcfb3..9c2ec4d02 100644 --- a/routers/repo/http.go +++ b/routers/repo/http.go @@ -22,12 +22,37 @@ import ( "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/log" "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(``, + map[string]string{ + "GoGetImport": composeGoGetImport(username, reponame, subpath), + "CloneLink": models.ComposeHTTPSCloneURL(username, reponame), + }))) +} + // HTTP implmentation git smart HTTP protocol func HTTP(ctx *context.Context) { username := ctx.Params(":username") reponame := strings.TrimSuffix(ctx.Params(":reponame"), ".git") + subpath := ctx.Params("*") + + if ctx.Query("go-get") == "1" { + earlyResponseForGoGetMeta(ctx, username, reponame, subpath) + return + } var isPull bool service := ctx.Query("service")