diff --git a/src/main/resources/update/gitbucket-core_4.22.xml b/src/main/resources/update/gitbucket-core_4.22.xml index 98a3b3d..85dcc10 100644 --- a/src/main/resources/update/gitbucket-core_4.22.xml +++ b/src/main/resources/update/gitbucket-core_4.22.xml @@ -2,5 +2,6 @@ + diff --git a/src/main/scala/gitbucket/core/controller/RepositorySettingsController.scala b/src/main/scala/gitbucket/core/controller/RepositorySettingsController.scala index ffe98c1..b824898 100644 --- a/src/main/scala/gitbucket/core/controller/RepositorySettingsController.scala +++ b/src/main/scala/gitbucket/core/controller/RepositorySettingsController.scala @@ -40,7 +40,8 @@ wikiOption: String, externalWikiUrl: Option[String], allowFork: Boolean, - mergeOptions: Seq[String] + mergeOptions: Seq[String], + defaultMergeOption: String ) val optionsForm = mapping( @@ -52,15 +53,13 @@ "wikiOption" -> trim(label("Wiki Option" , text(required, featureOption))), "externalWikiUrl" -> trim(label("External Wiki URL" , optional(text(maxlength(200))))), "allowFork" -> trim(label("Allow Forking" , boolean())), - "mergeOptions" -> new ValueType[Seq[String]]{ - override def convert(name: String, params: Map[String, Seq[String]], messages: Messages): Seq[String] = - params.get("mergeOptions").getOrElse(Nil) - override def validate(name: String, params: Map[String, Seq[String]], messages: Messages): Seq[(String, String)] = - if(params.get("mergeOptions").getOrElse(Nil).isEmpty) Seq("mergeOptions" -> "At least one option must be enabled.") else Nil - }, - )(OptionsForm.apply) - - + "mergeOptions" -> mergeOptions, + "defaultMergeOption" -> trim(label("Default merge strategy", text(required))) + )(OptionsForm.apply).verifying { form => + if(!form.mergeOptions.contains(form.defaultMergeOption)){ + Seq("defaultMergeOption" -> s"This merge strategy isn't enabled.") + } else Nil + } // for default branch case class DefaultBranchForm(defaultBranch: String) @@ -128,7 +127,8 @@ form.wikiOption, form.externalWikiUrl, form.allowFork, - form.mergeOptions + form.mergeOptions, + form.defaultMergeOption ) // Change repository name if(repository.name != form.repositoryName){ @@ -509,4 +509,21 @@ } } } + + private def mergeOptions = new ValueType[Seq[String]]{ + override def convert(name: String, params: Map[String, Seq[String]], messages: Messages): Seq[String] = { + params.get("mergeOptions").getOrElse(Nil) + } + override def validate(name: String, params: Map[String, Seq[String]], messages: Messages): Seq[(String, String)] = { + val mergeOptions = params.get("mergeOptions").getOrElse(Nil) + if(mergeOptions.isEmpty){ + Seq("mergeOptions" -> "At least one option must be enabled.") + } else if(!mergeOptions.forall(x => Seq("merge-commit", "squash", "rebase").contains(x))){ + Seq("mergeOptions" -> "mergeOptions are invalid.") + } else { + Nil + } + } + } + } diff --git a/src/main/scala/gitbucket/core/model/Repository.scala b/src/main/scala/gitbucket/core/model/Repository.scala index 1e06a39..5a24c35 100644 --- a/src/main/scala/gitbucket/core/model/Repository.scala +++ b/src/main/scala/gitbucket/core/model/Repository.scala @@ -23,11 +23,12 @@ val externalWikiUrl = column[String]("EXTERNAL_WIKI_URL") val allowFork = column[Boolean]("ALLOW_FORK") val mergeOptions = column[String]("MERGE_OPTIONS") + val defaultMergeOption = column[String]("DEFAULT_MERGE_OPTION") def * = ( (userName, repositoryName, isPrivate, description.?, defaultBranch, registeredDate, updatedDate, lastActivityDate, originUserName.?, originRepositoryName.?, parentUserName.?, parentRepositoryName.?), - (issuesOption, externalIssuesUrl.?, wikiOption, externalWikiUrl.?, allowFork, mergeOptions) + (issuesOption, externalIssuesUrl.?, wikiOption, externalWikiUrl.?, allowFork, mergeOptions, defaultMergeOption) ).shaped <> ( { case (repository, options) => Repository( @@ -90,5 +91,6 @@ wikiOption: String, externalWikiUrl: Option[String], allowFork: Boolean, - mergeOptions: String + mergeOptions: String, + defaultMergeOption: String ) diff --git a/src/main/scala/gitbucket/core/service/RepositoryService.scala b/src/main/scala/gitbucket/core/service/RepositoryService.scala index 34bb954..fd7da44 100644 --- a/src/main/scala/gitbucket/core/service/RepositoryService.scala +++ b/src/main/scala/gitbucket/core/service/RepositoryService.scala @@ -47,7 +47,8 @@ wikiOption = "PUBLIC", // TODO DISABLE for the forked repository? externalWikiUrl = None, allowFork = true, - mergeOptions = "merge-commit,squash,rebase" + mergeOptions = "merge-commit,squash,rebase", + defaultMergeOption = "merge-commit" ) ) @@ -365,7 +366,7 @@ */ def saveRepositoryOptions(userName: String, repositoryName: String, description: Option[String], isPrivate: Boolean, issuesOption: String, externalIssuesUrl: Option[String], wikiOption: String, externalWikiUrl: Option[String], - allowFork: Boolean, mergeOptions: Seq[String])(implicit s: Session): Unit = { + allowFork: Boolean, mergeOptions: Seq[String], defaultMergeOption: String)(implicit s: Session): Unit = { Repositories.filter(_.byRepository(userName, repositoryName)) .map { r => ( @@ -377,6 +378,7 @@ r.externalWikiUrl.?, r.allowFork, r.mergeOptions, + r.defaultMergeOption, r.updatedDate ) } .update ( @@ -388,6 +390,7 @@ externalWikiUrl, allowFork, mergeOptions.mkString(","), + defaultMergeOption, currentDate ) } diff --git a/src/main/twirl/gitbucket/core/pulls/mergeguide.scala.html b/src/main/twirl/gitbucket/core/pulls/mergeguide.scala.html index e80e60c..78e21fa 100644 --- a/src/main/twirl/gitbucket/core/pulls/mergeguide.scala.html +++ b/src/main/twirl/gitbucket/core/pulls/mergeguide.scala.html @@ -143,48 +143,48 @@
- @defining(originRepository.repository.options.mergeOptions.split(",")){ mergeOptions =>
- +
- }
diff --git a/src/main/twirl/gitbucket/core/settings/options.scala.html b/src/main/twirl/gitbucket/core/settings/options.scala.html index 4e39f8e..b024c55 100644 --- a/src/main/twirl/gitbucket/core/settings/options.scala.html +++ b/src/main/twirl/gitbucket/core/settings/options.scala.html @@ -117,30 +117,39 @@
Select pull request merge strategies which are available in this repository. At least one option must be enabled.
- @defining(repository.repository.options.mergeOptions.split(",")){ mergeOptions => -
- -
-
- -
-
- -
- - } + @defining(repository.repository.options.mergeOptions.split(",")){ mergeOptions => +
+ +
+
+ +
+
+ +
+ + } +
+ + + +