From a56f76649782a071d559297e682e8ba7cf839221 Mon Sep 17 00:00:00 2001 From: nazoking Date: Sat, 14 Nov 2015 13:16:13 +0900 Subject: [PATCH 1/8] fix lost web hook events on repository renamed. --- .../scala/gitbucket/core/service/RepositoryService.scala | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/scala/gitbucket/core/service/RepositoryService.scala b/src/main/scala/gitbucket/core/service/RepositoryService.scala index 6c3263f56..971ff4abd 100644 --- a/src/main/scala/gitbucket/core/service/RepositoryService.scala +++ b/src/main/scala/gitbucket/core/service/RepositoryService.scala @@ -47,6 +47,7 @@ trait RepositoryService { self: AccountService => Repositories insert repository.copy(userName = newUserName, repositoryName = newRepositoryName) val webHooks = WebHooks .filter(_.byRepository(oldUserName, oldRepositoryName)).list + val webHookEvents = WebHookEvents .filter(_.byRepository(oldUserName, oldRepositoryName)).list val milestones = Milestones .filter(_.byRepository(oldUserName, oldRepositoryName)).list val issueId = IssueId .filter(_.byRepository(oldUserName, oldRepositoryName)).list val issues = Issues .filter(_.byRepository(oldUserName, oldRepositoryName)).list @@ -75,9 +76,10 @@ trait RepositoryService { self: AccountService => deleteRepository(oldUserName, oldRepositoryName) - WebHooks .insertAll(webHooks .map(_.copy(userName = newUserName, repositoryName = newRepositoryName)) :_*) - Milestones.insertAll(milestones .map(_.copy(userName = newUserName, repositoryName = newRepositoryName)) :_*) - IssueId .insertAll(issueId .map(_.copy(_1 = newUserName, _2 = newRepositoryName)) :_*) + WebHooks .insertAll(webHooks .map(_.copy(userName = newUserName, repositoryName = newRepositoryName)) :_*) + WebHookEvents.insertAll(webHookEvents .map(_.copy(userName = newUserName, repositoryName = newRepositoryName)) :_*) + Milestones .insertAll(milestones .map(_.copy(userName = newUserName, repositoryName = newRepositoryName)) :_*) + IssueId .insertAll(issueId .map(_.copy(_1 = newUserName, _2 = newRepositoryName)) :_*) val newMilestones = Milestones.filter(_.byRepository(newUserName, newRepositoryName)).list Issues.insertAll(issues.map { x => x.copy( @@ -146,6 +148,7 @@ trait RepositoryService { self: AccountService => IssueId .filter(_.byRepository(userName, repositoryName)).delete Milestones .filter(_.byRepository(userName, repositoryName)).delete WebHooks .filter(_.byRepository(userName, repositoryName)).delete + WebHookEvents .filter(_.byRepository(userName, repositoryName)).delete Repositories .filter(_.byRepository(userName, repositoryName)).delete // Update ORIGIN_USER_NAME and ORIGIN_REPOSITORY_NAME From 3b6d0065a2ec6a3c2f904b7ea3fb66b3f1a1b412 Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Tue, 17 Nov 2015 01:48:13 +0900 Subject: [PATCH 2/8] Once delete editHooks.scala.html to rename --- .../core/settings/editHooks.scala.html | 165 ------------------ 1 file changed, 165 deletions(-) delete mode 100644 src/main/twirl/gitbucket/core/settings/editHooks.scala.html diff --git a/src/main/twirl/gitbucket/core/settings/editHooks.scala.html b/src/main/twirl/gitbucket/core/settings/editHooks.scala.html deleted file mode 100644 index 85f453fcc..000000000 --- a/src/main/twirl/gitbucket/core/settings/editHooks.scala.html +++ /dev/null @@ -1,165 +0,0 @@ -@(webHook: gitbucket.core.model.WebHook, - events: Set[gitbucket.core.model.WebHook.Event], - repository: gitbucket.core.service.RepositoryService.RepositoryInfo, - info: Option[Any], - create: Boolean)(implicit context: gitbucket.core.controller.Context) -@import context._ -@import gitbucket.core.view.helpers._ -@import gitbucket.core.model.WebHook._ -@check(name: String, event: Event)={ -name="@(name).@event.name" value="on" @if(events(event)){checked} -} -@html.main("Settings", Some(repository)){ - @html.menu("settings", repository){ - @menu("hooks", repository){ - @helper.html.information(info) - -
-
- Webhook / Manage webhook -
-
-
-
- -
- - @if(create){ - - }else{ - - - } - - -
-
- -
- - - - - - -
- @if(!create){ - - - Delete webhook - - }else{ - - } -
-
-
- - - } - } -} - From fd2f3e252c4ca4880f04ff420aa49b4a75091eb4 Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Tue, 17 Nov 2015 01:51:55 +0900 Subject: [PATCH 3/8] Fix webhook editing presentation and performance issue --- .../RepositorySettingsController.scala | 19 +- .../core/settings/edithooks.scala.html | 164 ++++++++++++++++++ .../gitbucket/core/settings/hooks.scala.html | 6 +- 3 files changed, 178 insertions(+), 11 deletions(-) create mode 100644 src/main/twirl/gitbucket/core/settings/edithooks.scala.html diff --git a/src/main/scala/gitbucket/core/controller/RepositorySettingsController.scala b/src/main/scala/gitbucket/core/controller/RepositorySettingsController.scala index 916f6d47d..1463a9af5 100644 --- a/src/main/scala/gitbucket/core/controller/RepositorySettingsController.scala +++ b/src/main/scala/gitbucket/core/controller/RepositorySettingsController.scala @@ -47,7 +47,7 @@ trait RepositorySettingsControllerBase extends ControllerBase { case class WebHookForm(url: String, events: Set[WebHook.Event]) def webHookForm(update:Boolean) = mapping( - "url" -> trim(label("url", text(required, webHook(update)))), + "url" -> trim(label("url", text(required, webHook(update)))), "events" -> webhookEvents )(WebHookForm.apply) @@ -149,7 +149,7 @@ trait RepositorySettingsControllerBase extends ControllerBase { */ get("/:owner/:repository/settings/hooks/new")(ownerOnly { repository => val webhook = WebHook(repository.owner, repository.name, "") - html.editHooks(webhook, Set(WebHook.Push), repository, flash.get("info"), true) + html.edithooks(webhook, Set(WebHook.Push), repository, flash.get("info"), true) }) /** @@ -226,7 +226,7 @@ trait RepositorySettingsControllerBase extends ControllerBase { */ get("/:owner/:repository/settings/hooks/edit/:url")(ownerOnly { repository => getWebHook(repository.owner, repository.name, params("url")).map{ case (webhook, events) => - html.editHooks(webhook, events, repository, flash.get("info"), false) + html.edithooks(webhook, events, repository, flash.get("info"), false) } getOrElse NotFound }) @@ -290,7 +290,7 @@ trait RepositorySettingsControllerBase extends ControllerBase { if(getWebHook(params("owner"), params("repository"), value).isDefined != needExists){ Some(if(needExists){ "URL had not been registered yet." - }else{ + } else { "URL had been registered already." }) } else { @@ -299,12 +299,15 @@ trait RepositorySettingsControllerBase extends ControllerBase { } private def webhookEvents = new ValueType[Set[WebHook.Event]]{ - def convert(name: String, params: Map[String, String], messages: Messages): Set[WebHook.Event] = WebHook.Event.values.flatMap{ t => - params.get(name+"."+t.name).map(_ => t) - }.toSet + def convert(name: String, params: Map[String, String], messages: Messages): Set[WebHook.Event] = { + val map = params.toSeq.toMap // TODO This transformation will be unnecessary after upgrading to scalatra 2.4 and scalatra-forms 0.2 + WebHook.Event.values.flatMap { t => + map.get(name + "." + t.name).map(_ => t) + }.toSet + } def validate(name: String, params: Map[String, String], messages: Messages): Seq[(String, String)] = if(convert(name,params,messages).isEmpty){ Seq(name -> messages("error.required").format(name)) - }else{ + } else { Nil } } diff --git a/src/main/twirl/gitbucket/core/settings/edithooks.scala.html b/src/main/twirl/gitbucket/core/settings/edithooks.scala.html new file mode 100644 index 000000000..567d185ab --- /dev/null +++ b/src/main/twirl/gitbucket/core/settings/edithooks.scala.html @@ -0,0 +1,164 @@ +@(webHook: gitbucket.core.model.WebHook, + events: Set[gitbucket.core.model.WebHook.Event], + repository: gitbucket.core.service.RepositoryService.RepositoryInfo, + info: Option[Any], + create: Boolean)(implicit context: gitbucket.core.controller.Context) +@import context._ +@import gitbucket.core.view.helpers._ +@import gitbucket.core.model.WebHook._ +@check(name: String, event: Event)={ + name="@(name).@event.name" value="on" @if(events(event)){checked} +} +@html.main("Settings", Some(repository)){ + @html.menu("settings", repository){ + @menu("hooks", repository){ + @helper.html.information(info) + +
+
+ Webhook / Manage webhook +
+
+
+
+ +
+ + @if(create){ + + } else { + + + } + + +
+
+ +
+ + + + + + +
+ @if(!create){ + + + Delete webhook + + } else { + + } +
+
+
+ + + } + } +} diff --git a/src/main/twirl/gitbucket/core/settings/hooks.scala.html b/src/main/twirl/gitbucket/core/settings/hooks.scala.html index aacf4a536..1ddcf935c 100644 --- a/src/main/twirl/gitbucket/core/settings/hooks.scala.html +++ b/src/main/twirl/gitbucket/core/settings/hooks.scala.html @@ -10,10 +10,10 @@
- Add webhook + Add webhook Webhooks
-
+

Webhooks allow external services to be notified when certain events happen within your repository. When the specified events happen, we’ll send a POST request to each of the URLs you provide. @@ -28,7 +28,7 @@ (@events.map(_.name).mkString(", ")) -

+
From abfc6eea1e5f2c3ccf4ba02f63e4ffc3ddcf6ac4 Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Tue, 17 Nov 2015 01:52:14 +0900 Subject: [PATCH 4/8] Fix repository setting pages presentation --- src/main/twirl/gitbucket/core/settings/danger.scala.html | 2 +- src/main/twirl/gitbucket/core/settings/options.scala.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/twirl/gitbucket/core/settings/danger.scala.html b/src/main/twirl/gitbucket/core/settings/danger.scala.html index 91ef5782c..260bb0630 100644 --- a/src/main/twirl/gitbucket/core/settings/danger.scala.html +++ b/src/main/twirl/gitbucket/core/settings/danger.scala.html @@ -6,7 +6,7 @@ @menu("danger", repository){
Danger Zone
-
+
diff --git a/src/main/twirl/gitbucket/core/settings/options.scala.html b/src/main/twirl/gitbucket/core/settings/options.scala.html index 1e03356d9..5287cb6ee 100644 --- a/src/main/twirl/gitbucket/core/settings/options.scala.html +++ b/src/main/twirl/gitbucket/core/settings/options.scala.html @@ -8,7 +8,7 @@
Settings
-
+
From 70af6d0c3549aa7f33487bf068816abf9b15867e Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Tue, 17 Nov 2015 16:04:58 +0900 Subject: [PATCH 5/8] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 612bc439f..4bb3a82d1 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,7 @@ GitBucket [![Gitter chat](https://badges.gitter.im/gitbucket/gitbucket.png)](https://gitter.im/gitbucket/gitbucket) [![Build Status](https://travis-ci.org/gitbucket/gitbucket.svg?branch=master)](https://travis-ci.org/gitbucket/gitbucket) ========= -GitBucket is the easily installable GitHub clone powered by Scala. - +GitBucket is a GitHub clone powered by Scala which has easy installation and high extendability. Features -------- From 495d8069f51235ece7fb057a0bcb78d5633ae556 Mon Sep 17 00:00:00 2001 From: uli-heller Date: Tue, 17 Nov 2015 09:51:50 +0100 Subject: [PATCH 6/8] extensibility is probably the right word? --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4bb3a82d1..82fb68596 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ GitBucket [![Gitter chat](https://badges.gitter.im/gitbucket/gitbucket.png)](https://gitter.im/gitbucket/gitbucket) [![Build Status](https://travis-ci.org/gitbucket/gitbucket.svg?branch=master)](https://travis-ci.org/gitbucket/gitbucket) ========= -GitBucket is a GitHub clone powered by Scala which has easy installation and high extendability. +GitBucket is a GitHub clone powered by Scala which has easy installation and high extensibility. Features -------- From 121110aedebf5c413e3fbbe992870184bcd5eed9 Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Tue, 17 Nov 2015 23:19:08 +0900 Subject: [PATCH 7/8] Fix markdown header style --- src/main/twirl/gitbucket/core/repo/blob.scala.html | 2 +- src/main/twirl/gitbucket/core/repo/editor.scala.html | 2 +- src/main/twirl/gitbucket/core/repo/files.scala.html | 2 +- src/main/webapp/assets/common/css/gitbucket.css | 4 +--- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/twirl/gitbucket/core/repo/blob.scala.html b/src/main/twirl/gitbucket/core/repo/blob.scala.html index 9b3beade8..596a74ade 100644 --- a/src/main/twirl/gitbucket/core/repo/blob.scala.html +++ b/src/main/twirl/gitbucket/core/repo/blob.scala.html @@ -69,7 +69,7 @@ @if(content.viewType == "text"){ @defining(isRenderable(pathList.reverse.head)){ isRrenderable => @if(!isBlame && isRrenderable) { -
+
@renderMarkup(pathList, content.content.get, branch, repository, false, false, true)
} else { diff --git a/src/main/twirl/gitbucket/core/repo/editor.scala.html b/src/main/twirl/gitbucket/core/repo/editor.scala.html index fc5b7c6a8..0bbc1f00f 100644 --- a/src/main/twirl/gitbucket/core/repo/editor.scala.html +++ b/src/main/twirl/gitbucket/core/repo/editor.scala.html @@ -130,7 +130,7 @@ $(function(){ enableTaskList : false }, function(data){ $('#preview').empty().append( - $('
').html(data)); + $('
').html(data)); prettyPrint(); }); } else { diff --git a/src/main/twirl/gitbucket/core/repo/files.scala.html b/src/main/twirl/gitbucket/core/repo/files.scala.html index dbfaec242..3f1c7e390 100644 --- a/src/main/twirl/gitbucket/core/repo/files.scala.html +++ b/src/main/twirl/gitbucket/core/repo/files.scala.html @@ -127,7 +127,7 @@ @readme.map { case(filePath, content) =>
@filePath.reverse.head
-
@renderMarkup(filePath, content, branch, repository, false, false, true)
+
@renderMarkup(filePath, content, branch, repository, false, false, true)
} } diff --git a/src/main/webapp/assets/common/css/gitbucket.css b/src/main/webapp/assets/common/css/gitbucket.css index cc9f069c2..570230e61 100644 --- a/src/main/webapp/assets/common/css/gitbucket.css +++ b/src/main/webapp/assets/common/css/gitbucket.css @@ -1690,15 +1690,13 @@ div.markdown-body table colgroup + tbody tr:first-child td:last-child { } .markdown-head { - left: -18px; - padding-left: 18px; position: relative; line-height: 1.7; } a.markdown-anchor-link { position: absolute; - left: 0px; + left: -18px; display: none; color: #999; /* From octicon style */ From 446a524b5a42719bbc4db0e69b3738064badc6a0 Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Wed, 18 Nov 2015 01:48:40 +0900 Subject: [PATCH 8/8] Upgrade scalatra-forms to 0.2.0 to solve performance issue --- project/build.scala | 2 +- .../core/controller/RepositorySettingsController.scala | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/project/build.scala b/project/build.scala index a311c75da..3fe611163 100644 --- a/project/build.scala +++ b/project/build.scala @@ -49,7 +49,7 @@ object MyBuild extends Build { "org.scalatra" %% "scalatra-specs2" % ScalatraVersion % "test", "org.scalatra" %% "scalatra-json" % ScalatraVersion, "org.json4s" %% "json4s-jackson" % "3.2.11", - "jp.sf.amateras" %% "scalatra-forms" % "0.1.0", + "jp.sf.amateras" %% "scalatra-forms" % "0.2.0", "commons-io" % "commons-io" % "2.4", "io.github.gitbucket" % "markedj" % "1.0.5-SNAPSHOT", "org.apache.commons" % "commons-compress" % "1.9", diff --git a/src/main/scala/gitbucket/core/controller/RepositorySettingsController.scala b/src/main/scala/gitbucket/core/controller/RepositorySettingsController.scala index 1463a9af5..883259bc7 100644 --- a/src/main/scala/gitbucket/core/controller/RepositorySettingsController.scala +++ b/src/main/scala/gitbucket/core/controller/RepositorySettingsController.scala @@ -300,9 +300,8 @@ trait RepositorySettingsControllerBase extends ControllerBase { private def webhookEvents = new ValueType[Set[WebHook.Event]]{ def convert(name: String, params: Map[String, String], messages: Messages): Set[WebHook.Event] = { - val map = params.toSeq.toMap // TODO This transformation will be unnecessary after upgrading to scalatra 2.4 and scalatra-forms 0.2 WebHook.Event.values.flatMap { t => - map.get(name + "." + t.name).map(_ => t) + params.get(name + "." + t.name).map(_ => t) }.toSet } def validate(name: String, params: Map[String, String], messages: Messages): Seq[(String, String)] = if(convert(name,params,messages).isEmpty){