summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authora1012112796 <1012112796@qq.com>2021-03-04 11:41:23 +0800
committerGitHub <noreply@github.com>2021-03-03 22:41:23 -0500
commita5279b74b63248902a6572df5afa3745367e6cb9 (patch)
tree7f1fac744013b533bfb0580d48a27d0aae5ab04e /modules
parent523efa433b61e00e7a14bd31cac315e43842d729 (diff)
downloadgitea-a5279b74b63248902a6572df5afa3745367e6cb9.tar.gz
gitea-a5279b74b63248902a6572df5afa3745367e6cb9.zip
Make manual merge autodetection optional and add manual merge as merge method (#12543)
* Make auto check manual merge as a chooseable mod and add manual merge way on ui as title, Before this pr, we use same way with GH to check manually merge. It good, but in some special cases, misjudgments can occur. and it's hard to fix this bug. So I add option to allow repo manager block "auto check manual merge" function, Then it will have same style like gitlab(allow empty pr). and to compensate for not being able to detect THE PR merge automatically, I added a manual approach. Signed-off-by: a1012112796 <1012112796@qq.com> * make swager * api support * ping ci * fix TestPullCreate_EmptyChangesWithCommits * Apply suggestions from code review Co-authored-by: zeripath <art27@cantab.net> * Apply review suggestions and add test * Apply suggestions from code review Co-authored-by: zeripath <art27@cantab.net> * fix build * test error message * make fmt * Fix indentation issues identified by @silverwind Co-authored-by: silverwind <me@silverwind.io> * Fix tests and make manually merged disabled error on API the same Signed-off-by: Andrew Thornton <art27@cantab.net> * a small nit * fix wrong commit id error * fix bug * simple test * fix test Co-authored-by: zeripath <art27@cantab.net> Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
Diffstat (limited to 'modules')
-rw-r--r--modules/forms/repo_form.go9
-rw-r--r--modules/git/repo_commit.go9
-rw-r--r--modules/git/repo_commit_test.go15
-rw-r--r--modules/structs/repo.go4
4 files changed, 34 insertions, 3 deletions
diff --git a/modules/forms/repo_form.go b/modules/forms/repo_form.go
index 2793acdd5b..ab88aef571 100644
--- a/modules/forms/repo_form.go
+++ b/modules/forms/repo_form.go
@@ -156,6 +156,8 @@ type RepoSettingForm struct {
PullsAllowRebase bool
PullsAllowRebaseMerge bool
PullsAllowSquash bool
+ PullsAllowManualMerge bool
+ EnableAutodetectManualMerge bool
EnableTimetracker bool
AllowOnlyContributorsToTrackTime bool
EnableIssueDependencies bool
@@ -556,11 +558,12 @@ func (f *InitializeLabelsForm) Validate(req *http.Request, errs binding.Errors)
// swagger:model MergePullRequestOption
type MergePullRequestForm struct {
// required: true
- // enum: merge,rebase,rebase-merge,squash
- Do string `binding:"Required;In(merge,rebase,rebase-merge,squash)"`
+ // enum: merge,rebase,rebase-merge,squash,manually-merged
+ Do string `binding:"Required;In(merge,rebase,rebase-merge,squash,manually-merged)"`
MergeTitleField string
MergeMessageField string
- ForceMerge *bool `json:"force_merge,omitempty"`
+ MergeCommitID string // only used for manually-merged
+ ForceMerge *bool `json:"force_merge,omitempty"`
}
// Validate validates the fields
diff --git a/modules/git/repo_commit.go b/modules/git/repo_commit.go
index 5bf113ba49..ea0aeeb35d 100644
--- a/modules/git/repo_commit.go
+++ b/modules/git/repo_commit.go
@@ -456,3 +456,12 @@ func (repo *Repository) GetCommitsFromIDs(commitIDs []string) (commits *list.Lis
return commits
}
+
+// IsCommitInBranch check if the commit is on the branch
+func (repo *Repository) IsCommitInBranch(commitID, branch string) (r bool, err error) {
+ stdout, err := NewCommand("branch", "--contains", commitID, branch).RunInDir(repo.Path)
+ if err != nil {
+ return false, err
+ }
+ return len(stdout) > 0, err
+}
diff --git a/modules/git/repo_commit_test.go b/modules/git/repo_commit_test.go
index 87dd6763b3..3eedaa6b6e 100644
--- a/modules/git/repo_commit_test.go
+++ b/modules/git/repo_commit_test.go
@@ -63,3 +63,18 @@ func TestGetCommitWithBadCommitID(t *testing.T) {
assert.Error(t, err)
assert.True(t, IsErrNotExist(err))
}
+
+func TestIsCommitInBranch(t *testing.T) {
+ bareRepo1Path := filepath.Join(testReposDir, "repo1_bare")
+ bareRepo1, err := OpenRepository(bareRepo1Path)
+ assert.NoError(t, err)
+ defer bareRepo1.Close()
+
+ result, err := bareRepo1.IsCommitInBranch("2839944139e0de9737a044f78b0e4b40d989a9e3", "branch1")
+ assert.NoError(t, err)
+ assert.Equal(t, true, result)
+
+ result, err = bareRepo1.IsCommitInBranch("2839944139e0de9737a044f78b0e4b40d989a9e3", "branch2")
+ assert.NoError(t, err)
+ assert.Equal(t, false, result)
+}
diff --git a/modules/structs/repo.go b/modules/structs/repo.go
index d588813b21..c47700cd00 100644
--- a/modules/structs/repo.go
+++ b/modules/structs/repo.go
@@ -167,6 +167,10 @@ type EditRepoOption struct {
AllowRebaseMerge *bool `json:"allow_rebase_explicit,omitempty"`
// either `true` to allow squash-merging pull requests, or `false` to prevent squash-merging. `has_pull_requests` must be `true`.
AllowSquash *bool `json:"allow_squash_merge,omitempty"`
+ // either `true` to allow mark pr as merged manually, or `false` to prevent it. `has_pull_requests` must be `true`.
+ AllowManualMerge *bool `json:"allow_manual_merge,omitempty"`
+ // either `true` to enable AutodetectManualMerge, or `false` to prevent it. `has_pull_requests` must be `true`, Note: In some special cases, misjudgments can occur.
+ AutodetectManualMerge *bool `json:"autodetect_manual_merge,omitempty"`
// set to `true` to archive this repository.
Archived *bool `json:"archived,omitempty"`
// set to a string like `8h30m0s` to set the mirror interval time