From f4629fc472338e935b77f32b8d9dc5793937203a Mon Sep 17 00:00:00 2001
From: Norwin <noerw@users.noreply.github.com>
Date: Tue, 16 Mar 2021 01:00:52 +0000
Subject: [PATCH] Move repo.CloseIssuesViaCommitInAnyBranch to issue settings
 (#14965)

---
 modules/forms/repo_form.go           | 46 ++++++++++++++--------------
 routers/repo/setting.go              | 16 +++++++---
 templates/repo/settings/options.tmpl | 18 +++++------
 3 files changed, 44 insertions(+), 36 deletions(-)

diff --git a/modules/forms/repo_form.go b/modules/forms/repo_form.go
index 6cf72ee6b8..6c7c9bea13 100644
--- a/modules/forms/repo_form.go
+++ b/modules/forms/repo_form.go
@@ -123,34 +123,34 @@ type RepoSettingForm struct {
 	EnablePrune    bool
 
 	// Advanced settings
-	EnableWiki                       bool
-	EnableExternalWiki               bool
-	ExternalWikiURL                  string
-	EnableIssues                     bool
-	EnableExternalTracker            bool
-	ExternalTrackerURL               string
-	TrackerURLFormat                 string
-	TrackerIssueStyle                string
-	EnableProjects                   bool
-	EnablePulls                      bool
-	PullsIgnoreWhitespace            bool
-	PullsAllowMerge                  bool
-	PullsAllowRebase                 bool
-	PullsAllowRebaseMerge            bool
-	PullsAllowSquash                 bool
-	PullsAllowManualMerge            bool
-	EnableAutodetectManualMerge      bool
-	EnableTimetracker                bool
-	AllowOnlyContributorsToTrackTime bool
-	EnableIssueDependencies          bool
-	IsArchived                       bool
+	EnableWiki                            bool
+	EnableExternalWiki                    bool
+	ExternalWikiURL                       string
+	EnableIssues                          bool
+	EnableExternalTracker                 bool
+	ExternalTrackerURL                    string
+	TrackerURLFormat                      string
+	TrackerIssueStyle                     string
+	EnableCloseIssuesViaCommitInAnyBranch bool
+	EnableProjects                        bool
+	EnablePulls                           bool
+	PullsIgnoreWhitespace                 bool
+	PullsAllowMerge                       bool
+	PullsAllowRebase                      bool
+	PullsAllowRebaseMerge                 bool
+	PullsAllowSquash                      bool
+	PullsAllowManualMerge                 bool
+	EnableAutodetectManualMerge           bool
+	EnableTimetracker                     bool
+	AllowOnlyContributorsToTrackTime      bool
+	EnableIssueDependencies               bool
+	IsArchived                            bool
 
 	// Signing Settings
 	TrustModel string
 
 	// Admin settings
-	EnableHealthCheck                     bool
-	EnableCloseIssuesViaCommitInAnyBranch bool
+	EnableHealthCheck bool
 }
 
 // Validate validates the fields
diff --git a/routers/repo/setting.go b/routers/repo/setting.go
index 6b31ac4c71..3c7524e4e6 100644
--- a/routers/repo/setting.go
+++ b/routers/repo/setting.go
@@ -216,6 +216,7 @@ func SettingsPost(ctx *context.Context) {
 		ctx.Redirect(repo.Link() + "/settings")
 
 	case "advanced":
+		var repoChanged bool
 		var units []models.RepoUnit
 		var deleteUnitTypes []models.UnitType
 
@@ -223,6 +224,11 @@ func SettingsPost(ctx *context.Context) {
 		// as an error on the UI for this action
 		ctx.Data["Err_RepoName"] = nil
 
+		if repo.CloseIssuesViaCommitInAnyBranch != form.EnableCloseIssuesViaCommitInAnyBranch {
+			repo.CloseIssuesViaCommitInAnyBranch = form.EnableCloseIssuesViaCommitInAnyBranch
+			repoChanged = true
+		}
+
 		if form.EnableWiki && form.EnableExternalWiki && !models.UnitTypeExternalWiki.UnitGlobalDisabled() {
 			if !validation.IsValidExternalURL(form.ExternalWikiURL) {
 				ctx.Flash.Error(ctx.Tr("repo.settings.external_wiki_url_error"))
@@ -326,6 +332,12 @@ func SettingsPost(ctx *context.Context) {
 			ctx.ServerError("UpdateRepositoryUnits", err)
 			return
 		}
+		if repoChanged {
+			if err := models.UpdateRepository(repo, false); err != nil {
+				ctx.ServerError("UpdateRepository", err)
+				return
+			}
+		}
 		log.Trace("Repository advanced settings updated: %s/%s", ctx.Repo.Owner.Name, repo.Name)
 
 		ctx.Flash.Success(ctx.Tr("repo.settings.update_settings_success"))
@@ -361,10 +373,6 @@ func SettingsPost(ctx *context.Context) {
 			repo.IsFsckEnabled = form.EnableHealthCheck
 		}
 
-		if repo.CloseIssuesViaCommitInAnyBranch != form.EnableCloseIssuesViaCommitInAnyBranch {
-			repo.CloseIssuesViaCommitInAnyBranch = form.EnableCloseIssuesViaCommitInAnyBranch
-		}
-
 		if err := models.UpdateRepository(repo, false); err != nil {
 			ctx.ServerError("UpdateRepository", err)
 			return
diff --git a/templates/repo/settings/options.tmpl b/templates/repo/settings/options.tmpl
index 9d87101671..f944eb8d8d 100644
--- a/templates/repo/settings/options.tmpl
+++ b/templates/repo/settings/options.tmpl
@@ -221,12 +221,16 @@
 								</div>
 							</div>
 						{{end}}
-							<div class="field">
-								<div class="ui checkbox">
-									<input name="enable_issue_dependencies" type="checkbox" {{if (.Repository.IsDependenciesEnabled)}}checked{{end}}>
-									<label>{{.i18n.Tr "repo.issues.dependency.setting"}}</label>
-								</div>
+						<div class="field">
+							<div class="ui checkbox">
+								<input name="enable_issue_dependencies" type="checkbox" {{if (.Repository.IsDependenciesEnabled)}}checked{{end}}>
+								<label>{{.i18n.Tr "repo.issues.dependency.setting"}}</label>
 							</div>
+						</div>
+						<div class="ui checkbox">
+							<input name="enable_close_issues_via_commit_in_any_branch" type="checkbox" {{ if .Repository.CloseIssuesViaCommitInAnyBranch }}checked{{end}}>
+							<label>{{.i18n.Tr "repo.settings.admin_enable_close_issues_via_commit_in_any_branch"}}</label>
+						</div>
 					</div>
 					<div class="field">
 						{{if .UnitTypeExternalTracker.UnitGlobalDisabled}}
@@ -412,10 +416,6 @@
 						<label>{{.i18n.Tr "repo.settings.admin_enable_health_check"}}</label>
 					</div>
 				</div>
-				<div class="ui checkbox">
-					<input name="enable_close_issues_via_commit_in_any_branch" type="checkbox" {{ if .Repository.CloseIssuesViaCommitInAnyBranch }}checked{{end}}>
-					<label>{{.i18n.Tr "repo.settings.admin_enable_close_issues_via_commit_in_any_branch"}}</label>
-				</div>
 
 				<div class="ui divider"></div>
 				<div class="field">