summaryrefslogtreecommitdiffstats
path: root/routers/web
diff options
context:
space:
mode:
authora1012112796 <1012112796@qq.com>2021-07-28 17:42:56 +0800
committerGitHub <noreply@github.com>2021-07-28 17:42:56 +0800
commit370516883717de0e6e2087c12d368eb1465ee3b0 (patch)
tree1dd7b0946ac2bbeb3b9f13518cf2df2f4ebca348 /routers/web
parent5b2e2d29ca50ba4c11a44d4f1de18ffcf215ba1b (diff)
downloadgitea-370516883717de0e6e2087c12d368eb1465ee3b0.tar.gz
gitea-370516883717de0e6e2087c12d368eb1465ee3b0.zip
Add agit flow support in gitea (#14295)
* feature: add agit flow support ref: https://git-repo.info/en/2020/03/agit-flow-and-git-repo/ example: ```Bash git checkout -b test echo "test" >> README.md git commit -m "test" git push origin HEAD:refs/for/master -o topic=test ``` Signed-off-by: a1012112796 <1012112796@qq.com> * fix lint * simplify code add fix some nits * update merge help message * Apply suggestions from code review. Thanks @jiangxin * add forced-update message * fix lint * splite writePktLine * add refs/for/<target-branch>/<topic-branch> support also * Add test code add fix api * fix lint * fix test * skip test if git version < 2.29 * try test with git 2.30.1 * fix permission check bug * fix some nit * logic implify and test code update * fix bug * apply suggestions from code review * prepare for merge Signed-off-by: Andrew Thornton <art27@cantab.net> * fix permission check bug - test code update - apply suggestions from code review @zeripath Signed-off-by: a1012112796 <1012112796@qq.com> * fix bug when target branch isn't exist * prevent some special push and fix some nits * fix lint * try splite * Apply suggestions from code review - fix permission check - handle user rename * fix version negotiation * remane * fix template * handle empty repo * ui: fix branch link under the title * fix nits Co-authored-by: Andrew Thornton <art27@cantab.net> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Diffstat (limited to 'routers/web')
-rw-r--r--routers/web/repo/compare.go2
-rw-r--r--routers/web/repo/http.go5
-rw-r--r--routers/web/repo/issue.go3
-rw-r--r--routers/web/repo/pull.go12
-rw-r--r--routers/web/user/setting/profile.go9
-rw-r--r--routers/web/web.go16
6 files changed, 43 insertions, 4 deletions
diff --git a/routers/web/repo/compare.go b/routers/web/repo/compare.go
index e66aa614cb..f405362cf5 100644
--- a/routers/web/repo/compare.go
+++ b/routers/web/repo/compare.go
@@ -653,7 +653,7 @@ func CompareDiff(ctx *context.Context) {
ctx.Data["HeadTags"] = headTags
if ctx.Data["PageIsComparePull"] == true {
- pr, err := models.GetUnmergedPullRequest(headRepo.ID, ctx.Repo.Repository.ID, headBranch, baseBranch)
+ pr, err := models.GetUnmergedPullRequest(headRepo.ID, ctx.Repo.Repository.ID, headBranch, baseBranch, models.PullRequestFlowGithub)
if err != nil {
if !models.IsErrPullRequestNotExist(err) {
ctx.ServerError("GetUnmergedPullRequest", err)
diff --git a/routers/web/repo/http.go b/routers/web/repo/http.go
index 3390f026a0..7947776f16 100644
--- a/routers/web/repo/http.go
+++ b/routers/web/repo/http.go
@@ -198,6 +198,11 @@ func httpBase(ctx *context.Context) (h *serviceHandler) {
return
}
+ // Because of special ref "refs/for" .. , need delay write permission check
+ if git.SupportProcReceive {
+ accessMode = models.AccessModeRead
+ }
+
if !perm.CanAccess(accessMode, unitType) {
ctx.HandleText(http.StatusForbidden, "User permission denied")
return
diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go
index 9639ea8201..8518917828 100644
--- a/routers/web/repo/issue.go
+++ b/routers/web/repo/issue.go
@@ -2047,7 +2047,7 @@ func NewComment(ctx *context.Context) {
if form.Status == "reopen" && issue.IsPull {
pull := issue.PullRequest
var err error
- pr, err = models.GetUnmergedPullRequest(pull.HeadRepoID, pull.BaseRepoID, pull.HeadBranch, pull.BaseBranch)
+ pr, err = models.GetUnmergedPullRequest(pull.HeadRepoID, pull.BaseRepoID, pull.HeadBranch, pull.BaseBranch, pull.Flow)
if err != nil {
if !models.IsErrPullRequestNotExist(err) {
ctx.ServerError("GetUnmergedPullRequest", err)
@@ -2057,6 +2057,7 @@ func NewComment(ctx *context.Context) {
// Regenerate patch and test conflict.
if pr == nil {
+ issue.PullRequest.HeadCommitID = ""
pull_service.AddToTaskQueue(issue.PullRequest)
}
}
diff --git a/routers/web/repo/pull.go b/routers/web/repo/pull.go
index 703bbd837a..565c645801 100644
--- a/routers/web/repo/pull.go
+++ b/routers/web/repo/pull.go
@@ -427,10 +427,18 @@ func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.Compare
}
defer headGitRepo.Close()
- headBranchExist = headGitRepo.IsBranchExist(pull.HeadBranch)
+ if pull.Flow == models.PullRequestFlowGithub {
+ headBranchExist = headGitRepo.IsBranchExist(pull.HeadBranch)
+ } else {
+ headBranchExist = git.IsReferenceExist(baseGitRepo.Path, pull.GetGitRefName())
+ }
if headBranchExist {
- headBranchSha, err = headGitRepo.GetBranchCommitID(pull.HeadBranch)
+ if pull.Flow != models.PullRequestFlowGithub {
+ headBranchSha, err = baseGitRepo.GetRefCommitID(pull.GetGitRefName())
+ } else {
+ headBranchSha, err = headGitRepo.GetBranchCommitID(pull.HeadBranch)
+ }
if err != nil {
ctx.ServerError("GetBranchCommitID", err)
return nil
diff --git a/routers/web/user/setting/profile.go b/routers/web/user/setting/profile.go
index 682f920578..bec523509c 100644
--- a/routers/web/user/setting/profile.go
+++ b/routers/web/user/setting/profile.go
@@ -23,6 +23,7 @@ import (
"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/modules/web"
"code.gitea.io/gitea/modules/web/middleware"
+ "code.gitea.io/gitea/services/agit"
"code.gitea.io/gitea/services/forms"
"github.com/unknwon/i18n"
@@ -76,6 +77,14 @@ func HandleUsernameChange(ctx *context.Context, user *models.User, newName strin
return err
}
}
+
+ // update all agit flow pull request header
+ err := agit.UserNameChanged(user, newName)
+ if err != nil {
+ ctx.ServerError("agit.UserNameChanged", err)
+ return err
+ }
+
log.Trace("User name changed: %s -> %s", user.Name, newName)
return nil
}
diff --git a/routers/web/web.go b/routers/web/web.go
index 26e6c31a47..a47fd518ac 100644
--- a/routers/web/web.go
+++ b/routers/web/web.go
@@ -12,6 +12,7 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/context"
+ "code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/httpcache"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/metrics"
@@ -146,6 +147,21 @@ func Routes() *web.Route {
routes.Get("/metrics", append(common, Metrics)...)
}
+ routes.Get("/ssh_info", func(rw http.ResponseWriter, req *http.Request) {
+ if !git.SupportProcReceive {
+ rw.WriteHeader(404)
+ return
+ }
+ rw.Header().Set("content-type", "text/json;charset=UTF-8")
+ _, err := rw.Write([]byte(`{"type":"gitea","version":1}`))
+ if err != nil {
+ log.Error("fail to write result: err: %v", err)
+ rw.WriteHeader(500)
+ return
+ }
+ rw.WriteHeader(200)
+ })
+
// Removed: toolbox.Toolboxer middleware will provide debug information which seems unnecessary
common = append(common, context.Contexter())