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 @@
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.