From 3732963d4baecc0f0ee790fa11d64c939083ea58 Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Sat, 28 Feb 2015 03:40:02 +0900 Subject: [PATCH 01/25] Add image API for plug-in --- etc/deploy-assemby-jar.sh | 0 src/main/scala/plugin/Images.scala | 10 ++++++++++ src/main/scala/plugin/PluginRegistory.scala | 18 +++++++++++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) mode change 100644 => 100755 etc/deploy-assemby-jar.sh create mode 100644 src/main/scala/plugin/Images.scala diff --git a/etc/deploy-assemby-jar.sh b/etc/deploy-assemby-jar.sh old mode 100644 new mode 100755 diff --git a/src/main/scala/plugin/Images.scala b/src/main/scala/plugin/Images.scala new file mode 100644 index 000000000..b569f0723 --- /dev/null +++ b/src/main/scala/plugin/Images.scala @@ -0,0 +1,10 @@ +package plugin + +/** + * Provides a helper method to generate data URI of images registered by plug-in. + */ +object Images { + + def dataURI(id: String) = s"data:image/png;base64,${PluginRegistry().getImage(id)}" + +} diff --git a/src/main/scala/plugin/PluginRegistory.scala b/src/main/scala/plugin/PluginRegistory.scala index bb7c2cb3b..ebdf7dbef 100644 --- a/src/main/scala/plugin/PluginRegistory.scala +++ b/src/main/scala/plugin/PluginRegistory.scala @@ -1,16 +1,19 @@ package plugin -import java.io.{FilenameFilter, File} +import java.io.{InputStream, FilenameFilter, File} import java.net.URLClassLoader import javax.servlet.ServletContext import javax.servlet.http.{HttpServletRequest, HttpServletResponse} import org.slf4j.LoggerFactory +import org.apache.commons.codec.binary.{StringUtils, Base64} import service.RepositoryService.RepositoryInfo import util.Directory._ import util.JDBCUtil._ +import util.ControlUtil._ import util.{Version, Versions} +import scala.collection.mutable import scala.collection.mutable.ListBuffer import app.{ControllerBase, Context} @@ -19,6 +22,7 @@ class PluginRegistry { private val plugins = new ListBuffer[PluginInfo] private val javaScripts = new ListBuffer[(String, String)] private val controllers = new ListBuffer[(ControllerBase, String)] + private val images = mutable.Map[String, String]() def addPlugin(pluginInfo: PluginInfo): Unit = { plugins += pluginInfo @@ -26,6 +30,18 @@ class PluginRegistry { def getPlugins(): List[PluginInfo] = plugins.toList + def addImage(id: String, in: InputStream): Unit = { + val bytes = using(in){ in => + val bytes = new Array[Byte](in.available) + in.read(bytes) + bytes + } + val encoded = StringUtils.newStringUtf8(Base64.encodeBase64(bytes, false)) + images += ((id, encoded)) + } + + def getImage(id: String): String = images(id) + def addController(controller: ControllerBase, path: String): Unit = { controllers += ((controller, path)) } From 0a6e50cbbe35f3a1cf7e33bfd1b907fcc3583e1e Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Sat, 28 Feb 2015 12:43:50 +0900 Subject: [PATCH 02/25] Compare view supports diff for commit id, not only branch name --- .../scala/app/PullRequestsController.scala | 29 ++++++++++--------- src/main/twirl/pulls/commits.scala.html | 2 +- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/main/scala/app/PullRequestsController.scala b/src/main/scala/app/PullRequestsController.scala index 23ed289c0..675778b98 100644 --- a/src/main/scala/app/PullRequestsController.scala +++ b/src/main/scala/app/PullRequestsController.scala @@ -242,8 +242,8 @@ trait PullRequestsControllerBase extends ControllerBase { get("/:owner/:repository/compare/*...*")(referrersOnly { forkedRepository => val Seq(origin, forked) = multiParams("splat") - val (originOwner, tmpOriginBranch) = parseCompareIdentifie(origin, forkedRepository.owner) - val (forkedOwner, tmpForkedBranch) = parseCompareIdentifie(forked, forkedRepository.owner) + val (originOwner, originId) = parseCompareIdentifie(origin, forkedRepository.owner) + val (forkedOwner, forkedId) = parseCompareIdentifie(forked, forkedRepository.owner) (for( originRepositoryName <- if(originOwner == forkedOwner){ @@ -259,15 +259,18 @@ trait PullRequestsControllerBase extends ControllerBase { Git.open(getRepositoryDir(originRepository.owner, originRepository.name)), Git.open(getRepositoryDir(forkedRepository.owner, forkedRepository.name)) ){ case (oldGit, newGit) => - val originBranch = JGitUtil.getDefaultBranch(oldGit, originRepository, tmpOriginBranch).get._2 - val forkedBranch = JGitUtil.getDefaultBranch(newGit, forkedRepository, tmpForkedBranch).get._2 - - val forkedId = JGitUtil.getForkedCommitId(oldGit, newGit, - originRepository.owner, originRepository.name, originBranch, - forkedRepository.owner, forkedRepository.name, forkedBranch) - - val oldId = oldGit.getRepository.resolve(forkedId) - val newId = newGit.getRepository.resolve(forkedBranch) + val (oldId, newId) = + if(originRepository.branchList.contains(originId) && forkedRepository.branchList.contains(forkedId)){ + // Branch name + val forkedId = JGitUtil.getForkedCommitId(oldGit, newGit, + originRepository.owner, originRepository.name, originId, + forkedRepository.owner, forkedRepository.name, forkedId) + + (oldGit.getRepository.resolve(forkedId), newGit.getRepository.resolve(forkedId)) + } else { + // Commit id + (oldGit.getRepository.resolve(originId), newGit.getRepository.resolve(forkedId)) + } val (commits, diffs) = getRequestCompareInfo( originRepository.owner, originRepository.name, oldId.getName, @@ -281,8 +284,8 @@ trait PullRequestsControllerBase extends ControllerBase { case _ => (forkedRepository.owner, forkedRepository.name) :: getForkedRepositories(forkedRepository.owner, forkedRepository.name) }, commits.flatten.map(commit => getCommitComments(forkedRepository.owner, forkedRepository.name, commit.id, false)).flatten.toList, - originBranch, - forkedBranch, + originId, + forkedId, oldId.getName, newId.getName, forkedRepository, diff --git a/src/main/twirl/pulls/commits.scala.html b/src/main/twirl/pulls/commits.scala.html index 2d729b5b9..a81588f65 100644 --- a/src/main/twirl/pulls/commits.scala.html +++ b/src/main/twirl/pulls/commits.scala.html @@ -7,7 +7,7 @@ @commits.map { day => - + @day.map { commit => From e2c6658e59c6b19f0a0c80a42475d7cd739ebd78 Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Sat, 28 Feb 2015 12:47:06 +0900 Subject: [PATCH 03/25] Fix compilation error --- src/main/scala/app/PullRequestsController.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/scala/app/PullRequestsController.scala b/src/main/scala/app/PullRequestsController.scala index 675778b98..84987b105 100644 --- a/src/main/scala/app/PullRequestsController.scala +++ b/src/main/scala/app/PullRequestsController.scala @@ -262,11 +262,11 @@ trait PullRequestsControllerBase extends ControllerBase { val (oldId, newId) = if(originRepository.branchList.contains(originId) && forkedRepository.branchList.contains(forkedId)){ // Branch name - val forkedId = JGitUtil.getForkedCommitId(oldGit, newGit, + val rootId = JGitUtil.getForkedCommitId(oldGit, newGit, originRepository.owner, originRepository.name, originId, forkedRepository.owner, forkedRepository.name, forkedId) - - (oldGit.getRepository.resolve(forkedId), newGit.getRepository.resolve(forkedId)) + + (oldGit.getRepository.resolve(rootId), newGit.getRepository.resolve(forkedId)) } else { // Commit id (oldGit.getRepository.resolve(originId), newGit.getRepository.resolve(forkedId)) From 6067fa0fca68261e4b798959bc1deb0ed6d7fd6b Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Sat, 28 Feb 2015 12:47:52 +0900 Subject: [PATCH 04/25] Fix broken layout of Wiki compare view --- src/main/twirl/wiki/compare.scala.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/twirl/wiki/compare.scala.html b/src/main/twirl/wiki/compare.scala.html index 50dd99ea9..e5462fc60 100644 --- a/src/main/twirl/wiki/compare.scala.html +++ b/src/main/twirl/wiki/compare.scala.html @@ -15,7 +15,7 @@
  • Compare Revisions

  • -
  • +
  • @if(pageName.isDefined){ View Page From c004d501f65493823f9435813f7641593314c2a8 Mon Sep 17 00:00:00 2001 From: shimamoto Date: Sun, 1 Mar 2015 23:38:08 +0900 Subject: [PATCH 05/25] (refs #632) Implement all the check of javascript. --- src/main/twirl/issues/list.scala.html | 9 ++++++++- src/main/twirl/issues/listparts.scala.html | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/twirl/issues/list.scala.html b/src/main/twirl/issues/list.scala.html index b1e36b3fc..7c3a39683 100644 --- a/src/main/twirl/issues/list.scala.html +++ b/src/main/twirl/issues/list.scala.html @@ -48,10 +48,17 @@ $(function(){ }); $('.table-issues input[type=checkbox]').change(function(){ - if($('.table-issues input[type=checkbox]').filter(':checked').length == 0){ + var count = $('.table-issues input[type=checkbox]').filter(':checked').length; + if(count == 0){ $('#table-issues-control').show(); $('#table-issues-batchedit').hide(); } else { + if($(this).val() == 'all'){ + var flag = $(this).is(":checked"); + $('.table-issues input[type=checkbox]').each(function(){ + $(this).prop("checked", flag); + }); + } $('#table-issues-control').hide(); $('#table-issues-batchedit').show(); } diff --git a/src/main/twirl/issues/listparts.scala.html b/src/main/twirl/issues/listparts.scala.html index 6c9378932..97af4c719 100644 --- a/src/main/twirl/issues/listparts.scala.html +++ b/src/main/twirl/issues/listparts.scala.html @@ -25,7 +25,7 @@
  • @date(day.head.commitTime)@date(day.head.commitTime)
    - + From 5ba0f6d51e6aa4b04f0c1b3444a1f5d9574e2f6e Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Mon, 2 Mar 2015 00:32:59 +0900 Subject: [PATCH 06/25] Generalize Profile for plug-ins as ProfileBase --- src/main/scala/model/Profile.scala | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/scala/model/Profile.scala b/src/main/scala/model/Profile.scala index d7ff17f37..ac5cb9d61 100644 --- a/src/main/scala/model/Profile.scala +++ b/src/main/scala/model/Profile.scala @@ -1,6 +1,6 @@ package model -trait Profile { +trait ProfileBase { val profile: slick.driver.JdbcProfile import profile.simple._ @@ -16,10 +16,8 @@ trait Profile { } -object Profile extends { - val profile = slick.driver.H2Driver - -} with AccountComponent +trait CoreProfile extends ProfileBase + with AccountComponent with ActivityComponent with CollaboratorComponent with CommitCommentComponent @@ -33,7 +31,9 @@ object Profile extends { with RepositoryComponent with SshKeyComponent with WebHookComponent - with PluginComponent with Profile { + with PluginComponent { + + val profile = slick.driver.H2Driver /** * Returns system date. @@ -41,3 +41,5 @@ object Profile extends { def currentDate = new java.util.Date() } + +object Profile extends CoreProfile \ No newline at end of file From 32006e02c0a2036a910ff7428e47e087c8fafb82 Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Mon, 2 Mar 2015 00:45:28 +0900 Subject: [PATCH 07/25] Fix build error --- src/main/scala/model/Profile.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/scala/model/Profile.scala b/src/main/scala/model/Profile.scala index ac5cb9d61..aae4a4662 100644 --- a/src/main/scala/model/Profile.scala +++ b/src/main/scala/model/Profile.scala @@ -1,6 +1,6 @@ package model -trait ProfileBase { +trait Profile { val profile: slick.driver.JdbcProfile import profile.simple._ @@ -16,7 +16,7 @@ trait ProfileBase { } -trait CoreProfile extends ProfileBase +trait ProfileBase extends Profile with AccountComponent with ActivityComponent with CollaboratorComponent @@ -42,4 +42,4 @@ trait CoreProfile extends ProfileBase } -object Profile extends CoreProfile \ No newline at end of file +object Profile extends ProfileBase \ No newline at end of file From 9019d93449e16600ec6910de756b7b7f782338b8 Mon Sep 17 00:00:00 2001 From: shimamoto Date: Mon, 2 Mar 2015 01:21:11 +0900 Subject: [PATCH 08/25] (refs #632) Revert. And remove all checked checkbox. --- src/main/twirl/issues/list.scala.html | 9 +-------- src/main/twirl/issues/listparts.scala.html | 1 - 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/src/main/twirl/issues/list.scala.html b/src/main/twirl/issues/list.scala.html index 7c3a39683..b1e36b3fc 100644 --- a/src/main/twirl/issues/list.scala.html +++ b/src/main/twirl/issues/list.scala.html @@ -48,17 +48,10 @@ $(function(){ }); $('.table-issues input[type=checkbox]').change(function(){ - var count = $('.table-issues input[type=checkbox]').filter(':checked').length; - if(count == 0){ + if($('.table-issues input[type=checkbox]').filter(':checked').length == 0){ $('#table-issues-control').show(); $('#table-issues-batchedit').hide(); } else { - if($(this).val() == 'all'){ - var flag = $(this).is(":checked"); - $('.table-issues input[type=checkbox]').each(function(){ - $(this).prop("checked", flag); - }); - } $('#table-issues-control').hide(); $('#table-issues-batchedit').show(); } diff --git a/src/main/twirl/issues/listparts.scala.html b/src/main/twirl/issues/listparts.scala.html index 97af4c719..6f553d400 100644 --- a/src/main/twirl/issues/listparts.scala.html +++ b/src/main/twirl/issues/listparts.scala.html @@ -25,7 +25,6 @@
    - From 751a8703efbd58694ba76aca362f636ae9b06815 Mon Sep 17 00:00:00 2001 From: shimamoto Date: Mon, 2 Mar 2015 06:31:59 +0900 Subject: [PATCH 09/25] (refs #632) Implement all the check of javascript. --- src/main/twirl/issues/list.scala.html | 24 ++- src/main/twirl/issues/listparts.scala.html | 193 +++++++++++---------- 2 files changed, 115 insertions(+), 102 deletions(-) diff --git a/src/main/twirl/issues/list.scala.html b/src/main/twirl/issues/list.scala.html index 7c3a39683..dc727749d 100644 --- a/src/main/twirl/issues/list.scala.html +++ b/src/main/twirl/issues/list.scala.html @@ -48,24 +48,32 @@ $(function(){ }); $('.table-issues input[type=checkbox]').change(function(){ - var count = $('.table-issues input[type=checkbox]').filter(':checked').length; + var all = $('.table-issues input[type=checkbox][value]'); + + // check all + if($(this).val() == 'on'){ + var flag = $(this).is(":checked"); + all.each(function(){ + $(this).prop("checked", flag); + }); + } + + var count = all.filter(':checked').length; + // whether all check + $('.table-issues input[type=checkbox]').filter(':first').prop("checked", count > 0 && count == all.length); + if(count == 0){ $('#table-issues-control').show(); $('#table-issues-batchedit').hide(); } else { - if($(this).val() == 'all'){ - var flag = $(this).is(":checked"); - $('.table-issues input[type=checkbox]').each(function(){ - $(this).prop("checked", flag); - }); - } + $('#batchedit-selected').text(count); $('#table-issues-control').hide(); $('#table-issues-batchedit').show(); } }).filter(':first').change(); var submitBatchEdit = function(action, value) { - var checked = $('.table-issues input[type=checkbox]').filter(':checked').map(function(){ return this.value; }).get().join(); + var checked = $('.table-issues input[type=checkbox][value]').filter(':checked').map(function(){ return this.value; }).get().join(); var form = $('#batcheditForm'); form.find('input[name=value]').val(value); form.find('input[name=checked]').val(checked); diff --git a/src/main/twirl/issues/listparts.scala.html b/src/main/twirl/issues/listparts.scala.html index 97af4c719..175be35ef 100644 --- a/src/main/twirl/issues/listparts.scala.html +++ b/src/main/twirl/issues/listparts.scala.html @@ -25,8 +25,10 @@ From d495b04d859b637830349c17f028c58df3b7f59f Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Mon, 2 Mar 2015 16:59:32 +0900 Subject: [PATCH 10/25] Change package name --- project/build.scala | 3 +- .../{ => gitbucket/core}/util/PatchUtil.java | 2 +- src/main/scala/ScalatraBootstrap.scala | 10 ++-- .../core/controller}/AccountController.scala | 41 +++++++------ .../AnonymousAccessController.scala | 2 +- .../core/controller}/ControllerBase.scala | 18 +++--- .../controller}/DashboardController.scala | 15 ++--- .../controller}/FileUploadController.scala | 8 +-- .../core/controller}/IndexController.scala | 15 +++-- .../core/controller}/IssuesController.scala | 37 ++++++------ .../core/controller}/LabelsController.scala | 19 +++--- .../controller}/MilestonesController.scala | 16 ++--- .../controller}/PullRequestsController.scala | 36 ++++++------ .../RepositorySettingsController.scala | 28 ++++----- .../RepositoryViewerController.scala | 58 ++++++++++--------- .../core/controller}/SearchController.scala | 11 ++-- .../SystemSettingsController.scala | 11 ++-- .../UserManagementController.scala | 25 ++++---- .../core/controller}/WikiController.scala | 32 +++++----- .../{ => gitbucket/core}/model/Account.scala | 2 +- .../{ => gitbucket/core}/model/Activity.scala | 2 +- .../core}/model/BasicTemplate.scala | 2 +- .../core}/model/Collaborator.scala | 2 +- .../{ => gitbucket/core}/model/Comment.scala | 2 +- .../core}/model/GroupMembers.scala | 2 +- .../{ => gitbucket/core}/model/Issue.scala | 2 +- .../core}/model/IssueLabels.scala | 2 +- .../{ => gitbucket/core}/model/Labels.scala | 2 +- .../core}/model/Milestone.scala | 2 +- .../{ => gitbucket/core}/model/Plugin.scala | 2 +- .../{ => gitbucket/core}/model/Profile.scala | 17 +++--- .../core}/model/PullRequest.scala | 2 +- .../core}/model/Repository.scala | 2 +- .../{ => gitbucket/core}/model/SshKey.scala | 2 +- .../{ => gitbucket/core}/model/WebHook.scala | 2 +- .../{ => gitbucket/core}/model/package.scala | 2 + .../{ => gitbucket/core}/plugin/Images.scala | 2 +- .../{ => gitbucket/core}/plugin/Plugin.scala | 6 +- .../core}/plugin/PluginRegistory.scala | 18 +++--- .../{ => gitbucket/core}/plugin/Results.scala | 2 +- .../core}/plugin/Sessions.scala | 4 +- .../core}/service/AccountService.scala | 16 ++--- .../core}/service/ActivityService.scala | 13 +++-- .../core}/service/CommitsService.scala | 13 +++-- .../core}/service/IssuesService.scala | 10 ++-- .../core}/service/LabelsService.scala | 6 +- .../core}/service/MilestonesService.scala | 10 ++-- .../core}/service/PluginService.scala | 6 +- .../core}/service/PullRequestService.scala | 8 +-- .../service/RepositorySearchService.scala | 14 +++-- .../core}/service/RepositoryService.scala | 10 ++-- .../core}/service/RequestCache.scala | 19 +++--- .../core}/service/SshKeyService.scala | 6 +- .../core}/service/SystemSettingsService.scala | 7 ++- .../core}/service/WebHookService.scala | 13 +++-- .../core}/service/WikiService.scala | 15 ++--- .../servlet/BasicAuthenticationFilter.scala | 13 ++--- .../core}/servlet/GitRepositoryServlet.scala | 19 +++--- .../core}/servlet/InitializeListener.scala | 16 ++--- .../servlet/SessionCleanupListener.scala | 5 +- .../core}/servlet/TransactionFilter.scala | 5 +- .../{ => gitbucket/core}/ssh/GitCommand.scala | 13 +++-- .../{ => gitbucket/core}/ssh/NoShell.scala | 4 +- .../core}/ssh/PublicKeyAuthenticator.scala | 6 +- .../core}/ssh/SshServerListener.scala | 6 +- .../{ => gitbucket/core}/ssh/SshUtil.scala | 2 +- .../core}/util/Authenticator.scala | 10 ++-- .../core}/util/ControlUtil.scala | 2 +- .../core}/util/DatabaseConfig.scala | 4 +- .../{ => gitbucket/core}/util/Directory.scala | 4 +- .../{ => gitbucket/core}/util/FileUtil.scala | 4 +- .../{ => gitbucket/core}/util/Implicits.scala | 5 +- .../{ => gitbucket/core}/util/JDBCUtil.scala | 4 +- .../{ => gitbucket/core}/util/JGitUtil.scala | 10 ++-- .../{ => gitbucket/core}/util/Keys.scala | 2 +- .../{ => gitbucket/core}/util/LDAPUtil.scala | 10 ++-- .../{ => gitbucket/core}/util/LockUtil.scala | 4 +- .../{ => gitbucket/core}/util/Notifier.scala | 18 +++--- .../core}/util/StringUtil.scala | 6 +- .../core}/util/Validations.scala | 2 +- .../{ => gitbucket/core}/util/Version.scala | 4 +- .../core}/view/AvatarImageProvider.scala | 9 +-- .../core}/view/LinkConverter.scala | 12 ++-- .../{ => gitbucket/core}/view/Markdown.scala | 31 +++++----- .../core}/view/Pagination.scala | 2 +- .../{ => gitbucket/core}/view/helpers.scala | 41 +++++++------ src/main/twirl/error.scala.html | 4 -- .../core}/account/activity.scala.html | 6 +- .../core}/account/edit.scala.html | 6 +- .../core}/account/group.scala.html | 4 +- .../core}/account/main.scala.html | 6 +- .../core}/account/members.scala.html | 4 +- .../core}/account/menu.scala.html | 2 +- .../core}/account/newrepo.scala.html | 4 +- .../core}/account/register.scala.html | 4 +- .../core}/account/repositories.scala.html | 8 +-- .../core}/account/ssh.scala.html | 7 ++- .../core}/admin/menu.scala.html | 2 +- .../core}/admin/system.scala.html | 6 +- .../core}/admin/users/group.scala.html | 4 +- .../core}/admin/users/list.scala.html | 4 +- .../core}/admin/users/user.scala.html | 2 +- .../core}/dashboard/header.scala.html | 6 +- .../core}/dashboard/issues.scala.html | 8 +-- .../core}/dashboard/issueslist.scala.html | 13 +++-- .../core}/dashboard/issuesnavi.scala.html | 4 +- .../core}/dashboard/pulls.scala.html | 8 +-- .../core}/dashboard/tab.scala.html | 4 +- .../twirl/gitbucket/core/error.scala.html | 4 ++ .../core}/helper/account.scala.html | 2 +- .../core}/helper/activities.scala.html | 10 ++-- .../core}/helper/attached.scala.html | 2 +- .../core}/helper/branchcontrol.scala.html | 12 ++-- .../core}/helper/checkicon.scala.html | 0 .../core}/helper/commitcomment.scala.html | 9 +-- .../core}/helper/copy.scala.html | 0 .../core}/helper/datepicker.scala.html | 2 +- .../core}/helper/datetimeago.scala.html | 2 +- .../core}/helper/diff.scala.html | 8 +-- .../core}/helper/dropdown.scala.html | 0 .../core}/helper/error.scala.html | 0 .../core}/helper/feed.scala.xml | 4 +- .../core}/helper/forkrepository.scala.html | 6 +- .../core}/helper/information.scala.html | 0 .../core}/helper/paginator.scala.html | 2 +- .../core}/helper/preview.scala.html | 15 ++++- .../core}/helper/repositoryicon.scala.html | 5 +- .../core}/helper/uploadavatar.scala.html | 2 +- .../{ => gitbucket/core}/index.scala.html | 8 +-- .../core}/issues/commentform.scala.html | 6 +- .../core}/issues/commentlist.scala.html | 15 ++--- .../core}/issues/create.scala.html | 8 +-- .../core}/issues/editcomment.scala.html | 2 +- .../core}/issues/editissue.scala.html | 2 +- .../core}/issues/issue.scala.html | 14 ++--- .../core}/issues/issueinfo.scala.html | 14 ++--- .../core}/issues/labellist.scala.html | 2 +- .../core}/issues/labels/edit.scala.html | 5 +- .../core}/issues/labels/label.scala.html | 8 +-- .../core}/issues/labels/list.scala.html | 10 ++-- .../core}/issues/list.scala.html | 14 ++--- .../core}/issues/listparts.scala.html | 21 +++---- .../core}/issues/milestones/edit.scala.html | 5 +- .../core}/issues/milestones/list.scala.html | 8 +-- .../issues/milestones/progress.scala.html | 0 .../core}/issues/navigation.scala.html | 6 +- .../{ => gitbucket/core}/main.scala.html | 10 ++-- .../{ => gitbucket/core}/menu.scala.html | 9 +-- .../core}/pulls/commits.scala.html | 11 ++-- .../core}/pulls/compare.scala.html | 16 ++--- .../core}/pulls/conversation.scala.html | 18 +++--- .../core}/pulls/mergecheck.scala.html | 0 .../core}/pulls/mergeguide.scala.html | 6 +- .../core}/pulls/pullreq.scala.html | 27 ++++----- .../{ => gitbucket/core}/repo/blob.scala.html | 10 ++-- .../core}/repo/branches.scala.html | 6 +- .../core}/repo/commentform.scala.html | 4 +- .../core}/repo/commit.scala.html | 14 ++--- .../core}/repo/commits.scala.html | 8 +-- .../core}/repo/delete.scala.html | 6 +- .../core}/repo/editcomment.scala.html | 2 +- .../core}/repo/editor.scala.html | 6 +- .../core}/repo/files.scala.html | 10 ++-- .../core}/repo/forked.scala.html | 6 +- .../core}/repo/guide.scala.html | 9 +-- .../{ => gitbucket/core}/repo/tags.scala.html | 4 +- .../core}/search/code.scala.html | 8 +-- .../core}/search/issues.scala.html | 8 +-- .../core}/search/menu.scala.html | 4 +- .../core}/settings/collaborators.scala.html | 4 +- .../core}/settings/danger.scala.html | 4 +- .../core}/settings/hooks.scala.html | 8 +-- .../core}/settings/menu.scala.html | 4 +- .../core}/settings/options.scala.html | 4 +- .../{ => gitbucket/core}/signin.scala.html | 2 +- .../core}/signinform.scala.html | 2 +- .../core}/wiki/compare.scala.html | 9 ++- .../{ => gitbucket/core}/wiki/edit.scala.html | 6 +- .../core}/wiki/history.scala.html | 6 +- .../{ => gitbucket/core}/wiki/page.scala.html | 10 ++-- .../core}/wiki/pages.scala.html | 6 +- src/main/webapp/WEB-INF/web.xml | 8 +-- .../core}/service/AccountServiceSpec.scala | 4 +- .../core}/service/ServiceSpecBase.scala | 13 +++-- .../core}/ssh/GitCommandSpec.scala | 2 +- .../core}/util/StringUtilSpec.scala | 2 +- .../core}/util/ValidationsSpec.scala | 2 +- .../scala/view/AvatarImageProviderSpec.scala | 7 ++- .../view/GitBucketHtmlSerializerSpec.scala | 1 + src/test/scala/view/PaginationSpec.scala | 4 +- 190 files changed, 821 insertions(+), 745 deletions(-) rename src/main/java/{ => gitbucket/core}/util/PatchUtil.java (99%) rename src/main/scala/{app => gitbucket/core/controller}/AccountController.scala (94%) rename src/main/scala/{app => gitbucket/core/controller}/AnonymousAccessController.scala (92%) rename src/main/scala/{app => gitbucket/core/controller}/ControllerBase.scala (94%) rename src/main/scala/{app => gitbucket/core/controller}/DashboardController.scala (93%) rename src/main/scala/{app => gitbucket/core/controller}/FileUploadController.scala (88%) rename src/main/scala/{app => gitbucket/core/controller}/IndexController.scala (88%) rename src/main/scala/{app => gitbucket/core/controller}/IssuesController.scala (94%) rename src/main/scala/{app => gitbucket/core/controller}/LabelsController.scala (88%) rename src/main/scala/{app => gitbucket/core/controller}/MilestonesController.scala (89%) rename src/main/scala/{app => gitbucket/core/controller}/PullRequestsController.scala (96%) rename src/main/scala/{app => gitbucket/core/controller}/RepositorySettingsController.scala (93%) rename src/main/scala/{app => gitbucket/core/controller}/RepositoryViewerController.scala (92%) rename src/main/scala/{app => gitbucket/core/controller}/SearchController.scala (85%) rename src/main/scala/{app => gitbucket/core/controller}/SystemSettingsController.scala (93%) rename src/main/scala/{app => gitbucket/core/controller}/UserManagementController.scala (93%) rename src/main/scala/{app => gitbucket/core/controller}/WikiController.scala (89%) rename src/main/scala/{ => gitbucket/core}/model/Account.scala (97%) rename src/main/scala/{ => gitbucket/core}/model/Activity.scala (97%) rename src/main/scala/{ => gitbucket/core}/model/BasicTemplate.scala (98%) rename src/main/scala/{ => gitbucket/core}/model/Collaborator.scala (95%) rename src/main/scala/{ => gitbucket/core}/model/Comment.scala (98%) rename src/main/scala/{ => gitbucket/core}/model/GroupMembers.scala (95%) rename src/main/scala/{ => gitbucket/core}/model/Issue.scala (98%) rename src/main/scala/{ => gitbucket/core}/model/IssueLabels.scala (95%) rename src/main/scala/{ => gitbucket/core}/model/Labels.scala (97%) rename src/main/scala/{ => gitbucket/core}/model/Milestone.scala (97%) rename src/main/scala/{ => gitbucket/core}/model/Plugin.scala (94%) rename src/main/scala/{ => gitbucket/core}/model/Profile.scala (90%) rename src/main/scala/{ => gitbucket/core}/model/PullRequest.scala (97%) rename src/main/scala/{ => gitbucket/core}/model/Repository.scala (98%) rename src/main/scala/{ => gitbucket/core}/model/SshKey.scala (95%) rename src/main/scala/{ => gitbucket/core}/model/WebHook.scala (95%) rename src/main/scala/{ => gitbucket/core}/model/package.scala (75%) rename src/main/scala/{ => gitbucket/core}/plugin/Images.scala (86%) rename src/main/scala/{ => gitbucket/core}/plugin/Plugin.scala (89%) rename src/main/scala/{ => gitbucket/core}/plugin/PluginRegistory.scala (91%) rename src/main/scala/{ => gitbucket/core}/plugin/Results.scala (86%) rename src/main/scala/{ => gitbucket/core}/plugin/Sessions.scala (68%) rename src/main/scala/{ => gitbucket/core}/service/AccountService.scala (95%) rename src/main/scala/{ => gitbucket/core}/service/ActivityService.scala (95%) rename src/main/scala/{ => gitbucket/core}/service/CommitsService.scala (89%) rename src/main/scala/{ => gitbucket/core}/service/IssuesService.scala (99%) rename src/main/scala/{ => gitbucket/core}/service/LabelsService.scala (92%) rename src/main/scala/{ => gitbucket/core}/service/MilestonesService.scala (92%) rename src/main/scala/{ => gitbucket/core}/service/PluginService.scala (86%) rename src/main/scala/{ => gitbucket/core}/service/PullRequestService.scala (97%) rename src/main/scala/{ => gitbucket/core}/service/RepositorySearchService.scala (94%) rename src/main/scala/{ => gitbucket/core}/service/RepositoryService.scala (98%) rename src/main/scala/{ => gitbucket/core}/service/RequestCache.scala (58%) rename src/main/scala/{ => gitbucket/core}/service/SshKeyService.scala (83%) rename src/main/scala/{ => gitbucket/core}/service/SystemSettingsService.scala (98%) rename src/main/scala/{ => gitbucket/core}/service/WebHookService.scala (94%) rename src/main/scala/{ => gitbucket/core}/service/WikiService.scala (95%) rename src/main/scala/{ => gitbucket/core}/servlet/BasicAuthenticationFilter.scala (91%) rename src/main/scala/{ => gitbucket/core}/servlet/GitRepositoryServlet.scala (95%) rename src/main/scala/{ => gitbucket/core}/servlet/InitializeListener.scala (96%) rename src/main/scala/{ => gitbucket/core}/servlet/SessionCleanupListener.scala (82%) rename src/main/scala/{ => gitbucket/core}/servlet/TransactionFilter.scala (93%) rename src/main/scala/{ => gitbucket/core}/ssh/GitCommand.scala (93%) rename src/main/scala/{ => gitbucket/core}/ssh/NoShell.scala (96%) rename src/main/scala/{ => gitbucket/core}/ssh/PublicKeyAuthenticator.scala (84%) rename src/main/scala/{ => gitbucket/core}/ssh/SshServerListener.scala (94%) rename src/main/scala/{ => gitbucket/core}/ssh/SshUtil.scala (97%) rename src/main/scala/{ => gitbucket/core}/util/Authenticator.scala (97%) rename src/main/scala/{ => gitbucket/core}/util/ControlUtil.scala (97%) rename src/main/scala/{ => gitbucket/core}/util/DatabaseConfig.scala (89%) rename src/main/scala/{ => gitbucket/core}/util/Directory.scala (98%) rename src/main/scala/{ => gitbucket/core}/util/FileUtil.scala (96%) rename src/main/scala/{ => gitbucket/core}/util/Implicits.scala (97%) rename src/main/scala/{ => gitbucket/core}/util/JDBCUtil.scala (96%) rename src/main/scala/{ => gitbucket/core}/util/JGitUtil.scala (99%) rename src/main/scala/{ => gitbucket/core}/util/Keys.scala (98%) rename src/main/scala/{ => gitbucket/core}/util/LDAPUtil.scala (97%) rename src/main/scala/{ => gitbucket/core}/util/LockUtil.scala (93%) rename src/main/scala/{ => gitbucket/core}/util/Notifier.scala (87%) rename src/main/scala/{ => gitbucket/core}/util/StringUtil.scala (96%) rename src/main/scala/{ => gitbucket/core}/util/Validations.scala (97%) rename src/main/scala/{ => gitbucket/core}/util/Version.scala (97%) rename src/main/scala/{ => gitbucket/core}/view/AvatarImageProvider.scala (90%) rename src/main/scala/{ => gitbucket/core}/view/LinkConverter.scala (79%) rename src/main/scala/{ => gitbucket/core}/view/Markdown.scala (94%) rename src/main/scala/{ => gitbucket/core}/view/Pagination.scala (97%) rename src/main/scala/{ => gitbucket/core}/view/helpers.scala (88%) delete mode 100644 src/main/twirl/error.scala.html rename src/main/twirl/{ => gitbucket/core}/account/activity.scala.html (53%) rename src/main/twirl/{ => gitbucket/core}/account/edit.scala.html (93%) rename src/main/twirl/{ => gitbucket/core}/account/group.scala.html (96%) rename src/main/twirl/{ => gitbucket/core}/account/main.scala.html (93%) rename src/main/twirl/{ => gitbucket/core}/account/members.scala.html (63%) rename src/main/twirl/{ => gitbucket/core}/account/menu.scala.html (81%) rename src/main/twirl/{ => gitbucket/core}/account/newrepo.scala.html (96%) rename src/main/twirl/{ => gitbucket/core}/account/register.scala.html (94%) rename src/main/twirl/{ => gitbucket/core}/account/repositories.scala.html (81%) rename src/main/twirl/{ => gitbucket/core}/account/ssh.scala.html (82%) rename src/main/twirl/{ => gitbucket/core}/admin/menu.scala.html (88%) rename src/main/twirl/{ => gitbucket/core}/admin/system.scala.html (98%) rename src/main/twirl/{ => gitbucket/core}/admin/users/group.scala.html (95%) rename src/main/twirl/{ => gitbucket/core}/admin/users/list.scala.html (92%) rename src/main/twirl/{ => gitbucket/core}/admin/users/user.scala.html (97%) rename src/main/twirl/{ => gitbucket/core}/dashboard/header.scala.html (94%) rename src/main/twirl/{ => gitbucket/core}/dashboard/issues.scala.html (54%) rename src/main/twirl/{ => gitbucket/core}/dashboard/issueslist.scala.html (85%) rename src/main/twirl/{ => gitbucket/core}/dashboard/issuesnavi.scala.html (86%) rename src/main/twirl/{ => gitbucket/core}/dashboard/pulls.scala.html (55%) rename src/main/twirl/{ => gitbucket/core}/dashboard/tab.scala.html (90%) create mode 100644 src/main/twirl/gitbucket/core/error.scala.html rename src/main/twirl/{ => gitbucket/core}/helper/account.scala.html (81%) rename src/main/twirl/{ => gitbucket/core}/helper/activities.scala.html (91%) rename src/main/twirl/{ => gitbucket/core}/helper/attached.scala.html (97%) rename src/main/twirl/{ => gitbucket/core}/helper/branchcontrol.scala.html (85%) rename src/main/twirl/{ => gitbucket/core}/helper/checkicon.scala.html (100%) rename src/main/twirl/{ => gitbucket/core}/helper/commitcomment.scala.html (85%) rename src/main/twirl/{ => gitbucket/core}/helper/copy.scala.html (100%) rename src/main/twirl/{ => gitbucket/core}/helper/datepicker.scala.html (91%) rename src/main/twirl/{ => gitbucket/core}/helper/datetimeago.scala.html (87%) rename src/main/twirl/{ => gitbucket/core}/helper/diff.scala.html (97%) rename src/main/twirl/{ => gitbucket/core}/helper/dropdown.scala.html (100%) rename src/main/twirl/{ => gitbucket/core}/helper/error.scala.html (100%) rename src/main/twirl/{ => gitbucket/core}/helper/feed.scala.xml (86%) rename src/main/twirl/{ => gitbucket/core}/helper/forkrepository.scala.html (83%) rename src/main/twirl/{ => gitbucket/core}/helper/information.scala.html (100%) rename src/main/twirl/{ => gitbucket/core}/helper/paginator.scala.html (92%) rename src/main/twirl/{ => gitbucket/core}/helper/preview.scala.html (77%) rename src/main/twirl/{ => gitbucket/core}/helper/repositoryicon.scala.html (61%) rename src/main/twirl/{ => gitbucket/core}/helper/uploadavatar.scala.html (92%) rename src/main/twirl/{ => gitbucket/core}/index.scala.html (89%) rename src/main/twirl/{ => gitbucket/core}/issues/commentform.scala.html (85%) rename src/main/twirl/{ => gitbucket/core}/issues/commentlist.scala.html (95%) rename src/main/twirl/{ => gitbucket/core}/issues/create.scala.html (95%) rename src/main/twirl/{ => gitbucket/core}/issues/editcomment.scala.html (96%) rename src/main/twirl/{ => gitbucket/core}/issues/editissue.scala.html (94%) rename src/main/twirl/{ => gitbucket/core}/issues/issue.scala.html (87%) rename src/main/twirl/{ => gitbucket/core}/issues/issueinfo.scala.html (93%) rename src/main/twirl/{ => gitbucket/core}/issues/labellist.scala.html (82%) rename src/main/twirl/{ => gitbucket/core}/issues/labels/edit.scala.html (92%) rename src/main/twirl/{ => gitbucket/core}/issues/labels/label.scala.html (85%) rename src/main/twirl/{ => gitbucket/core}/issues/labels/list.scala.html (84%) rename src/main/twirl/{ => gitbucket/core}/issues/list.scala.html (86%) rename src/main/twirl/{ => gitbucket/core}/issues/listparts.scala.html (93%) rename src/main/twirl/{ => gitbucket/core}/issues/milestones/edit.scala.html (90%) rename src/main/twirl/{ => gitbucket/core}/issues/milestones/list.scala.html (94%) rename src/main/twirl/{ => gitbucket/core}/issues/milestones/progress.scala.html (100%) rename src/main/twirl/{ => gitbucket/core}/issues/navigation.scala.html (92%) rename src/main/twirl/{ => gitbucket/core}/main.scala.html (91%) rename src/main/twirl/{ => gitbucket/core}/menu.scala.html (96%) rename src/main/twirl/{ => gitbucket/core}/pulls/commits.scala.html (73%) rename src/main/twirl/{ => gitbucket/core}/pulls/compare.scala.html (93%) rename src/main/twirl/{ => gitbucket/core}/pulls/conversation.scala.html (87%) rename src/main/twirl/{ => gitbucket/core}/pulls/mergecheck.scala.html (100%) rename src/main/twirl/{ => gitbucket/core}/pulls/mergeguide.scala.html (94%) rename src/main/twirl/{ => gitbucket/core}/pulls/pullreq.scala.html (85%) rename src/main/twirl/{ => gitbucket/core}/repo/blob.scala.html (94%) rename src/main/twirl/{ => gitbucket/core}/repo/branches.scala.html (93%) rename src/main/twirl/{ => gitbucket/core}/repo/commentform.scala.html (95%) rename src/main/twirl/{ => gitbucket/core}/repo/commit.scala.html (92%) rename src/main/twirl/{ => gitbucket/core}/repo/commits.scala.html (92%) rename src/main/twirl/{ => gitbucket/core}/repo/delete.scala.html (91%) rename src/main/twirl/{ => gitbucket/core}/repo/editcomment.scala.html (96%) rename src/main/twirl/{ => gitbucket/core}/repo/editor.scala.html (96%) rename src/main/twirl/{ => gitbucket/core}/repo/files.scala.html (94%) rename src/main/twirl/{ => gitbucket/core}/repo/forked.scala.html (83%) rename src/main/twirl/{ => gitbucket/core}/repo/guide.scala.html (79%) rename src/main/twirl/{ => gitbucket/core}/repo/tags.scala.html (85%) rename src/main/twirl/{ => gitbucket/core}/search/code.scala.html (75%) rename src/main/twirl/{ => gitbucket/core}/search/issues.scala.html (81%) rename src/main/twirl/{ => gitbucket/core}/search/menu.scala.html (87%) rename src/main/twirl/{ => gitbucket/core}/settings/collaborators.scala.html (87%) rename src/main/twirl/{ => gitbucket/core}/settings/danger.scala.html (90%) rename src/main/twirl/{ => gitbucket/core}/settings/hooks.scala.html (79%) rename src/main/twirl/{ => gitbucket/core}/settings/menu.scala.html (80%) rename src/main/twirl/{ => gitbucket/core}/settings/options.scala.html (95%) rename src/main/twirl/{ => gitbucket/core}/signin.scala.html (88%) rename src/main/twirl/{ => gitbucket/core}/signinform.scala.html (87%) rename src/main/twirl/{ => gitbucket/core}/wiki/compare.scala.html (85%) rename src/main/twirl/{ => gitbucket/core}/wiki/edit.scala.html (88%) rename src/main/twirl/{ => gitbucket/core}/wiki/history.scala.html (92%) rename src/main/twirl/{ => gitbucket/core}/wiki/page.scala.html (89%) rename src/main/twirl/{ => gitbucket/core}/wiki/pages.scala.html (77%) rename src/test/scala/{ => gitbucket/core}/service/AccountServiceSpec.scala (97%) rename src/test/scala/{ => gitbucket/core}/service/ServiceSpecBase.scala (56%) rename src/test/scala/{ => gitbucket/core}/ssh/GitCommandSpec.scala (98%) rename src/test/scala/{ => gitbucket/core}/util/StringUtilSpec.scala (98%) rename src/test/scala/{ => gitbucket/core}/util/ValidationsSpec.scala (97%) diff --git a/project/build.scala b/project/build.scala index 7d4153809..46260007e 100644 --- a/project/build.scala +++ b/project/build.scala @@ -8,7 +8,7 @@ import sbtassembly._ import sbtassembly.AssemblyKeys._ object MyBuild extends Build { - val Organization = "jp.sf.amateras" + val Organization = "gitbucket" val Name = "gitbucket" val Version = "0.0.1" val ScalaVersion = "2.11.2" @@ -66,6 +66,7 @@ object MyBuild extends Build { "com.typesafe" % "config" % "1.2.1", "com.typesafe.play" %% "twirl-compiler" % "1.0.2" ), + play.twirl.sbt.Import.TwirlKeys.templateImports += "gitbucket.core._", EclipseKeys.withSource := true, javacOptions in compile ++= Seq("-target", "7", "-source", "7"), testOptions in Test += Tests.Argument(TestFrameworks.Specs2, "junitxml", "console"), diff --git a/src/main/java/util/PatchUtil.java b/src/main/java/gitbucket/core/util/PatchUtil.java similarity index 99% rename from src/main/java/util/PatchUtil.java rename to src/main/java/gitbucket/core/util/PatchUtil.java index a316a75a4..3cc64ce3e 100644 --- a/src/main/java/util/PatchUtil.java +++ b/src/main/java/gitbucket/core/util/PatchUtil.java @@ -1,4 +1,4 @@ -package util; +package gitbucket.core.util; import org.eclipse.jgit.api.errors.PatchApplyException; import org.eclipse.jgit.diff.RawText; diff --git a/src/main/scala/ScalatraBootstrap.scala b/src/main/scala/ScalatraBootstrap.scala index cfa37e62d..81002e347 100644 --- a/src/main/scala/ScalatraBootstrap.scala +++ b/src/main/scala/ScalatraBootstrap.scala @@ -1,6 +1,8 @@ -import _root_.servlet.{BasicAuthenticationFilter, TransactionFilter} -import app._ -import plugin.PluginRegistry + +import gitbucket.core.controller._ +import gitbucket.core.plugin.PluginRegistry +import gitbucket.core.servlet.{TransactionFilter, BasicAuthenticationFilter} +import gitbucket.core.util.Directory //import jp.sf.amateras.scalatra.forms.ValidationJavaScriptProvider import org.scalatra._ @@ -38,7 +40,7 @@ class ScalatraBootstrap extends LifeCycle { context.mount(new RepositorySettingsController, "/*") // Create GITBUCKET_HOME directory if it does not exist - val dir = new java.io.File(_root_.util.Directory.GitBucketHome) + val dir = new java.io.File(Directory.GitBucketHome) if(!dir.exists){ dir.mkdirs() } diff --git a/src/main/scala/app/AccountController.scala b/src/main/scala/gitbucket/core/controller/AccountController.scala similarity index 94% rename from src/main/scala/app/AccountController.scala rename to src/main/scala/gitbucket/core/controller/AccountController.scala index 83116543d..afbe12f71 100644 --- a/src/main/scala/app/AccountController.scala +++ b/src/main/scala/gitbucket/core/controller/AccountController.scala @@ -1,19 +1,22 @@ -package app +package gitbucket.core.controller -import service._ -import util._ -import util.StringUtil._ -import util.Directory._ -import util.ControlUtil._ -import util.Implicits._ -import ssh.SshUtil +import gitbucket.core.account.html +import gitbucket.core.helper +import gitbucket.core.model.GroupMember +import gitbucket.core.util._ +import gitbucket.core.util.Implicits._ +import gitbucket.core.util.Directory._ +import gitbucket.core.util.ControlUtil._ +import gitbucket.core.util.StringUtil._ +import gitbucket.core.ssh.SshUtil +import gitbucket.core.service._ import jp.sf.amateras.scalatra.forms._ import org.apache.commons.io.FileUtils import org.scalatra.i18n.Messages import org.eclipse.jgit.api.Git import org.eclipse.jgit.lib.{FileMode, Constants} import org.eclipse.jgit.dircache.DirCache -import model.GroupMember + class AccountController extends AccountControllerBase with AccountService with RepositoryService with ActivityService with WikiService with LabelsService with SshKeyService @@ -103,21 +106,21 @@ trait AccountControllerBase extends AccountManagementControllerBase { params.getOrElse("tab", "repositories") match { // Public Activity case "activity" => - _root_.account.html.activity(account, + gitbucket.core.account.html.activity(account, if(account.isGroupAccount) Nil else getGroupsByUserName(userName), getActivitiesByUser(userName, true)) // Members case "members" if(account.isGroupAccount) => { val members = getGroupMembers(account.userName) - _root_.account.html.members(account, members.map(_.userName), + gitbucket.core.account.html.members(account, members.map(_.userName), context.loginAccount.exists(x => members.exists { member => member.userName == x.userName && member.isManager })) } // Repositories case _ => { val members = getGroupMembers(account.userName) - _root_.account.html.repositories(account, + gitbucket.core.account.html.repositories(account, if(account.isGroupAccount) Nil else getGroupsByUserName(userName), getVisibleRepositories(context.loginAccount, context.baseUrl, Some(userName)), context.loginAccount.exists(x => members.exists { member => member.userName == x.userName && member.isManager })) @@ -145,7 +148,7 @@ trait AccountControllerBase extends AccountManagementControllerBase { get("/:userName/_edit")(oneselfOnly { val userName = params("userName") getAccountByUserName(userName).map { x => - account.html.edit(x, flash.get("info")) + html.edit(x, flash.get("info")) } getOrElse NotFound }) @@ -189,7 +192,7 @@ trait AccountControllerBase extends AccountManagementControllerBase { get("/:userName/_ssh")(oneselfOnly { val userName = params("userName") getAccountByUserName(userName).map { x => - account.html.ssh(x, getPublicKeys(x.userName)) + html.ssh(x, getPublicKeys(x.userName)) } getOrElse NotFound }) @@ -211,7 +214,7 @@ trait AccountControllerBase extends AccountManagementControllerBase { if(context.loginAccount.isDefined){ redirect("/") } else { - account.html.register() + html.register() } } else NotFound } @@ -225,7 +228,7 @@ trait AccountControllerBase extends AccountManagementControllerBase { } get("/groups/new")(usersOnly { - account.html.group(None, List(GroupMember("", context.loginAccount.get.userName, true))) + html.group(None, List(GroupMember("", context.loginAccount.get.userName, true))) }) post("/groups/new", newGroupForm)(usersOnly { form => @@ -241,7 +244,7 @@ trait AccountControllerBase extends AccountManagementControllerBase { get("/:groupName/_editgroup")(managersOnly { defining(params("groupName")){ groupName => - account.html.group(getAccountByUserName(groupName, true), getGroupMembers(groupName)) + html.group(getAccountByUserName(groupName, true), getGroupMembers(groupName)) } }) @@ -290,7 +293,7 @@ trait AccountControllerBase extends AccountManagementControllerBase { * Show the new repository form. */ get("/new")(usersOnly { - account.html.newrepo(getGroupsByUserName(context.loginAccount.get.userName), context.settings.isCreateRepoOptionPublic) + html.newrepo(getGroupsByUserName(context.loginAccount.get.userName), context.settings.isCreateRepoOptionPublic) }) /** @@ -366,7 +369,7 @@ trait AccountControllerBase extends AccountManagementControllerBase { val members = getGroupMembers(group) context.loginAccount.exists(x => members.exists { member => member.userName == x.userName && member.isManager }) } - _root_.helper.html.forkrepository( + helper.html.forkrepository( repository, (groups zip managerPermissions).toMap ) diff --git a/src/main/scala/app/AnonymousAccessController.scala b/src/main/scala/gitbucket/core/controller/AnonymousAccessController.scala similarity index 92% rename from src/main/scala/app/AnonymousAccessController.scala rename to src/main/scala/gitbucket/core/controller/AnonymousAccessController.scala index 35481ab58..180b16472 100644 --- a/src/main/scala/app/AnonymousAccessController.scala +++ b/src/main/scala/gitbucket/core/controller/AnonymousAccessController.scala @@ -1,4 +1,4 @@ -package app +package gitbucket.core.controller class AnonymousAccessController extends AnonymousAccessControllerBase diff --git a/src/main/scala/app/ControllerBase.scala b/src/main/scala/gitbucket/core/controller/ControllerBase.scala similarity index 94% rename from src/main/scala/app/ControllerBase.scala rename to src/main/scala/gitbucket/core/controller/ControllerBase.scala index 8a184f08d..1fa9710bb 100644 --- a/src/main/scala/app/ControllerBase.scala +++ b/src/main/scala/gitbucket/core/controller/ControllerBase.scala @@ -1,16 +1,16 @@ -package app +package gitbucket.core.controller -import _root_.util.Directory._ -import _root_.util.Implicits._ -import _root_.util.ControlUtil._ -import _root_.util.{StringUtil, FileUtil, Validations, Keys} +import gitbucket.core.service.{AccountService, SystemSettingsService} +import gitbucket.core.util._ +import gitbucket.core.util.Implicits._ +import gitbucket.core.util.ControlUtil._ +import gitbucket.core.util.Directory._ +import gitbucket.core.model.Account import org.scalatra._ import org.scalatra.json._ import org.json4s._ import jp.sf.amateras.scalatra.forms._ import org.apache.commons.io.FileUtils -import model._ -import service.{SystemSettingsService, AccountService} import javax.servlet.http.{HttpServletResponse, HttpServletRequest} import javax.servlet.{FilterChain, ServletResponse, ServletRequest} import org.scalatra.i18n._ @@ -104,10 +104,10 @@ abstract class ControllerBase extends ScalatraFilter if(request.hasAttribute(Keys.Request.Ajax)){ org.scalatra.NotFound() } else { - org.scalatra.NotFound(html.error("Not Found")) + org.scalatra.NotFound(gitbucket.core.html.error("Not Found")) } - protected def Unauthorized()(implicit context: app.Context) = + protected def Unauthorized()(implicit context: Context) = if(request.hasAttribute(Keys.Request.Ajax)){ org.scalatra.Unauthorized() } else { diff --git a/src/main/scala/app/DashboardController.scala b/src/main/scala/gitbucket/core/controller/DashboardController.scala similarity index 93% rename from src/main/scala/app/DashboardController.scala rename to src/main/scala/gitbucket/core/controller/DashboardController.scala index 7c445294b..713e9c09e 100644 --- a/src/main/scala/app/DashboardController.scala +++ b/src/main/scala/gitbucket/core/controller/DashboardController.scala @@ -1,9 +1,10 @@ -package app +package gitbucket.core.controller -import service._ -import util.{StringUtil, UsersAuthenticator, Keys} -import util.Implicits._ -import service.IssuesService.IssueSearchCondition +import gitbucket.core.dashboard.html +import gitbucket.core.service.{RepositoryService, PullRequestService, AccountService, IssuesService} +import gitbucket.core.util.{StringUtil, Keys, UsersAuthenticator} +import gitbucket.core.util.Implicits._ +import gitbucket.core.service.IssuesService._ class DashboardController extends DashboardControllerBase with IssuesService with PullRequestService with RepositoryService with AccountService @@ -96,7 +97,7 @@ trait DashboardControllerBase extends ControllerBase { val userRepos = getUserRepositories(userName, context.baseUrl, true).map(repo => repo.owner -> repo.name) val page = IssueSearchCondition.page(request) - dashboard.html.issues( + html.issues( searchIssue(condition, false, (page - 1) * IssueLimit, IssueLimit, userRepos: _*), page, countIssue(condition.copy(state = "open" ), false, userRepos: _*), @@ -119,7 +120,7 @@ trait DashboardControllerBase extends ControllerBase { val allRepos = getAllRepositories(userName) val page = IssueSearchCondition.page(request) - dashboard.html.pulls( + html.pulls( searchIssue(condition, true, (page - 1) * PullRequestLimit, PullRequestLimit, allRepos: _*), page, countIssue(condition.copy(state = "open" ), true, allRepos: _*), diff --git a/src/main/scala/app/FileUploadController.scala b/src/main/scala/gitbucket/core/controller/FileUploadController.scala similarity index 88% rename from src/main/scala/app/FileUploadController.scala rename to src/main/scala/gitbucket/core/controller/FileUploadController.scala index 9798c0a2a..c3503ac7c 100644 --- a/src/main/scala/app/FileUploadController.scala +++ b/src/main/scala/gitbucket/core/controller/FileUploadController.scala @@ -1,8 +1,8 @@ -package app +package gitbucket.core.controller -import util.{Keys, FileUtil} -import util.ControlUtil._ -import util.Directory._ +import gitbucket.core.util.{Keys, FileUtil} +import gitbucket.core.util.ControlUtil._ +import gitbucket.core.util.Directory._ import org.scalatra._ import org.scalatra.servlet.{MultipartConfig, FileUploadSupport, FileItem} import org.apache.commons.io.FileUtils diff --git a/src/main/scala/app/IndexController.scala b/src/main/scala/gitbucket/core/controller/IndexController.scala similarity index 88% rename from src/main/scala/app/IndexController.scala rename to src/main/scala/gitbucket/core/controller/IndexController.scala index 9a2bc37c7..242d67d34 100644 --- a/src/main/scala/app/IndexController.scala +++ b/src/main/scala/gitbucket/core/controller/IndexController.scala @@ -1,8 +1,11 @@ -package app +package gitbucket.core.controller -import util._ -import util.Implicits._ -import service._ +import gitbucket.core.html +import gitbucket.core.helper.xml +import gitbucket.core.model.Account +import gitbucket.core.service.{RepositoryService, ActivityService, AccountService} +import gitbucket.core.util.{LDAPUtil, Keys, UsersAuthenticator} +import gitbucket.core.util.Implicits._ import jp.sf.amateras.scalatra.forms._ class IndexController extends IndexControllerBase @@ -61,13 +64,13 @@ trait IndexControllerBase extends ControllerBase { get("/activities.atom"){ contentType = "application/atom+xml; type=feed" - helper.xml.feed(getRecentActivities()) + xml.feed(getRecentActivities()) } /** * Set account information into HttpSession and redirect. */ - private def signin(account: model.Account) = { + private def signin(account: Account) = { session.setAttribute(Keys.Session.LoginAccount, account) updateLastLoginDate(account.userName) diff --git a/src/main/scala/app/IssuesController.scala b/src/main/scala/gitbucket/core/controller/IssuesController.scala similarity index 94% rename from src/main/scala/app/IssuesController.scala rename to src/main/scala/gitbucket/core/controller/IssuesController.scala index b52b22378..da67d0430 100644 --- a/src/main/scala/app/IssuesController.scala +++ b/src/main/scala/gitbucket/core/controller/IssuesController.scala @@ -1,14 +1,17 @@ -package app +package gitbucket.core.controller +import gitbucket.core.issues.html +import gitbucket.core.model.Issue +import gitbucket.core.service._ +import gitbucket.core.util._ +import gitbucket.core.util.ControlUtil._ +import gitbucket.core.util.Implicits._ +import gitbucket.core.view +import gitbucket.core.view.Markdown import jp.sf.amateras.scalatra.forms._ -import service._ import IssuesService._ -import util._ -import util.Implicits._ -import util.ControlUtil._ import org.scalatra.Ok -import model.Issue class IssuesController extends IssuesControllerBase with IssuesService with RepositoryService with AccountService with LabelsService with MilestonesService with ActivityService @@ -60,7 +63,7 @@ trait IssuesControllerBase extends ControllerBase { get("/:owner/:repository/issues/:id")(referrersOnly { repository => defining(repository.owner, repository.name, params("id")){ case (owner, name, issueId) => getIssue(owner, name, issueId) map { - issues.html.issue( + html.issue( _, getComments(owner, name, issueId.toInt), getIssueLabels(owner, name, issueId.toInt), @@ -75,7 +78,7 @@ trait IssuesControllerBase extends ControllerBase { get("/:owner/:repository/issues/new")(readableUsersOnly { repository => defining(repository.owner, repository.name){ case (owner, name) => - issues.html.create( + html.create( (getCollaborators(owner, name) ::: (if(getAccountByUserName(owner).get.isGroupAccount) Nil else List(owner))).sorted, getMilestones(owner, name), getLabels(owner, name), @@ -192,13 +195,13 @@ trait IssuesControllerBase extends ControllerBase { getIssue(repository.owner, repository.name, params("id")) map { x => if(isEditable(x.userName, x.repositoryName, x.openedUserName)){ params.get("dataType") collect { - case t if t == "html" => issues.html.editissue( + case t if t == "html" => html.editissue( x.content, x.issueId, x.userName, x.repositoryName) } getOrElse { contentType = formats("json") org.json4s.jackson.Serialization.write( Map("title" -> x.title, - "content" -> view.Markdown.toHtml(x.content getOrElse "No description given.", + "content" -> Markdown.toHtml(x.content getOrElse "No description given.", repository, false, true, true, isEditable(x.userName, x.repositoryName, x.openedUserName)) )) } @@ -210,7 +213,7 @@ trait IssuesControllerBase extends ControllerBase { getComment(repository.owner, repository.name, params("id")) map { x => if(isEditable(x.userName, x.repositoryName, x.commentedUserName)){ params.get("dataType") collect { - case t if t == "html" => issues.html.editcomment( + case t if t == "html" => html.editcomment( x.content, x.commentId, x.userName, x.repositoryName) } getOrElse { contentType = formats("json") @@ -226,14 +229,14 @@ trait IssuesControllerBase extends ControllerBase { ajaxPost("/:owner/:repository/issues/:id/label/new")(collaboratorsOnly { repository => defining(params("id").toInt){ issueId => registerIssueLabel(repository.owner, repository.name, issueId, params("labelId").toInt) - issues.html.labellist(getIssueLabels(repository.owner, repository.name, issueId)) + html.labellist(getIssueLabels(repository.owner, repository.name, issueId)) } }) ajaxPost("/:owner/:repository/issues/:id/label/delete")(collaboratorsOnly { repository => defining(params("id").toInt){ issueId => deleteIssueLabel(repository.owner, repository.name, issueId, params("labelId").toInt) - issues.html.labellist(getIssueLabels(repository.owner, repository.name, issueId)) + html.labellist(getIssueLabels(repository.owner, repository.name, issueId)) } }) @@ -247,7 +250,7 @@ trait IssuesControllerBase extends ControllerBase { milestoneId("milestoneId").map { milestoneId => getMilestonesWithIssueCount(repository.owner, repository.name) .find(_._1.milestoneId == milestoneId).map { case (_, openCount, closeCount) => - issues.milestones.html.progress(openCount + closeCount, closeCount) + gitbucket.core.issues.milestones.html.progress(openCount + closeCount, closeCount) } getOrElse NotFound } getOrElse Ok() }) @@ -301,7 +304,7 @@ trait IssuesControllerBase extends ControllerBase { val assignedUserName = (key: String) => params.get(key) filter (_.trim != "") val milestoneId: String => Option[Int] = (key: String) => params.get(key).flatMap(_.toIntOpt) - private def isEditable(owner: String, repository: String, author: String)(implicit context: app.Context): Boolean = + private def isEditable(owner: String, repository: String, author: String)(implicit context: Context): Boolean = hasWritePermission(owner, repository, context.loginAccount) || author == context.loginAccount.get.userName private def executeBatch(repository: RepositoryService.RepositoryInfo)(execute: Int => Unit) = { @@ -325,7 +328,7 @@ trait IssuesControllerBase extends ControllerBase { * @see [[https://github.com/takezoe/gitbucket/wiki/CommentAction]] */ private def handleComment(issueId: Int, content: Option[String], repository: RepositoryService.RepositoryInfo) - (getAction: model.Issue => Option[String] = + (getAction: Issue => Option[String] = p1 => params.get("action").filter(_ => isEditable(p1.userName, p1.repositoryName, p1.openedUserName))) = { defining(repository.owner, repository.name){ case (owner, name) => @@ -402,7 +405,7 @@ trait IssuesControllerBase extends ControllerBase { } else session.getAs[IssueSearchCondition](sessionKey).getOrElse(IssueSearchCondition()) ) - issues.html.list( + html.list( "issues", searchIssue(condition, false, (page - 1) * IssueLimit, IssueLimit, owner -> repoName), page, diff --git a/src/main/scala/app/LabelsController.scala b/src/main/scala/gitbucket/core/controller/LabelsController.scala similarity index 88% rename from src/main/scala/app/LabelsController.scala rename to src/main/scala/gitbucket/core/controller/LabelsController.scala index 7cd42bf83..fa6ef7ace 100644 --- a/src/main/scala/app/LabelsController.scala +++ b/src/main/scala/gitbucket/core/controller/LabelsController.scala @@ -1,9 +1,10 @@ -package app +package gitbucket.core.controller +import gitbucket.core.issues.labels.html +import gitbucket.core.service.{RepositoryService, AccountService, IssuesService, LabelsService} +import gitbucket.core.util.{ReferrerAuthenticator, CollaboratorsAuthenticator} +import gitbucket.core.util.Implicits._ import jp.sf.amateras.scalatra.forms._ -import service._ -import util.{ReferrerAuthenticator, CollaboratorsAuthenticator} -import util.Implicits._ import org.scalatra.i18n.Messages import org.scalatra.Ok @@ -23,7 +24,7 @@ trait LabelsControllerBase extends ControllerBase { )(LabelForm.apply) get("/:owner/:repository/issues/labels")(referrersOnly { repository => - issues.labels.html.list( + html.list( getLabels(repository.owner, repository.name), countIssueGroupByLabels(repository.owner, repository.name, IssuesService.IssueSearchCondition(), Map.empty), repository, @@ -31,12 +32,12 @@ trait LabelsControllerBase extends ControllerBase { }) ajaxGet("/:owner/:repository/issues/labels/new")(collaboratorsOnly { repository => - issues.labels.html.edit(None, repository) + html.edit(None, repository) }) ajaxPost("/:owner/:repository/issues/labels/new", labelForm)(collaboratorsOnly { (form, repository) => val labelId = createLabel(repository.owner, repository.name, form.labelName, form.color.substring(1)) - issues.labels.html.label( + html.label( getLabel(repository.owner, repository.name, labelId).get, // TODO futility countIssueGroupByLabels(repository.owner, repository.name, IssuesService.IssueSearchCondition(), Map.empty), @@ -46,13 +47,13 @@ trait LabelsControllerBase extends ControllerBase { ajaxGet("/:owner/:repository/issues/labels/:labelId/edit")(collaboratorsOnly { repository => getLabel(repository.owner, repository.name, params("labelId").toInt).map { label => - issues.labels.html.edit(Some(label), repository) + html.edit(Some(label), repository) } getOrElse NotFound() }) ajaxPost("/:owner/:repository/issues/labels/:labelId/edit", labelForm)(collaboratorsOnly { (form, repository) => updateLabel(repository.owner, repository.name, params("labelId").toInt, form.labelName, form.color.substring(1)) - issues.labels.html.label( + html.label( getLabel(repository.owner, repository.name, params("labelId").toInt).get, // TODO futility countIssueGroupByLabels(repository.owner, repository.name, IssuesService.IssueSearchCondition(), Map.empty), diff --git a/src/main/scala/app/MilestonesController.scala b/src/main/scala/gitbucket/core/controller/MilestonesController.scala similarity index 89% rename from src/main/scala/app/MilestonesController.scala rename to src/main/scala/gitbucket/core/controller/MilestonesController.scala index 234ca071b..eb4b71404 100644 --- a/src/main/scala/app/MilestonesController.scala +++ b/src/main/scala/gitbucket/core/controller/MilestonesController.scala @@ -1,11 +1,11 @@ -package app +package gitbucket.core.controller +import gitbucket.core.issues.milestones.html +import gitbucket.core.service.{RepositoryService, MilestonesService, AccountService} +import gitbucket.core.util.{ReferrerAuthenticator, CollaboratorsAuthenticator} +import gitbucket.core.util.Implicits._ import jp.sf.amateras.scalatra.forms._ -import service._ -import util.{CollaboratorsAuthenticator, ReferrerAuthenticator} -import util.Implicits._ - class MilestonesController extends MilestonesControllerBase with MilestonesService with RepositoryService with AccountService with ReferrerAuthenticator with CollaboratorsAuthenticator @@ -23,7 +23,7 @@ trait MilestonesControllerBase extends ControllerBase { )(MilestoneForm.apply) get("/:owner/:repository/issues/milestones")(referrersOnly { repository => - issues.milestones.html.list( + html.list( params.getOrElse("state", "open"), getMilestonesWithIssueCount(repository.owner, repository.name), repository, @@ -31,7 +31,7 @@ trait MilestonesControllerBase extends ControllerBase { }) get("/:owner/:repository/issues/milestones/new")(collaboratorsOnly { - issues.milestones.html.edit(None, _) + html.edit(None, _) }) post("/:owner/:repository/issues/milestones/new", milestoneForm)(collaboratorsOnly { (form, repository) => @@ -41,7 +41,7 @@ trait MilestonesControllerBase extends ControllerBase { get("/:owner/:repository/issues/milestones/:milestoneId/edit")(collaboratorsOnly { repository => params("milestoneId").toIntOpt.map{ milestoneId => - issues.milestones.html.edit(getMilestone(repository.owner, repository.name, milestoneId), repository) + html.edit(getMilestone(repository.owner, repository.name, milestoneId), repository) } getOrElse NotFound }) diff --git a/src/main/scala/app/PullRequestsController.scala b/src/main/scala/gitbucket/core/controller/PullRequestsController.scala similarity index 96% rename from src/main/scala/app/PullRequestsController.scala rename to src/main/scala/gitbucket/core/controller/PullRequestsController.scala index 84987b105..a7200ca6f 100644 --- a/src/main/scala/app/PullRequestsController.scala +++ b/src/main/scala/gitbucket/core/controller/PullRequestsController.scala @@ -1,23 +1,25 @@ -package app +package gitbucket.core.controller -import util._ -import util.Directory._ -import util.Implicits._ -import util.ControlUtil._ -import service._ +import gitbucket.core.pulls.html +import gitbucket.core.util._ +import gitbucket.core.util.JGitUtil._ +import gitbucket.core.util.ControlUtil._ +import gitbucket.core.util.Implicits._ +import gitbucket.core.util.Directory._ +import gitbucket.core.view +import gitbucket.core.view.helpers import org.eclipse.jgit.api.Git import jp.sf.amateras.scalatra.forms._ import org.eclipse.jgit.transport.RefSpec import scala.collection.JavaConverters._ import org.eclipse.jgit.lib.{ObjectId, CommitBuilder, PersonIdent} -import service.IssuesService._ -import service.PullRequestService._ +import gitbucket.core.service._ +import gitbucket.core.service.IssuesService._ +import gitbucket.core.service.PullRequestService._ +import gitbucket.core.service.WebHookService.WebHookPayload import org.slf4j.LoggerFactory import org.eclipse.jgit.merge.MergeStrategy import org.eclipse.jgit.errors.NoMergeBaseException -import service.WebHookService.WebHookPayload -import util.JGitUtil.DiffInfo -import util.JGitUtil.CommitInfo class PullRequestsController extends PullRequestsControllerBase @@ -77,7 +79,7 @@ trait PullRequestsControllerBase extends ControllerBase { val (commits, diffs) = getRequestCompareInfo(owner, name, pullreq.commitIdFrom, owner, name, pullreq.commitIdTo) - pulls.html.pullreq( + html.pullreq( issue, pullreq, (commits.flatten.map(commit => getCommitComments(owner, name, commit.id, true)).flatten.toList ::: getComments(owner, name, issueId)) .sortWith((a, b) => a.registeredDate before b.registeredDate), @@ -99,7 +101,7 @@ trait PullRequestsControllerBase extends ControllerBase { val owner = repository.owner val name = repository.name getPullRequest(owner, name, issueId) map { case(issue, pullreq) => - pulls.html.mergeguide( + html.mergeguide( checkConflictInPullRequest(owner, name, pullreq.branch, pullreq.requestUserName, name, pullreq.requestBranch, issueId), pullreq, s"${context.baseUrl}/git/${pullreq.requestUserName}/${pullreq.requestRepositoryName}.git") @@ -276,7 +278,7 @@ trait PullRequestsControllerBase extends ControllerBase { originRepository.owner, originRepository.name, oldId.getName, forkedRepository.owner, forkedRepository.name, newId.getName) - pulls.html.compare( + html.compare( commits, diffs, (forkedRepository.repository.originUserName, forkedRepository.repository.originRepositoryName) match { @@ -318,7 +320,7 @@ trait PullRequestsControllerBase extends ControllerBase { val originBranch = JGitUtil.getDefaultBranch(oldGit, originRepository, tmpOriginBranch).get._2 val forkedBranch = JGitUtil.getDefaultBranch(newGit, forkedRepository, tmpForkedBranch).get._2 - pulls.html.mergecheck( + html.mergecheck( checkConflict(originRepository.owner, originRepository.name, originBranch, forkedRepository.owner, forkedRepository.name, forkedBranch)) } @@ -450,7 +452,7 @@ trait PullRequestsControllerBase extends ControllerBase { val commits = newGit.log.addRange(oldId, newId).call.iterator.asScala.map { revCommit => new CommitInfo(revCommit) }.toList.splitWith { (commit1, commit2) => - view.helpers.date(commit1.commitTime) == view.helpers.date(commit2.commitTime) + helpers.date(commit1.commitTime) == view.helpers.date(commit2.commitTime) } val diffs = JGitUtil.getDiffs(newGit, oldId.getName, newId.getName, true) @@ -469,7 +471,7 @@ trait PullRequestsControllerBase extends ControllerBase { else session.getAs[IssueSearchCondition](sessionKey).getOrElse(IssueSearchCondition()) ) - issues.html.list( + gitbucket.core.issues.html.list( "pulls", searchIssue(condition, true, (page - 1) * PullRequestLimit, PullRequestLimit, owner -> repoName), page, diff --git a/src/main/scala/app/RepositorySettingsController.scala b/src/main/scala/gitbucket/core/controller/RepositorySettingsController.scala similarity index 93% rename from src/main/scala/app/RepositorySettingsController.scala rename to src/main/scala/gitbucket/core/controller/RepositorySettingsController.scala index cce95bbca..d6135df36 100644 --- a/src/main/scala/app/RepositorySettingsController.scala +++ b/src/main/scala/gitbucket/core/controller/RepositorySettingsController.scala @@ -1,15 +1,17 @@ -package app +package gitbucket.core.controller -import service._ -import util.Directory._ -import util.Implicits._ -import util.{LockUtil, UsersAuthenticator, OwnerAuthenticator} +import gitbucket.core.settings.html +import gitbucket.core.model.WebHook +import gitbucket.core.service.{RepositoryService, AccountService, WebHookService} +import gitbucket.core.service.WebHookService.WebHookPayload +import gitbucket.core.util._ +import gitbucket.core.util.JGitUtil._ +import gitbucket.core.util.ControlUtil._ +import gitbucket.core.util.Implicits._ +import gitbucket.core.util.Directory._ import jp.sf.amateras.scalatra.forms._ import org.apache.commons.io.FileUtils import org.scalatra.i18n.Messages -import service.WebHookService.WebHookPayload -import util.JGitUtil.CommitInfo -import util.ControlUtil._ import org.eclipse.jgit.api.Git import org.eclipse.jgit.lib.Constants @@ -63,7 +65,7 @@ trait RepositorySettingsControllerBase extends ControllerBase { * Display the Options page. */ get("/:owner/:repository/settings/options")(ownerOnly { - settings.html.options(_, flash.get("info")) + html.options(_, flash.get("info")) }) /** @@ -105,7 +107,7 @@ trait RepositorySettingsControllerBase extends ControllerBase { * Display the Collaborators page. */ get("/:owner/:repository/settings/collaborators")(ownerOnly { repository => - settings.html.collaborators( + html.collaborators( getCollaborators(repository.owner, repository.name), getAccountByUserName(repository.owner).get.isGroupAccount, repository) @@ -135,7 +137,7 @@ trait RepositorySettingsControllerBase extends ControllerBase { * Display the web hook page. */ get("/:owner/:repository/settings/hooks")(ownerOnly { repository => - settings.html.hooks(getWebHookURLs(repository.owner, repository.name), flash.get("url"), repository, flash.get("info")) + html.hooks(getWebHookURLs(repository.owner, repository.name), flash.get("url"), repository, flash.get("info")) }) /** @@ -167,7 +169,7 @@ trait RepositorySettingsControllerBase extends ControllerBase { getAccountByUserName(repository.owner).foreach { ownerAccount => callWebHook(repository.owner, repository.name, - List(model.WebHook(repository.owner, repository.name, form.url)), + List(WebHook(repository.owner, repository.name, form.url)), WebHookPayload(git, ownerAccount, "refs/heads/" + repository.repository.defaultBranch, repository, commits.toList, ownerAccount) ) } @@ -181,7 +183,7 @@ trait RepositorySettingsControllerBase extends ControllerBase { * Display the danger zone. */ get("/:owner/:repository/settings/danger")(ownerOnly { - settings.html.danger(_) + html.danger(_) }) /** diff --git a/src/main/scala/app/RepositoryViewerController.scala b/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala similarity index 92% rename from src/main/scala/app/RepositoryViewerController.scala rename to src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala index 8faf1ad87..629410ac2 100644 --- a/src/main/scala/app/RepositoryViewerController.scala +++ b/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala @@ -1,13 +1,18 @@ -package app +package gitbucket.core.controller -import _root_.util.JGitUtil.CommitInfo -import util.Directory._ -import util.Implicits._ -import _root_.util.ControlUtil._ -import _root_.util._ -import service._ +import gitbucket.core.repo.html +import gitbucket.core.helper +import gitbucket.core.service._ +import gitbucket.core.util._ +import gitbucket.core.util.JGitUtil._ +import gitbucket.core.util.ControlUtil._ +import gitbucket.core.util.Implicits._ +import gitbucket.core.util.Directory._ +import gitbucket.core.model.Account +import gitbucket.core.service.WebHookService.WebHookPayload +import gitbucket.core.view +import gitbucket.core.view.helpers import org.scalatra._ -import java.io.File import org.eclipse.jgit.api.{ArchiveCommand, Git} import org.eclipse.jgit.archive.{TgzFormat, ZipFormat} @@ -17,7 +22,6 @@ import org.eclipse.jgit.treewalk._ import jp.sf.amateras.scalatra.forms._ import org.eclipse.jgit.dircache.DirCache import org.eclipse.jgit.revwalk.RevCommit -import service.WebHookService.WebHookPayload class RepositoryViewerController extends RepositoryViewerControllerBase with RepositoryService with AccountService with ActivityService with IssuesService with WebHookService with CommitsService @@ -91,7 +95,7 @@ trait RepositoryViewerControllerBase extends ControllerBase { */ post("/:owner/:repository/_preview")(referrersOnly { repository => contentType = "text/html" - view.helpers.markdown(params("content"), repository, + helpers.markdown(params("content"), repository, params("enableWikiLink").toBoolean, params("enableRefsLink").toBoolean, params("enableTaskList").toBoolean, @@ -127,7 +131,7 @@ trait RepositoryViewerControllerBase extends ControllerBase { using(Git.open(getRepositoryDir(repository.owner, repository.name))){ git => JGitUtil.getCommitLog(git, branchName, page, 30, path) match { case Right((logs, hasNext)) => - repo.html.commits(if(path.isEmpty) Nil else path.split("/").toList, branchName, repository, + html.commits(if(path.isEmpty) Nil else path.split("/").toList, branchName, repository, logs.splitWith{ (commit1, commit2) => view.helpers.date(commit1.commitTime) == view.helpers.date(commit2.commitTime) }, page, hasNext, hasWritePermission(repository.owner, repository.name, context.loginAccount)) @@ -138,7 +142,7 @@ trait RepositoryViewerControllerBase extends ControllerBase { get("/:owner/:repository/new/*")(collaboratorsOnly { repository => val (branch, path) = splitPath(repository, multiParams("splat").head) - repo.html.editor(branch, repository, if(path.length == 0) Nil else path.split("/").toList, + html.editor(branch, repository, if(path.length == 0) Nil else path.split("/").toList, None, JGitUtil.ContentInfo("text", None, Some("UTF-8"))) }) @@ -150,7 +154,7 @@ trait RepositoryViewerControllerBase extends ControllerBase { getPathObjectId(git, path, revCommit).map { objectId => val paths = path.split("/") - repo.html.editor(branch, repository, paths.take(paths.size - 1).toList, Some(paths.last), + html.editor(branch, repository, paths.take(paths.size - 1).toList, Some(paths.last), JGitUtil.getContentInfo(git, path, objectId)) } getOrElse NotFound } @@ -163,7 +167,7 @@ trait RepositoryViewerControllerBase extends ControllerBase { getPathObjectId(git, path, revCommit).map { objectId => val paths = path.split("/") - repo.html.delete(branch, repository, paths.take(paths.size - 1).toList, paths.last, + html.delete(branch, repository, paths.take(paths.size - 1).toList, paths.last, JGitUtil.getContentInfo(git, path, objectId)) } getOrElse NotFound } @@ -217,7 +221,7 @@ trait RepositoryViewerControllerBase extends ControllerBase { RawData(FileUtil.getContentType(path, bytes), bytes) } } else { - repo.html.blob(id, repository, path.split("/").toList, JGitUtil.getContentInfo(git, path, objectId), + html.blob(id, repository, path.split("/").toList, JGitUtil.getContentInfo(git, path, objectId), new JGitUtil.CommitInfo(lastModifiedCommit), hasWritePermission(repository.owner, repository.name, context.loginAccount)) } } getOrElse NotFound @@ -233,7 +237,7 @@ trait RepositoryViewerControllerBase extends ControllerBase { using(Git.open(getRepositoryDir(repository.owner, repository.name))){ git => defining(JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(id))){ revCommit => JGitUtil.getDiffs(git, id) match { case (diffs, oldCommitId) => - repo.html.commit(id, new JGitUtil.CommitInfo(revCommit), + html.commit(id, new JGitUtil.CommitInfo(revCommit), JGitUtil.getBranchesOfCommit(git, revCommit.getName), JGitUtil.getTagsOfCommit(git, revCommit.getName), getCommitComments(repository.owner, repository.name, id, false), @@ -260,7 +264,7 @@ trait RepositoryViewerControllerBase extends ControllerBase { val oldLineNumber = params.get("oldLineNumber") map (_.toInt) val newLineNumber = params.get("newLineNumber") map (_.toInt) val issueId = params.get("issueId") map (_.toInt) - repo.html.commentform( + html.commentform( commitId = id, fileName, oldLineNumber, newLineNumber, issueId, hasWritePermission = hasWritePermission(repository.owner, repository.name, context.loginAccount), @@ -284,7 +288,7 @@ trait RepositoryViewerControllerBase extends ControllerBase { getCommitComment(repository.owner, repository.name, params("id")) map { x => if(isEditable(x.userName, x.repositoryName, x.commentedUserName)){ params.get("dataType") collect { - case t if t == "html" => repo.html.editcomment( + case t if t == "html" => html.editcomment( x.content, x.commentId, x.userName, x.repositoryName) } getOrElse { contentType = formats("json") @@ -326,7 +330,7 @@ trait RepositoryViewerControllerBase extends ControllerBase { .sortBy(br => (br.mergeInfo.isEmpty, br.commitTime)) .map(br => br -> getPullRequestByRequestCommit(repository.owner, repository.name, repository.repository.defaultBranch, br.name, br.commitId)) .reverse - repo.html.branches(branches, hasWritePermission(repository.owner, repository.name, context.loginAccount), repository) + html.branches(branches, hasWritePermission(repository.owner, repository.name, context.loginAccount), repository) }) /** @@ -366,7 +370,7 @@ trait RepositoryViewerControllerBase extends ControllerBase { * Displays tags. */ get("/:owner/:repository/tags")(referrersOnly { - repo.html.tags(_) + html.tags(_) }) /** @@ -383,7 +387,7 @@ trait RepositoryViewerControllerBase extends ControllerBase { }) get("/:owner/:repository/network/members")(referrersOnly { repository => - repo.html.forked( + html.forked( getRepository( repository.repository.originUserName.getOrElse(repository.owner), repository.repository.originRepositoryName.getOrElse(repository.name), @@ -394,7 +398,7 @@ trait RepositoryViewerControllerBase extends ControllerBase { repository) }) - private def splitPath(repository: service.RepositoryService.RepositoryInfo, path: String): (String, String) = { + private def splitPath(repository: RepositoryService.RepositoryInfo, path: String): (String, String) = { val id = repository.branchList.collectFirst { case branch if(path == branch || path.startsWith(branch + "/")) => branch } orElse repository.tags.collectFirst { @@ -417,7 +421,7 @@ trait RepositoryViewerControllerBase extends ControllerBase { */ private def fileList(repository: RepositoryService.RepositoryInfo, revstr: String = "", path: String = ".") = { if(repository.commitCount == 0){ - repo.html.guide(repository, hasWritePermission(repository.owner, repository.name, context.loginAccount)) + html.guide(repository, hasWritePermission(repository.owner, repository.name, context.loginAccount)) } else { using(Git.open(getRepositoryDir(repository.owner, repository.name))){ git => // get specified commit @@ -436,11 +440,11 @@ trait RepositoryViewerControllerBase extends ControllerBase { Git.open(getRepositoryDir(repository.owner, repository.name)), file.id, true).get) } - repo.html.files(revision, repository, + html.files(revision, repository, if(path == ".") Nil else path.split("/").toList, // current path context.loginAccount match { case None => List() - case account: Option[model.Account] => getGroupsByUserName(account.get.userName) + case account: Option[Account] => getGroupsByUserName(account.get.userName) }, // groups of current user new JGitUtil.CommitInfo(lastModifiedCommit), // last modified commit files, readme, hasWritePermission(repository.owner, repository.name, context.loginAccount), @@ -451,7 +455,7 @@ trait RepositoryViewerControllerBase extends ControllerBase { } } - private def commitFile(repository: service.RepositoryService.RepositoryInfo, + private def commitFile(repository: RepositoryService.RepositoryInfo, branch: String, path: String, newFileName: Option[String], oldFileName: Option[String], content: String, charset: String, message: String) = { @@ -559,6 +563,6 @@ trait RepositoryViewerControllerBase extends ControllerBase { } } - private def isEditable(owner: String, repository: String, author: String)(implicit context: app.Context): Boolean = + private def isEditable(owner: String, repository: String, author: String)(implicit context: Context): Boolean = hasWritePermission(owner, repository, context.loginAccount) || author == context.loginAccount.get.userName } diff --git a/src/main/scala/app/SearchController.scala b/src/main/scala/gitbucket/core/controller/SearchController.scala similarity index 85% rename from src/main/scala/app/SearchController.scala rename to src/main/scala/gitbucket/core/controller/SearchController.scala index dc71b0bb7..85f3907b7 100644 --- a/src/main/scala/app/SearchController.scala +++ b/src/main/scala/gitbucket/core/controller/SearchController.scala @@ -1,9 +1,10 @@ -package app +package gitbucket.core.controller -import util._ +import gitbucket.core.search.html +import gitbucket.core.service._ +import gitbucket.core.util.{StringUtil, ControlUtil, ReferrerAuthenticator, Implicits} import ControlUtil._ import Implicits._ -import service._ import jp.sf.amateras.scalatra.forms._ class SearchController extends SearchControllerBase @@ -34,12 +35,12 @@ trait SearchControllerBase extends ControllerBase { self: RepositoryService } target.toLowerCase match { - case "issue" => search.html.issues( + case "issue" => html.issues( searchIssues(repository.owner, repository.name, query), countFiles(repository.owner, repository.name, query), query, page, repository) - case _ => search.html.code( + case _ => html.code( searchFiles(repository.owner, repository.name, query), countIssues(repository.owner, repository.name, query), query, page, repository) diff --git a/src/main/scala/app/SystemSettingsController.scala b/src/main/scala/gitbucket/core/controller/SystemSettingsController.scala similarity index 93% rename from src/main/scala/app/SystemSettingsController.scala rename to src/main/scala/gitbucket/core/controller/SystemSettingsController.scala index efa952a2d..6c558ba50 100644 --- a/src/main/scala/app/SystemSettingsController.scala +++ b/src/main/scala/gitbucket/core/controller/SystemSettingsController.scala @@ -1,10 +1,11 @@ -package app +package gitbucket.core.controller -import service.{AccountService, SystemSettingsService} +import gitbucket.core.admin.html +import gitbucket.core.service.{AccountService, SystemSettingsService} +import gitbucket.core.util.AdminAuthenticator +import gitbucket.core.ssh.SshServer import SystemSettingsService._ -import util.AdminAuthenticator import jp.sf.amateras.scalatra.forms._ -import ssh.SshServer class SystemSettingsController extends SystemSettingsControllerBase with AccountService with AdminAuthenticator @@ -59,7 +60,7 @@ trait SystemSettingsControllerBase extends ControllerBase { case class PluginForm(pluginIds: List[String]) get("/admin/system")(adminOnly { - admin.html.system(flash.get("info")) + html.system(flash.get("info")) }) post("/admin/system", form)(adminOnly { form => diff --git a/src/main/scala/app/UserManagementController.scala b/src/main/scala/gitbucket/core/controller/UserManagementController.scala similarity index 93% rename from src/main/scala/app/UserManagementController.scala rename to src/main/scala/gitbucket/core/controller/UserManagementController.scala index d98d70366..48dcac0c9 100644 --- a/src/main/scala/app/UserManagementController.scala +++ b/src/main/scala/gitbucket/core/controller/UserManagementController.scala @@ -1,11 +1,12 @@ -package app +package gitbucket.core.controller -import service._ -import util.AdminAuthenticator -import util.StringUtil._ -import util.ControlUtil._ -import util.Directory._ -import util.Implicits._ +import gitbucket.core.service.{RepositoryService, AccountService} +import gitbucket.core.admin.users.html +import gitbucket.core.util._ +import gitbucket.core.util.ControlUtil._ +import gitbucket.core.util.StringUtil._ +import gitbucket.core.util.Implicits._ +import gitbucket.core.util.Directory._ import jp.sf.amateras.scalatra.forms._ import org.scalatra.i18n.Messages import org.apache.commons.io.FileUtils @@ -75,11 +76,11 @@ trait UserManagementControllerBase extends AccountManagementControllerBase { account.userName -> getGroupMembers(account.userName).map(_.userName) }.toMap - admin.users.html.list(users, members, includeRemoved) + html.list(users, members, includeRemoved) }) get("/admin/users/_newuser")(adminOnly { - admin.users.html.user(None) + html.user(None) }) post("/admin/users/_newuser", newUserForm)(adminOnly { form => @@ -90,7 +91,7 @@ trait UserManagementControllerBase extends AccountManagementControllerBase { get("/admin/users/:userName/_edituser")(adminOnly { val userName = params("userName") - admin.users.html.user(getAccountByUserName(userName, true)) + html.user(getAccountByUserName(userName, true)) }) post("/admin/users/:name/_edituser", editUserForm)(adminOnly { form => @@ -124,7 +125,7 @@ trait UserManagementControllerBase extends AccountManagementControllerBase { }) get("/admin/users/_newgroup")(adminOnly { - admin.users.html.group(None, Nil) + html.group(None, Nil) }) post("/admin/users/_newgroup", newGroupForm)(adminOnly { form => @@ -140,7 +141,7 @@ trait UserManagementControllerBase extends AccountManagementControllerBase { get("/admin/users/:groupName/_editgroup")(adminOnly { defining(params("groupName")){ groupName => - admin.users.html.group(getAccountByUserName(groupName, true), getGroupMembers(groupName)) + html.group(getAccountByUserName(groupName, true), getGroupMembers(groupName)) } }) diff --git a/src/main/scala/app/WikiController.scala b/src/main/scala/gitbucket/core/controller/WikiController.scala similarity index 89% rename from src/main/scala/app/WikiController.scala rename to src/main/scala/gitbucket/core/controller/WikiController.scala index c273018d0..2bdc7a079 100644 --- a/src/main/scala/app/WikiController.scala +++ b/src/main/scala/gitbucket/core/controller/WikiController.scala @@ -1,14 +1,14 @@ -package app +package gitbucket.core.controller -import service._ -import util._ -import util.Directory._ -import util.ControlUtil._ -import util.Implicits._ +import gitbucket.core.wiki.html +import gitbucket.core.service.{RepositoryService, WikiService, ActivityService, AccountService} +import gitbucket.core.util._ +import gitbucket.core.util.ControlUtil._ +import gitbucket.core.util.Implicits._ +import gitbucket.core.util.Directory._ import jp.sf.amateras.scalatra.forms._ import org.eclipse.jgit.api.Git import org.scalatra.i18n.Messages -import java.util.ResourceBundle class WikiController extends WikiControllerBase with WikiService with RepositoryService with AccountService with ActivityService with CollaboratorsAuthenticator with ReferrerAuthenticator @@ -36,7 +36,7 @@ trait WikiControllerBase extends ControllerBase { get("/:owner/:repository/wiki")(referrersOnly { repository => getWikiPage(repository.owner, repository.name, "Home").map { page => - wiki.html.page("Home", page, getWikiPageList(repository.owner, repository.name), + html.page("Home", page, getWikiPageList(repository.owner, repository.name), repository, hasWritePermission(repository.owner, repository.name, context.loginAccount)) } getOrElse redirect(s"/${repository.owner}/${repository.name}/wiki/Home/_edit") }) @@ -45,7 +45,7 @@ trait WikiControllerBase extends ControllerBase { val pageName = StringUtil.urlDecode(params("page")) getWikiPage(repository.owner, repository.name, pageName).map { page => - wiki.html.page(pageName, page, getWikiPageList(repository.owner, repository.name), + html.page(pageName, page, getWikiPageList(repository.owner, repository.name), repository, hasWritePermission(repository.owner, repository.name, context.loginAccount)) } getOrElse redirect(s"/${repository.owner}/${repository.name}/wiki/${StringUtil.urlEncode(pageName)}/_edit") }) @@ -55,7 +55,7 @@ trait WikiControllerBase extends ControllerBase { using(Git.open(getWikiRepositoryDir(repository.owner, repository.name))){ git => JGitUtil.getCommitLog(git, "master", path = pageName + ".md") match { - case Right((logs, hasNext)) => wiki.html.history(Some(pageName), logs, repository) + case Right((logs, hasNext)) => html.history(Some(pageName), logs, repository) case Left(_) => NotFound } } @@ -66,7 +66,7 @@ trait WikiControllerBase extends ControllerBase { val Array(from, to) = params("commitId").split("\\.\\.\\.") using(Git.open(getWikiRepositoryDir(repository.owner, repository.name))){ git => - wiki.html.compare(Some(pageName), from, to, JGitUtil.getDiffs(git, from, to, true).filter(_.newPath == pageName + ".md"), repository, + html.compare(Some(pageName), from, to, JGitUtil.getDiffs(git, from, to, true).filter(_.newPath == pageName + ".md"), repository, hasWritePermission(repository.owner, repository.name, context.loginAccount), flash.get("info")) } }) @@ -75,7 +75,7 @@ trait WikiControllerBase extends ControllerBase { val Array(from, to) = params("commitId").split("\\.\\.\\.") using(Git.open(getWikiRepositoryDir(repository.owner, repository.name))){ git => - wiki.html.compare(None, from, to, JGitUtil.getDiffs(git, from, to, true), repository, + html.compare(None, from, to, JGitUtil.getDiffs(git, from, to, true), repository, hasWritePermission(repository.owner, repository.name, context.loginAccount), flash.get("info")) } }) @@ -105,7 +105,7 @@ trait WikiControllerBase extends ControllerBase { get("/:owner/:repository/wiki/:page/_edit")(collaboratorsOnly { repository => val pageName = StringUtil.urlDecode(params("page")) - wiki.html.edit(pageName, getWikiPage(repository.owner, repository.name, pageName), repository) + html.edit(pageName, getWikiPage(repository.owner, repository.name, pageName), repository) }) post("/:owner/:repository/wiki/_edit", editForm)(collaboratorsOnly { (form, repository) => @@ -120,7 +120,7 @@ trait WikiControllerBase extends ControllerBase { }) get("/:owner/:repository/wiki/_new")(collaboratorsOnly { - wiki.html.edit("", None, _) + html.edit("", None, _) }) post("/:owner/:repository/wiki/_new", newForm)(collaboratorsOnly { (form, repository) => @@ -147,14 +147,14 @@ trait WikiControllerBase extends ControllerBase { }) get("/:owner/:repository/wiki/_pages")(referrersOnly { repository => - wiki.html.pages(getWikiPageList(repository.owner, repository.name), repository, + html.pages(getWikiPageList(repository.owner, repository.name), repository, hasWritePermission(repository.owner, repository.name, context.loginAccount)) }) get("/:owner/:repository/wiki/_history")(referrersOnly { repository => using(Git.open(getWikiRepositoryDir(repository.owner, repository.name))){ git => JGitUtil.getCommitLog(git, "master") match { - case Right((logs, hasNext)) => wiki.html.history(None, logs, repository) + case Right((logs, hasNext)) => html.history(None, logs, repository) case Left(_) => NotFound } } diff --git a/src/main/scala/model/Account.scala b/src/main/scala/gitbucket/core/model/Account.scala similarity index 97% rename from src/main/scala/model/Account.scala rename to src/main/scala/gitbucket/core/model/Account.scala index 012c559cc..cd2190a8f 100644 --- a/src/main/scala/model/Account.scala +++ b/src/main/scala/gitbucket/core/model/Account.scala @@ -1,4 +1,4 @@ -package model +package gitbucket.core.model trait AccountComponent { self: Profile => import profile.simple._ diff --git a/src/main/scala/model/Activity.scala b/src/main/scala/gitbucket/core/model/Activity.scala similarity index 97% rename from src/main/scala/model/Activity.scala rename to src/main/scala/gitbucket/core/model/Activity.scala index 8e3960ef2..0f49ee3c8 100644 --- a/src/main/scala/model/Activity.scala +++ b/src/main/scala/gitbucket/core/model/Activity.scala @@ -1,4 +1,4 @@ -package model +package gitbucket.core.model trait ActivityComponent extends TemplateComponent { self: Profile => import profile.simple._ diff --git a/src/main/scala/model/BasicTemplate.scala b/src/main/scala/gitbucket/core/model/BasicTemplate.scala similarity index 98% rename from src/main/scala/model/BasicTemplate.scala rename to src/main/scala/gitbucket/core/model/BasicTemplate.scala index 52e0a112e..687d7a4b0 100644 --- a/src/main/scala/model/BasicTemplate.scala +++ b/src/main/scala/gitbucket/core/model/BasicTemplate.scala @@ -1,4 +1,4 @@ -package model +package gitbucket.core.model protected[model] trait TemplateComponent { self: Profile => import profile.simple._ diff --git a/src/main/scala/model/Collaborator.scala b/src/main/scala/gitbucket/core/model/Collaborator.scala similarity index 95% rename from src/main/scala/model/Collaborator.scala rename to src/main/scala/gitbucket/core/model/Collaborator.scala index 88311e188..55ae80f14 100644 --- a/src/main/scala/model/Collaborator.scala +++ b/src/main/scala/gitbucket/core/model/Collaborator.scala @@ -1,4 +1,4 @@ -package model +package gitbucket.core.model trait CollaboratorComponent extends TemplateComponent { self: Profile => import profile.simple._ diff --git a/src/main/scala/model/Comment.scala b/src/main/scala/gitbucket/core/model/Comment.scala similarity index 98% rename from src/main/scala/model/Comment.scala rename to src/main/scala/gitbucket/core/model/Comment.scala index 956987170..5a1144092 100644 --- a/src/main/scala/model/Comment.scala +++ b/src/main/scala/gitbucket/core/model/Comment.scala @@ -1,4 +1,4 @@ -package model +package gitbucket.core.model trait Comment { val commentedUserName: String diff --git a/src/main/scala/model/GroupMembers.scala b/src/main/scala/gitbucket/core/model/GroupMembers.scala similarity index 95% rename from src/main/scala/model/GroupMembers.scala rename to src/main/scala/gitbucket/core/model/GroupMembers.scala index f0161d350..d8cdc9b31 100644 --- a/src/main/scala/model/GroupMembers.scala +++ b/src/main/scala/gitbucket/core/model/GroupMembers.scala @@ -1,4 +1,4 @@ -package model +package gitbucket.core.model trait GroupMemberComponent { self: Profile => import profile.simple._ diff --git a/src/main/scala/model/Issue.scala b/src/main/scala/gitbucket/core/model/Issue.scala similarity index 98% rename from src/main/scala/model/Issue.scala rename to src/main/scala/gitbucket/core/model/Issue.scala index 85c6014b3..24568d3f3 100644 --- a/src/main/scala/model/Issue.scala +++ b/src/main/scala/gitbucket/core/model/Issue.scala @@ -1,4 +1,4 @@ -package model +package gitbucket.core.model trait IssueComponent extends TemplateComponent { self: Profile => import profile.simple._ diff --git a/src/main/scala/model/IssueLabels.scala b/src/main/scala/gitbucket/core/model/IssueLabels.scala similarity index 95% rename from src/main/scala/model/IssueLabels.scala rename to src/main/scala/gitbucket/core/model/IssueLabels.scala index 5d422728a..c56cec784 100644 --- a/src/main/scala/model/IssueLabels.scala +++ b/src/main/scala/gitbucket/core/model/IssueLabels.scala @@ -1,4 +1,4 @@ -package model +package gitbucket.core.model trait IssueLabelComponent extends TemplateComponent { self: Profile => import profile.simple._ diff --git a/src/main/scala/model/Labels.scala b/src/main/scala/gitbucket/core/model/Labels.scala similarity index 97% rename from src/main/scala/model/Labels.scala rename to src/main/scala/gitbucket/core/model/Labels.scala index 47c6a2bd2..0143c9e9b 100644 --- a/src/main/scala/model/Labels.scala +++ b/src/main/scala/gitbucket/core/model/Labels.scala @@ -1,4 +1,4 @@ -package model +package gitbucket.core.model trait LabelComponent extends TemplateComponent { self: Profile => import profile.simple._ diff --git a/src/main/scala/model/Milestone.scala b/src/main/scala/gitbucket/core/model/Milestone.scala similarity index 97% rename from src/main/scala/model/Milestone.scala rename to src/main/scala/gitbucket/core/model/Milestone.scala index c392219b8..5c09b5df5 100644 --- a/src/main/scala/model/Milestone.scala +++ b/src/main/scala/gitbucket/core/model/Milestone.scala @@ -1,4 +1,4 @@ -package model +package gitbucket.core.model trait MilestoneComponent extends TemplateComponent { self: Profile => import profile.simple._ diff --git a/src/main/scala/model/Plugin.scala b/src/main/scala/gitbucket/core/model/Plugin.scala similarity index 94% rename from src/main/scala/model/Plugin.scala rename to src/main/scala/gitbucket/core/model/Plugin.scala index bc85ca0a3..1e8aac545 100644 --- a/src/main/scala/model/Plugin.scala +++ b/src/main/scala/gitbucket/core/model/Plugin.scala @@ -1,4 +1,4 @@ -package model +package gitbucket.core.model trait PluginComponent extends TemplateComponent { self: Profile => import profile.simple._ diff --git a/src/main/scala/model/Profile.scala b/src/main/scala/gitbucket/core/model/Profile.scala similarity index 90% rename from src/main/scala/model/Profile.scala rename to src/main/scala/gitbucket/core/model/Profile.scala index aae4a4662..d09595d93 100644 --- a/src/main/scala/model/Profile.scala +++ b/src/main/scala/gitbucket/core/model/Profile.scala @@ -1,4 +1,4 @@ -package model +package gitbucket.core.model trait Profile { val profile: slick.driver.JdbcProfile @@ -14,9 +14,14 @@ trait Profile { def &&(c2: => Column[Boolean], guard: => Boolean): Column[Boolean] = if(guard) c1 && c2 else c1 } + /** + * Returns system date. + */ + def currentDate = new java.util.Date() + } -trait ProfileBase extends Profile +trait CoreProfile extends Profile with AccountComponent with ActivityComponent with CollaboratorComponent @@ -34,12 +39,6 @@ trait ProfileBase extends Profile with PluginComponent { val profile = slick.driver.H2Driver - - /** - * Returns system date. - */ - def currentDate = new java.util.Date() - } -object Profile extends ProfileBase \ No newline at end of file +object Profile extends CoreProfile diff --git a/src/main/scala/model/PullRequest.scala b/src/main/scala/gitbucket/core/model/PullRequest.scala similarity index 97% rename from src/main/scala/model/PullRequest.scala rename to src/main/scala/gitbucket/core/model/PullRequest.scala index 3ba87ea40..ed5acac37 100644 --- a/src/main/scala/model/PullRequest.scala +++ b/src/main/scala/gitbucket/core/model/PullRequest.scala @@ -1,4 +1,4 @@ -package model +package gitbucket.core.model trait PullRequestComponent extends TemplateComponent { self: Profile => import profile.simple._ diff --git a/src/main/scala/model/Repository.scala b/src/main/scala/gitbucket/core/model/Repository.scala similarity index 98% rename from src/main/scala/model/Repository.scala rename to src/main/scala/gitbucket/core/model/Repository.scala index 5a888fc4a..789f95712 100644 --- a/src/main/scala/model/Repository.scala +++ b/src/main/scala/gitbucket/core/model/Repository.scala @@ -1,4 +1,4 @@ -package model +package gitbucket.core.model trait RepositoryComponent extends TemplateComponent { self: Profile => import profile.simple._ diff --git a/src/main/scala/model/SshKey.scala b/src/main/scala/gitbucket/core/model/SshKey.scala similarity index 95% rename from src/main/scala/model/SshKey.scala rename to src/main/scala/gitbucket/core/model/SshKey.scala index dcf346384..fa7909e6c 100644 --- a/src/main/scala/model/SshKey.scala +++ b/src/main/scala/gitbucket/core/model/SshKey.scala @@ -1,4 +1,4 @@ -package model +package gitbucket.core.model trait SshKeyComponent { self: Profile => import profile.simple._ diff --git a/src/main/scala/model/WebHook.scala b/src/main/scala/gitbucket/core/model/WebHook.scala similarity index 95% rename from src/main/scala/model/WebHook.scala rename to src/main/scala/gitbucket/core/model/WebHook.scala index 4c13c8787..b6897da1c 100644 --- a/src/main/scala/model/WebHook.scala +++ b/src/main/scala/gitbucket/core/model/WebHook.scala @@ -1,4 +1,4 @@ -package model +package gitbucket.core.model trait WebHookComponent extends TemplateComponent { self: Profile => import profile.simple._ diff --git a/src/main/scala/model/package.scala b/src/main/scala/gitbucket/core/model/package.scala similarity index 75% rename from src/main/scala/model/package.scala rename to src/main/scala/gitbucket/core/model/package.scala index c65e72e84..80e19cc75 100644 --- a/src/main/scala/model/package.scala +++ b/src/main/scala/gitbucket/core/model/package.scala @@ -1,3 +1,5 @@ +package gitbucket.core + package object model { type Session = slick.jdbc.JdbcBackend#Session } diff --git a/src/main/scala/plugin/Images.scala b/src/main/scala/gitbucket/core/plugin/Images.scala similarity index 86% rename from src/main/scala/plugin/Images.scala rename to src/main/scala/gitbucket/core/plugin/Images.scala index b569f0723..3c1f55337 100644 --- a/src/main/scala/plugin/Images.scala +++ b/src/main/scala/gitbucket/core/plugin/Images.scala @@ -1,4 +1,4 @@ -package plugin +package gitbucket.core.plugin /** * Provides a helper method to generate data URI of images registered by plug-in. diff --git a/src/main/scala/plugin/Plugin.scala b/src/main/scala/gitbucket/core/plugin/Plugin.scala similarity index 89% rename from src/main/scala/plugin/Plugin.scala rename to src/main/scala/gitbucket/core/plugin/Plugin.scala index c17687466..74c91b282 100644 --- a/src/main/scala/plugin/Plugin.scala +++ b/src/main/scala/gitbucket/core/plugin/Plugin.scala @@ -1,8 +1,6 @@ -package plugin +package gitbucket.core.plugin -import javax.servlet.ServletContext - -import util.Version +import gitbucket.core.util.Version /** * Trait for define plugin interface. diff --git a/src/main/scala/plugin/PluginRegistory.scala b/src/main/scala/gitbucket/core/plugin/PluginRegistory.scala similarity index 91% rename from src/main/scala/plugin/PluginRegistory.scala rename to src/main/scala/gitbucket/core/plugin/PluginRegistory.scala index ebdf7dbef..f1f1a17cc 100644 --- a/src/main/scala/plugin/PluginRegistory.scala +++ b/src/main/scala/gitbucket/core/plugin/PluginRegistory.scala @@ -1,21 +1,21 @@ -package plugin +package gitbucket.core.plugin -import java.io.{InputStream, FilenameFilter, File} +import java.io.{File, FilenameFilter, InputStream} import java.net.URLClassLoader import javax.servlet.ServletContext import javax.servlet.http.{HttpServletRequest, HttpServletResponse} +import gitbucket.core.controller.{Context, ControllerBase} +import gitbucket.core.service.RepositoryService.RepositoryInfo +import gitbucket.core.util.ControlUtil._ +import gitbucket.core.util.Directory._ +import gitbucket.core.util.JDBCUtil._ +import gitbucket.core.util.{Version, Versions} +import org.apache.commons.codec.binary.{Base64, StringUtils} import org.slf4j.LoggerFactory -import org.apache.commons.codec.binary.{StringUtils, Base64} -import service.RepositoryService.RepositoryInfo -import util.Directory._ -import util.JDBCUtil._ -import util.ControlUtil._ -import util.{Version, Versions} import scala.collection.mutable import scala.collection.mutable.ListBuffer -import app.{ControllerBase, Context} class PluginRegistry { diff --git a/src/main/scala/plugin/Results.scala b/src/main/scala/gitbucket/core/plugin/Results.scala similarity index 86% rename from src/main/scala/plugin/Results.scala rename to src/main/scala/gitbucket/core/plugin/Results.scala index 18fdb7fc4..8029e0d32 100644 --- a/src/main/scala/plugin/Results.scala +++ b/src/main/scala/gitbucket/core/plugin/Results.scala @@ -1,4 +1,4 @@ -package plugin +package gitbucket.core.plugin import play.twirl.api.Html diff --git a/src/main/scala/plugin/Sessions.scala b/src/main/scala/gitbucket/core/plugin/Sessions.scala similarity index 68% rename from src/main/scala/plugin/Sessions.scala rename to src/main/scala/gitbucket/core/plugin/Sessions.scala index 7398c9a8d..dc3870211 100644 --- a/src/main/scala/plugin/Sessions.scala +++ b/src/main/scala/gitbucket/core/plugin/Sessions.scala @@ -1,6 +1,6 @@ -package plugin +package gitbucket.core.plugin -import slick.jdbc.JdbcBackend.Session +import scala.slick.jdbc.JdbcBackend.Session /** * Provides Slick Session to Plug-ins. diff --git a/src/main/scala/service/AccountService.scala b/src/main/scala/gitbucket/core/service/AccountService.scala similarity index 95% rename from src/main/scala/service/AccountService.scala rename to src/main/scala/gitbucket/core/service/AccountService.scala index c502eb7b4..917ef96f7 100644 --- a/src/main/scala/service/AccountService.scala +++ b/src/main/scala/gitbucket/core/service/AccountService.scala @@ -1,14 +1,14 @@ -package service +package gitbucket.core.service -import model.Profile._ +import gitbucket.core.model.{GroupMember, Account} +import gitbucket.core.model.Profile._ +import gitbucket.core.util.{StringUtil, LDAPUtil} +import gitbucket.core.service.SystemSettingsService.SystemSettings import profile.simple._ -import model.{Account, GroupMember} -// TODO [Slick 2.0]NOT import directly? -import model.Profile.dateColumnType -import service.SystemSettingsService.SystemSettings -import util.StringUtil._ -import util.LDAPUtil +import StringUtil._ import org.slf4j.LoggerFactory +// TODO Why is direct import required? +import gitbucket.core.model.Profile.dateColumnType trait AccountService { diff --git a/src/main/scala/service/ActivityService.scala b/src/main/scala/gitbucket/core/service/ActivityService.scala similarity index 95% rename from src/main/scala/service/ActivityService.scala rename to src/main/scala/gitbucket/core/service/ActivityService.scala index b1e8202ea..be9205fff 100644 --- a/src/main/scala/service/ActivityService.scala +++ b/src/main/scala/gitbucket/core/service/ActivityService.scala @@ -1,8 +1,9 @@ -package service +package gitbucket.core.service -import model.Profile._ +import gitbucket.core.model.Activity +import gitbucket.core.model.Profile._ +import gitbucket.core.util.JGitUtil import profile.simple._ -import model.Activity trait ActivityService { @@ -121,7 +122,7 @@ trait ActivityService { currentDate) def recordPushActivity(userName: String, repositoryName: String, activityUserName: String, - branchName: String, commits: List[util.JGitUtil.CommitInfo])(implicit s: Session): Unit = + branchName: String, commits: List[JGitUtil.CommitInfo])(implicit s: Session): Unit = Activities insert Activity(userName, repositoryName, activityUserName, "push", s"[user:${activityUserName}] pushed to [branch:${userName}/${repositoryName}#${branchName}] at [repo:${userName}/${repositoryName}]", @@ -129,7 +130,7 @@ trait ActivityService { currentDate) def recordCreateTagActivity(userName: String, repositoryName: String, activityUserName: String, - tagName: String, commits: List[util.JGitUtil.CommitInfo])(implicit s: Session): Unit = + tagName: String, commits: List[JGitUtil.CommitInfo])(implicit s: Session): Unit = Activities insert Activity(userName, repositoryName, activityUserName, "create_tag", s"[user:${activityUserName}] created tag [tag:${userName}/${repositoryName}#${tagName}] at [repo:${userName}/${repositoryName}]", @@ -137,7 +138,7 @@ trait ActivityService { currentDate) def recordDeleteTagActivity(userName: String, repositoryName: String, activityUserName: String, - tagName: String, commits: List[util.JGitUtil.CommitInfo])(implicit s: Session): Unit = + tagName: String, commits: List[JGitUtil.CommitInfo])(implicit s: Session): Unit = Activities insert Activity(userName, repositoryName, activityUserName, "delete_tag", s"[user:${activityUserName}] deleted tag ${tagName} at [repo:${userName}/${repositoryName}]", diff --git a/src/main/scala/service/CommitsService.scala b/src/main/scala/gitbucket/core/service/CommitsService.scala similarity index 89% rename from src/main/scala/service/CommitsService.scala rename to src/main/scala/gitbucket/core/service/CommitsService.scala index 6f70e3c7d..fbef7cd69 100644 --- a/src/main/scala/service/CommitsService.scala +++ b/src/main/scala/gitbucket/core/service/CommitsService.scala @@ -1,13 +1,14 @@ -package service +package gitbucket.core.service + +import gitbucket.core.model.CommitComment +import gitbucket.core.util.{StringUtil, Implicits} import scala.slick.jdbc.{StaticQuery => Q} import Q.interpolation - -import model.Profile._ +import gitbucket.core.model.Profile._ import profile.simple._ -import model.CommitComment -import util.Implicits._ -import util.StringUtil._ +import Implicits._ +import StringUtil._ trait CommitsService { diff --git a/src/main/scala/service/IssuesService.scala b/src/main/scala/gitbucket/core/service/IssuesService.scala similarity index 99% rename from src/main/scala/service/IssuesService.scala rename to src/main/scala/gitbucket/core/service/IssuesService.scala index cf7ac0054..0d412870f 100644 --- a/src/main/scala/service/IssuesService.scala +++ b/src/main/scala/gitbucket/core/service/IssuesService.scala @@ -1,13 +1,13 @@ -package service +package gitbucket.core.service +import gitbucket.core.model._ +import gitbucket.core.util.StringUtil._ +import gitbucket.core.util.Implicits._ import scala.slick.jdbc.{StaticQuery => Q} import Q.interpolation -import model.Profile._ +import gitbucket.core.model.Profile._ import profile.simple._ -import model.{Issue, IssueComment, IssueLabel, Label} -import util.Implicits._ -import util.StringUtil._ trait IssuesService { import IssuesService._ diff --git a/src/main/scala/service/LabelsService.scala b/src/main/scala/gitbucket/core/service/LabelsService.scala similarity index 92% rename from src/main/scala/service/LabelsService.scala rename to src/main/scala/gitbucket/core/service/LabelsService.scala index de1dcb85f..35b5d2de3 100644 --- a/src/main/scala/service/LabelsService.scala +++ b/src/main/scala/gitbucket/core/service/LabelsService.scala @@ -1,8 +1,8 @@ -package service +package gitbucket.core.service -import model.Profile._ +import gitbucket.core.model.Label +import gitbucket.core.model.Profile._ import profile.simple._ -import model.Label trait LabelsService { diff --git a/src/main/scala/service/MilestonesService.scala b/src/main/scala/gitbucket/core/service/MilestonesService.scala similarity index 92% rename from src/main/scala/service/MilestonesService.scala rename to src/main/scala/gitbucket/core/service/MilestonesService.scala index 476e0c4bf..691ca2e08 100644 --- a/src/main/scala/service/MilestonesService.scala +++ b/src/main/scala/gitbucket/core/service/MilestonesService.scala @@ -1,10 +1,10 @@ -package service +package gitbucket.core.service -import model.Profile._ +import gitbucket.core.model.Milestone +import gitbucket.core.model.Profile._ import profile.simple._ -import model.Milestone -// TODO [Slick 2.0]NOT import directly? -import model.Profile.dateColumnType +// TODO Why is direct import required? +import gitbucket.core.model.Profile.dateColumnType trait MilestonesService { diff --git a/src/main/scala/service/PluginService.scala b/src/main/scala/gitbucket/core/service/PluginService.scala similarity index 86% rename from src/main/scala/service/PluginService.scala rename to src/main/scala/gitbucket/core/service/PluginService.scala index d1bb9d88d..99a20d831 100644 --- a/src/main/scala/service/PluginService.scala +++ b/src/main/scala/gitbucket/core/service/PluginService.scala @@ -1,8 +1,8 @@ -package service +package gitbucket.core.service -import model.Profile._ +import gitbucket.core.model.Plugin +import gitbucket.core.model.Profile._ import profile.simple._ -import model.Plugin trait PluginService { diff --git a/src/main/scala/service/PullRequestService.scala b/src/main/scala/gitbucket/core/service/PullRequestService.scala similarity index 97% rename from src/main/scala/service/PullRequestService.scala rename to src/main/scala/gitbucket/core/service/PullRequestService.scala index 1f09d7f4b..456980ab4 100644 --- a/src/main/scala/service/PullRequestService.scala +++ b/src/main/scala/gitbucket/core/service/PullRequestService.scala @@ -1,9 +1,9 @@ -package service +package gitbucket.core.service -import model.Profile._ +import gitbucket.core.model.{Issue, PullRequest} +import gitbucket.core.model.Profile._ +import gitbucket.core.util.JGitUtil import profile.simple._ -import model.{PullRequest, Issue} -import util.JGitUtil trait PullRequestService { self: IssuesService => import PullRequestService._ diff --git a/src/main/scala/service/RepositorySearchService.scala b/src/main/scala/gitbucket/core/service/RepositorySearchService.scala similarity index 94% rename from src/main/scala/service/RepositorySearchService.scala rename to src/main/scala/gitbucket/core/service/RepositorySearchService.scala index f727af1e2..84e94e471 100644 --- a/src/main/scala/service/RepositorySearchService.scala +++ b/src/main/scala/gitbucket/core/service/RepositorySearchService.scala @@ -1,13 +1,15 @@ -package service +package gitbucket.core.service -import util.{FileUtil, StringUtil, JGitUtil} -import util.Directory._ -import util.ControlUtil._ +import gitbucket.core.model.Issue +import gitbucket.core.util._ +import gitbucket.core.util.StringUtil +import Directory._ +import ControlUtil._ import org.eclipse.jgit.revwalk.RevWalk import org.eclipse.jgit.treewalk.TreeWalk import org.eclipse.jgit.lib.FileMode import org.eclipse.jgit.api.Git -import model.Profile._ +import gitbucket.core.model.Profile._ import profile.simple._ trait RepositorySearchService { self: IssuesService => @@ -108,7 +110,7 @@ object RepositorySearchService { case class SearchResult( files : List[(String, String)], - issues: List[(model.Issue, Int, String)]) + issues: List[(Issue, Int, String)]) case class IssueSearchResult( issueId: Int, diff --git a/src/main/scala/service/RepositoryService.scala b/src/main/scala/gitbucket/core/service/RepositoryService.scala similarity index 98% rename from src/main/scala/service/RepositoryService.scala rename to src/main/scala/gitbucket/core/service/RepositoryService.scala index f54291b29..ef99da13b 100644 --- a/src/main/scala/service/RepositoryService.scala +++ b/src/main/scala/gitbucket/core/service/RepositoryService.scala @@ -1,9 +1,9 @@ -package service +package gitbucket.core.service -import model.Profile._ +import gitbucket.core.model.{Collaborator, Repository, Account} +import gitbucket.core.model.Profile._ +import gitbucket.core.util.JGitUtil import profile.simple._ -import model.{Repository, Account, Collaborator, Label} -import util.JGitUtil trait RepositoryService { self: AccountService => import RepositoryService._ @@ -375,7 +375,7 @@ object RepositoryService { case class RepositoryInfo(owner: String, name: String, httpUrl: String, repository: Repository, issueCount: Int, pullCount: Int, commitCount: Int, forkedCount: Int, - branchList: Seq[String], tags: Seq[util.JGitUtil.TagInfo], managers: Seq[String]){ + branchList: Seq[String], tags: Seq[JGitUtil.TagInfo], managers: Seq[String]){ lazy val host = """^https?://(.+?)(:\d+)?/""".r.findFirstMatchIn(httpUrl).get.group(1) diff --git a/src/main/scala/service/RequestCache.scala b/src/main/scala/gitbucket/core/service/RequestCache.scala similarity index 58% rename from src/main/scala/service/RequestCache.scala rename to src/main/scala/gitbucket/core/service/RequestCache.scala index 4ff502b5e..768a3b49c 100644 --- a/src/main/scala/service/RequestCache.scala +++ b/src/main/scala/gitbucket/core/service/RequestCache.scala @@ -1,7 +1,9 @@ -package service +package gitbucket.core.service -import model.{Account, Issue, Session} -import util.Implicits.request2Session +import gitbucket.core.model.{Session, Issue, Account} +import gitbucket.core.util.Implicits +import gitbucket.core.controller.Context +import Implicits.request2Session /** * This service is used for a view helper mainly. @@ -11,25 +13,22 @@ import util.Implicits.request2Session */ trait RequestCache extends SystemSettingsService with AccountService with IssuesService { - private implicit def context2Session(implicit context: app.Context): Session = + private implicit def context2Session(implicit context: Context): Session = request2Session(context.request) - def getIssue(userName: String, repositoryName: String, issueId: String) - (implicit context: app.Context): Option[Issue] = { + def getIssue(userName: String, repositoryName: String, issueId: String)(implicit context: Context): Option[Issue] = { context.cache(s"issue.${userName}/${repositoryName}#${issueId}"){ super.getIssue(userName, repositoryName, issueId) } } - def getAccountByUserName(userName: String) - (implicit context: app.Context): Option[Account] = { + def getAccountByUserName(userName: String)(implicit context: Context): Option[Account] = { context.cache(s"account.${userName}"){ super.getAccountByUserName(userName) } } - def getAccountByMailAddress(mailAddress: String) - (implicit context: app.Context): Option[Account] = { + def getAccountByMailAddress(mailAddress: String)(implicit context: Context): Option[Account] = { context.cache(s"account.${mailAddress}"){ super.getAccountByMailAddress(mailAddress) } diff --git a/src/main/scala/service/SshKeyService.scala b/src/main/scala/gitbucket/core/service/SshKeyService.scala similarity index 83% rename from src/main/scala/service/SshKeyService.scala rename to src/main/scala/gitbucket/core/service/SshKeyService.scala index 4446084a4..4113d2c92 100644 --- a/src/main/scala/service/SshKeyService.scala +++ b/src/main/scala/gitbucket/core/service/SshKeyService.scala @@ -1,8 +1,8 @@ -package service +package gitbucket.core.service -import model.Profile._ +import gitbucket.core.model.SshKey +import gitbucket.core.model.Profile._ import profile.simple._ -import model.SshKey trait SshKeyService { diff --git a/src/main/scala/service/SystemSettingsService.scala b/src/main/scala/gitbucket/core/service/SystemSettingsService.scala similarity index 98% rename from src/main/scala/service/SystemSettingsService.scala rename to src/main/scala/gitbucket/core/service/SystemSettingsService.scala index 156a23b7b..6a3b8d33f 100644 --- a/src/main/scala/service/SystemSettingsService.scala +++ b/src/main/scala/gitbucket/core/service/SystemSettingsService.scala @@ -1,7 +1,8 @@ -package service +package gitbucket.core.service -import util.Directory._ -import util.ControlUtil._ +import gitbucket.core.util.{Directory, ControlUtil} +import Directory._ +import ControlUtil._ import SystemSettingsService._ import javax.servlet.http.HttpServletRequest diff --git a/src/main/scala/service/WebHookService.scala b/src/main/scala/gitbucket/core/service/WebHookService.scala similarity index 94% rename from src/main/scala/service/WebHookService.scala rename to src/main/scala/gitbucket/core/service/WebHookService.scala index a2dafbf51..f4d8d4cdb 100644 --- a/src/main/scala/service/WebHookService.scala +++ b/src/main/scala/gitbucket/core/service/WebHookService.scala @@ -1,13 +1,14 @@ -package service +package gitbucket.core.service -import model.Profile._ +import gitbucket.core.model.{WebHook, Account} +import gitbucket.core.model.Profile._ +import gitbucket.core.service.RepositoryService.RepositoryInfo +import gitbucket.core.util.JGitUtil import profile.simple._ -import model.{WebHook, Account} import org.slf4j.LoggerFactory -import service.RepositoryService.RepositoryInfo -import util.JGitUtil +import RepositoryService.RepositoryInfo import org.eclipse.jgit.diff.DiffEntry -import util.JGitUtil.CommitInfo +import JGitUtil.CommitInfo import org.eclipse.jgit.api.Git import org.apache.http.message.BasicNameValuePair import org.apache.http.client.entity.UrlEncodedFormEntity diff --git a/src/main/scala/service/WikiService.scala b/src/main/scala/gitbucket/core/service/WikiService.scala similarity index 95% rename from src/main/scala/service/WikiService.scala rename to src/main/scala/gitbucket/core/service/WikiService.scala index add502131..f317c5187 100644 --- a/src/main/scala/service/WikiService.scala +++ b/src/main/scala/gitbucket/core/service/WikiService.scala @@ -1,9 +1,10 @@ -package service +package gitbucket.core.service import java.util.Date +import gitbucket.core.model.Account +import gitbucket.core.util._ +import gitbucket.core.util.ControlUtil._ import org.eclipse.jgit.api.Git -import util._ -import _root_.util.ControlUtil._ import org.eclipse.jgit.treewalk.CanonicalTreeParser import org.eclipse.jgit.lib._ import org.eclipse.jgit.dircache.DirCache @@ -12,7 +13,7 @@ import java.io.ByteArrayInputStream import org.eclipse.jgit.patch._ import org.eclipse.jgit.api.errors.PatchFormatException import scala.collection.JavaConverters._ -import service.RepositoryService.RepositoryInfo +import RepositoryService.RepositoryInfo object WikiService { @@ -46,7 +47,7 @@ object WikiService { trait WikiService { import WikiService._ - def createWikiRepository(loginAccount: model.Account, owner: String, repository: String): Unit = + def createWikiRepository(loginAccount: Account, owner: String, repository: String): Unit = LockUtil.lock(s"${owner}/${repository}/wiki"){ defining(Directory.getWikiRepositoryDir(owner, repository)){ dir => if(!dir.exists){ @@ -102,7 +103,7 @@ trait WikiService { * Reverts specified changes. */ def revertWikiPage(owner: String, repository: String, from: String, to: String, - committer: model.Account, pageName: Option[String]): Boolean = { + committer: Account, pageName: Option[String]): Boolean = { case class RevertInfo(operation: String, filePath: String, source: String) @@ -204,7 +205,7 @@ trait WikiService { * Save the wiki page. */ def saveWikiPage(owner: String, repository: String, currentPageName: String, newPageName: String, - content: String, committer: model.Account, message: String, currentId: Option[String]): Option[String] = { + content: String, committer: Account, message: String, currentId: Option[String]): Option[String] = { LockUtil.lock(s"${owner}/${repository}/wiki"){ using(Git.open(Directory.getWikiRepositoryDir(owner, repository))){ git => val builder = DirCache.newInCore.builder() diff --git a/src/main/scala/servlet/BasicAuthenticationFilter.scala b/src/main/scala/gitbucket/core/servlet/BasicAuthenticationFilter.scala similarity index 91% rename from src/main/scala/servlet/BasicAuthenticationFilter.scala rename to src/main/scala/gitbucket/core/servlet/BasicAuthenticationFilter.scala index cbecfc1ac..ebd7bc800 100644 --- a/src/main/scala/servlet/BasicAuthenticationFilter.scala +++ b/src/main/scala/gitbucket/core/servlet/BasicAuthenticationFilter.scala @@ -1,16 +1,15 @@ -package servlet +package gitbucket.core.servlet import javax.servlet._ import javax.servlet.http._ -import service.{SystemSettingsService, AccountService, RepositoryService} -import model._ +import gitbucket.core.service.{RepositoryService, AccountService, SystemSettingsService} +import gitbucket.core.util.{ControlUtil, Keys, Implicits} import org.slf4j.LoggerFactory -import util.Implicits._ -import util.ControlUtil._ -import util.Keys +import Implicits._ +import ControlUtil._ /** - * Provides BASIC Authentication for [[servlet.GitRepositoryServlet]]. + * Provides BASIC Authentication for [[GitRepositoryServlet]]. */ class BasicAuthenticationFilter extends Filter with RepositoryService with AccountService with SystemSettingsService { diff --git a/src/main/scala/servlet/GitRepositoryServlet.scala b/src/main/scala/gitbucket/core/servlet/GitRepositoryServlet.scala similarity index 95% rename from src/main/scala/servlet/GitRepositoryServlet.scala rename to src/main/scala/gitbucket/core/servlet/GitRepositoryServlet.scala index 7fde407d0..cea10d200 100644 --- a/src/main/scala/servlet/GitRepositoryServlet.scala +++ b/src/main/scala/gitbucket/core/servlet/GitRepositoryServlet.scala @@ -1,5 +1,8 @@ -package servlet +package gitbucket.core.servlet +import gitbucket.core.model.Session +import gitbucket.core.service._ +import gitbucket.core.util._ import org.eclipse.jgit.http.server.GitServlet import org.eclipse.jgit.lib._ import org.eclipse.jgit.transport._ @@ -9,21 +12,19 @@ import org.slf4j.LoggerFactory import javax.servlet.ServletConfig import javax.servlet.ServletContext import javax.servlet.http.{HttpServletResponse, HttpServletRequest} -import util.{StringUtil, Keys, JGitUtil, Directory} -import util.ControlUtil._ -import util.Implicits._ -import service._ +import gitbucket.core.util.StringUtil +import gitbucket.core.util.ControlUtil._ +import gitbucket.core.util.Implicits._ import WebHookService._ import org.eclipse.jgit.api.Git -import util.JGitUtil.CommitInfo -import service.IssuesService.IssueSearchCondition -import model.Session +import JGitUtil.CommitInfo +import IssuesService.IssueSearchCondition /** * Provides Git repository via HTTP. * * This servlet provides only Git repository functionality. - * Authentication is provided by [[servlet.BasicAuthenticationFilter]]. + * Authentication is provided by [[BasicAuthenticationFilter]]. */ class GitRepositoryServlet extends GitServlet with SystemSettingsService { diff --git a/src/main/scala/servlet/InitializeListener.scala b/src/main/scala/gitbucket/core/servlet/InitializeListener.scala similarity index 96% rename from src/main/scala/servlet/InitializeListener.scala rename to src/main/scala/gitbucket/core/servlet/InitializeListener.scala index fdc3c48bf..84d7de49e 100644 --- a/src/main/scala/servlet/InitializeListener.scala +++ b/src/main/scala/gitbucket/core/servlet/InitializeListener.scala @@ -1,17 +1,19 @@ -package servlet +package gitbucket.core.servlet import java.io.File import java.sql.{DriverManager, Connection} +import gitbucket.core.plugin.PluginRegistry +import gitbucket.core.util._ import org.apache.commons.io.FileUtils import javax.servlet.{ServletContextListener, ServletContextEvent} import org.slf4j.LoggerFactory -import util.Directory._ -import util.ControlUtil._ -import util.JDBCUtil._ +import Directory._ +import ControlUtil._ +import JDBCUtil._ import org.eclipse.jgit.api.Git -import util.{Version, Versions} -import plugin._ -import util.{DatabaseConfig, Directory} +import gitbucket.core.util.Versions +import gitbucket.core.util.Directory +import gitbucket.core.plugin._ object AutoUpdate { diff --git a/src/main/scala/servlet/SessionCleanupListener.scala b/src/main/scala/gitbucket/core/servlet/SessionCleanupListener.scala similarity index 82% rename from src/main/scala/servlet/SessionCleanupListener.scala rename to src/main/scala/gitbucket/core/servlet/SessionCleanupListener.scala index ee4ea7b2d..97ab13bd1 100644 --- a/src/main/scala/servlet/SessionCleanupListener.scala +++ b/src/main/scala/gitbucket/core/servlet/SessionCleanupListener.scala @@ -1,8 +1,9 @@ -package servlet +package gitbucket.core.servlet import javax.servlet.http.{HttpSessionEvent, HttpSessionListener} +import gitbucket.core.util.Directory import org.apache.commons.io.FileUtils -import util.Directory._ +import Directory._ /** * Removes session associated temporary files when session is destroyed. diff --git a/src/main/scala/servlet/TransactionFilter.scala b/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala similarity index 93% rename from src/main/scala/servlet/TransactionFilter.scala rename to src/main/scala/gitbucket/core/servlet/TransactionFilter.scala index 20d37f528..2fdd17a9c 100644 --- a/src/main/scala/servlet/TransactionFilter.scala +++ b/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala @@ -1,11 +1,12 @@ -package servlet +package gitbucket.core.servlet import javax.servlet._ import javax.servlet.http.HttpServletRequest import com.mchange.v2.c3p0.ComboPooledDataSource +import gitbucket.core.util.DatabaseConfig import org.slf4j.LoggerFactory import slick.jdbc.JdbcBackend.{Database => SlickDatabase, Session} -import util.{DatabaseConfig, Keys} +import gitbucket.core.util.Keys /** * Controls the transaction with the open session in view pattern. diff --git a/src/main/scala/ssh/GitCommand.scala b/src/main/scala/gitbucket/core/ssh/GitCommand.scala similarity index 93% rename from src/main/scala/ssh/GitCommand.scala rename to src/main/scala/gitbucket/core/ssh/GitCommand.scala index 35fb67bae..c78ff82f7 100644 --- a/src/main/scala/ssh/GitCommand.scala +++ b/src/main/scala/gitbucket/core/ssh/GitCommand.scala @@ -1,17 +1,18 @@ -package ssh +package gitbucket.core.ssh +import gitbucket.core.model.Session +import gitbucket.core.service.{RepositoryService, AccountService, SystemSettingsService} +import gitbucket.core.servlet.{Database, CommitLogHook} +import gitbucket.core.util.{Directory, ControlUtil} import org.apache.sshd.server.{CommandFactory, Environment, ExitCallback, Command} import org.slf4j.LoggerFactory import java.io.{InputStream, OutputStream} -import util.ControlUtil._ +import ControlUtil._ import org.eclipse.jgit.api.Git -import util.Directory._ +import Directory._ import org.eclipse.jgit.transport.{ReceivePack, UploadPack} import org.apache.sshd.server.command.UnknownCommand -import servlet.{Database, CommitLogHook} -import service.{AccountService, RepositoryService, SystemSettingsService} import org.eclipse.jgit.errors.RepositoryNotFoundException -import model.Session object GitCommand { val CommandRegex = """\Agit-(upload|receive)-pack '/([a-zA-Z0-9\-_.]+)/([a-zA-Z0-9\-_.]+).git'\Z""".r diff --git a/src/main/scala/ssh/NoShell.scala b/src/main/scala/gitbucket/core/ssh/NoShell.scala similarity index 96% rename from src/main/scala/ssh/NoShell.scala rename to src/main/scala/gitbucket/core/ssh/NoShell.scala index c107be695..bd30ccf45 100644 --- a/src/main/scala/ssh/NoShell.scala +++ b/src/main/scala/gitbucket/core/ssh/NoShell.scala @@ -1,10 +1,10 @@ -package ssh +package gitbucket.core.ssh +import gitbucket.core.service.SystemSettingsService import org.apache.sshd.common.Factory import org.apache.sshd.server.{Environment, ExitCallback, Command} import java.io.{OutputStream, InputStream} import org.eclipse.jgit.lib.Constants -import service.SystemSettingsService class NoShell extends Factory[Command] with SystemSettingsService { override def create(): Command = new Command() { diff --git a/src/main/scala/ssh/PublicKeyAuthenticator.scala b/src/main/scala/gitbucket/core/ssh/PublicKeyAuthenticator.scala similarity index 84% rename from src/main/scala/ssh/PublicKeyAuthenticator.scala rename to src/main/scala/gitbucket/core/ssh/PublicKeyAuthenticator.scala index ddcc72460..daf5c30f4 100644 --- a/src/main/scala/ssh/PublicKeyAuthenticator.scala +++ b/src/main/scala/gitbucket/core/ssh/PublicKeyAuthenticator.scala @@ -1,10 +1,10 @@ -package ssh +package gitbucket.core.ssh +import gitbucket.core.service.SshKeyService +import gitbucket.core.servlet.Database import org.apache.sshd.server.PublickeyAuthenticator import org.apache.sshd.server.session.ServerSession import java.security.PublicKey -import service.SshKeyService -import servlet.Database class PublicKeyAuthenticator extends PublickeyAuthenticator with SshKeyService { diff --git a/src/main/scala/ssh/SshServerListener.scala b/src/main/scala/gitbucket/core/ssh/SshServerListener.scala similarity index 94% rename from src/main/scala/ssh/SshServerListener.scala rename to src/main/scala/gitbucket/core/ssh/SshServerListener.scala index b441caefe..1288eb106 100644 --- a/src/main/scala/ssh/SshServerListener.scala +++ b/src/main/scala/gitbucket/core/ssh/SshServerListener.scala @@ -1,10 +1,10 @@ -package ssh +package gitbucket.core.ssh import javax.servlet.{ServletContextEvent, ServletContextListener} +import gitbucket.core.service.SystemSettingsService +import gitbucket.core.util.Directory import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider import org.slf4j.LoggerFactory -import util.Directory -import service.SystemSettingsService import java.util.concurrent.atomic.AtomicBoolean object SshServer { diff --git a/src/main/scala/ssh/SshUtil.scala b/src/main/scala/gitbucket/core/ssh/SshUtil.scala similarity index 97% rename from src/main/scala/ssh/SshUtil.scala rename to src/main/scala/gitbucket/core/ssh/SshUtil.scala index 9d6484c65..512332cec 100644 --- a/src/main/scala/ssh/SshUtil.scala +++ b/src/main/scala/gitbucket/core/ssh/SshUtil.scala @@ -1,4 +1,4 @@ -package ssh +package gitbucket.core.ssh import java.security.PublicKey import org.slf4j.LoggerFactory diff --git a/src/main/scala/util/Authenticator.scala b/src/main/scala/gitbucket/core/util/Authenticator.scala similarity index 97% rename from src/main/scala/util/Authenticator.scala rename to src/main/scala/gitbucket/core/util/Authenticator.scala index f40af7bcc..49de66515 100644 --- a/src/main/scala/util/Authenticator.scala +++ b/src/main/scala/gitbucket/core/util/Authenticator.scala @@ -1,10 +1,10 @@ -package util +package gitbucket.core.util -import app.ControllerBase -import service._ +import gitbucket.core.controller.ControllerBase +import gitbucket.core.service.{RepositoryService, AccountService} import RepositoryService.RepositoryInfo -import util.Implicits._ -import util.ControlUtil._ +import Implicits._ +import ControlUtil._ /** * Allows only oneself and administrators. diff --git a/src/main/scala/util/ControlUtil.scala b/src/main/scala/gitbucket/core/util/ControlUtil.scala similarity index 97% rename from src/main/scala/util/ControlUtil.scala rename to src/main/scala/gitbucket/core/util/ControlUtil.scala index 7945f32a5..268e69274 100644 --- a/src/main/scala/util/ControlUtil.scala +++ b/src/main/scala/gitbucket/core/util/ControlUtil.scala @@ -1,4 +1,4 @@ -package util +package gitbucket.core.util import org.eclipse.jgit.api.Git import org.eclipse.jgit.revwalk.RevWalk diff --git a/src/main/scala/util/DatabaseConfig.scala b/src/main/scala/gitbucket/core/util/DatabaseConfig.scala similarity index 89% rename from src/main/scala/util/DatabaseConfig.scala rename to src/main/scala/gitbucket/core/util/DatabaseConfig.scala index 86453e39b..ffe7ceeb9 100644 --- a/src/main/scala/util/DatabaseConfig.scala +++ b/src/main/scala/gitbucket/core/util/DatabaseConfig.scala @@ -1,7 +1,7 @@ -package util +package gitbucket.core.util import com.typesafe.config.ConfigFactory -import util.Directory.DatabaseHome +import Directory.DatabaseHome object DatabaseConfig { diff --git a/src/main/scala/util/Directory.scala b/src/main/scala/gitbucket/core/util/Directory.scala similarity index 98% rename from src/main/scala/util/Directory.scala rename to src/main/scala/gitbucket/core/util/Directory.scala index 900817109..de97bbb8a 100644 --- a/src/main/scala/util/Directory.scala +++ b/src/main/scala/gitbucket/core/util/Directory.scala @@ -1,7 +1,7 @@ -package util +package gitbucket.core.util import java.io.File -import util.ControlUtil._ +import ControlUtil._ import org.apache.commons.io.FileUtils /** diff --git a/src/main/scala/util/FileUtil.scala b/src/main/scala/gitbucket/core/util/FileUtil.scala similarity index 96% rename from src/main/scala/util/FileUtil.scala rename to src/main/scala/gitbucket/core/util/FileUtil.scala index 0145db476..d3428fb53 100644 --- a/src/main/scala/util/FileUtil.scala +++ b/src/main/scala/gitbucket/core/util/FileUtil.scala @@ -1,9 +1,9 @@ -package util +package gitbucket.core.util import org.apache.commons.io.FileUtils import java.net.URLConnection import java.io.File -import util.ControlUtil._ +import ControlUtil._ import scala.util.Random object FileUtil { diff --git a/src/main/scala/util/Implicits.scala b/src/main/scala/gitbucket/core/util/Implicits.scala similarity index 97% rename from src/main/scala/util/Implicits.scala rename to src/main/scala/gitbucket/core/util/Implicits.scala index f1b11157d..abe71ea12 100644 --- a/src/main/scala/util/Implicits.scala +++ b/src/main/scala/gitbucket/core/util/Implicits.scala @@ -1,9 +1,10 @@ -package util +package gitbucket.core.util + +import gitbucket.core.servlet.Database import scala.util.matching.Regex import scala.util.control.Exception._ import slick.jdbc.JdbcBackend -import servlet.Database import javax.servlet.http.{HttpSession, HttpServletRequest} /** diff --git a/src/main/scala/util/JDBCUtil.scala b/src/main/scala/gitbucket/core/util/JDBCUtil.scala similarity index 96% rename from src/main/scala/util/JDBCUtil.scala rename to src/main/scala/gitbucket/core/util/JDBCUtil.scala index 5d880d0c5..41a2b1a56 100644 --- a/src/main/scala/util/JDBCUtil.scala +++ b/src/main/scala/gitbucket/core/util/JDBCUtil.scala @@ -1,7 +1,7 @@ -package util +package gitbucket.core.util import java.sql._ -import util.ControlUtil._ +import ControlUtil._ import scala.collection.mutable.ListBuffer /** diff --git a/src/main/scala/util/JGitUtil.scala b/src/main/scala/gitbucket/core/util/JGitUtil.scala similarity index 99% rename from src/main/scala/util/JGitUtil.scala rename to src/main/scala/gitbucket/core/util/JGitUtil.scala index 5c7be3fe1..d2d531b95 100644 --- a/src/main/scala/util/JGitUtil.scala +++ b/src/main/scala/gitbucket/core/util/JGitUtil.scala @@ -1,9 +1,10 @@ -package util +package gitbucket.core.util +import gitbucket.core.service.RepositoryService import org.eclipse.jgit.api.Git -import util.Directory._ -import util.StringUtil._ -import util.ControlUtil._ +import Directory._ +import StringUtil._ +import ControlUtil._ import scala.annotation.tailrec import scala.collection.JavaConverters._ import org.eclipse.jgit.lib._ @@ -16,7 +17,6 @@ import org.eclipse.jgit.errors.{ConfigInvalidException, MissingObjectException} import org.eclipse.jgit.transport.RefSpec import java.util.Date import org.eclipse.jgit.api.errors.{JGitInternalException, InvalidRefNameException, RefAlreadyExistsException, NoHeadException} -import service.RepositoryService import org.eclipse.jgit.dircache.DirCacheEntry import org.slf4j.LoggerFactory diff --git a/src/main/scala/util/Keys.scala b/src/main/scala/gitbucket/core/util/Keys.scala similarity index 98% rename from src/main/scala/util/Keys.scala rename to src/main/scala/gitbucket/core/util/Keys.scala index a93405894..a83034493 100644 --- a/src/main/scala/util/Keys.scala +++ b/src/main/scala/gitbucket/core/util/Keys.scala @@ -1,4 +1,4 @@ -package util +package gitbucket.core.util /** * Define key strings for request attributes, session attributes or flash attributes. diff --git a/src/main/scala/util/LDAPUtil.scala b/src/main/scala/gitbucket/core/util/LDAPUtil.scala similarity index 97% rename from src/main/scala/util/LDAPUtil.scala rename to src/main/scala/gitbucket/core/util/LDAPUtil.scala index c8d741f83..98daddc08 100644 --- a/src/main/scala/util/LDAPUtil.scala +++ b/src/main/scala/gitbucket/core/util/LDAPUtil.scala @@ -1,13 +1,13 @@ -package util +package gitbucket.core.util -import util.ControlUtil._ -import service.SystemSettingsService +import gitbucket.core.model.Account +import ControlUtil._ +import gitbucket.core.service.SystemSettingsService +import gitbucket.core.service.SystemSettingsService.Ldap import com.novell.ldap._ import java.security.Security import org.slf4j.LoggerFactory -import service.SystemSettingsService.Ldap import scala.annotation.tailrec -import model.Account /** * Utility for LDAP authentication. diff --git a/src/main/scala/util/LockUtil.scala b/src/main/scala/gitbucket/core/util/LockUtil.scala similarity index 93% rename from src/main/scala/util/LockUtil.scala rename to src/main/scala/gitbucket/core/util/LockUtil.scala index 267b28bbd..4b13d177c 100644 --- a/src/main/scala/util/LockUtil.scala +++ b/src/main/scala/gitbucket/core/util/LockUtil.scala @@ -1,8 +1,8 @@ -package util +package gitbucket.core.util import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.locks.{ReentrantLock, Lock} -import util.ControlUtil._ +import ControlUtil._ object LockUtil { diff --git a/src/main/scala/util/Notifier.scala b/src/main/scala/gitbucket/core/util/Notifier.scala similarity index 87% rename from src/main/scala/util/Notifier.scala rename to src/main/scala/gitbucket/core/util/Notifier.scala index f9e43486f..9e8091777 100644 --- a/src/main/scala/util/Notifier.scala +++ b/src/main/scala/gitbucket/core/util/Notifier.scala @@ -1,22 +1,24 @@ -package util +package gitbucket.core.util + +import gitbucket.core.model.{Session, Issue} +import gitbucket.core.service.{RepositoryService, AccountService, IssuesService, SystemSettingsService} +import gitbucket.core.servlet.Database +import gitbucket.core.view.Markdown import scala.concurrent._ import ExecutionContext.Implicits.global import org.apache.commons.mail.{DefaultAuthenticator, HtmlEmail} import org.slf4j.LoggerFactory -import app.Context -import model.Session -import service.{AccountService, RepositoryService, IssuesService, SystemSettingsService} -import servlet.Database +import gitbucket.core.controller.Context import SystemSettingsService.Smtp -import _root_.util.ControlUtil.defining +import ControlUtil.defining trait Notifier extends RepositoryService with AccountService with IssuesService { def toNotify(r: RepositoryService.RepositoryInfo, issueId: Int, content: String) (msg: String => String)(implicit context: Context): Unit - protected def recipients(issue: model.Issue)(notify: String => Unit)(implicit session: Session, context: Context) = + protected def recipients(issue: Issue)(notify: String => Unit)(implicit session: Session, context: Context) = ( // individual repository's owner issue.userName :: @@ -74,7 +76,7 @@ class Mailer(private val smtp: Smtp) extends Notifier { getIssue(r.owner, r.name, issueId.toString) foreach { issue => defining( s"[${r.name}] ${issue.title} (#${issueId})" -> - msg(view.Markdown.toHtml(content, r, false, true))) { case (subject, msg) => + msg(Markdown.toHtml(content, r, false, true))) { case (subject, msg) => recipients(issue) { to => val email = new HtmlEmail email.setHostName(smtp.host) diff --git a/src/main/scala/util/StringUtil.scala b/src/main/scala/gitbucket/core/util/StringUtil.scala similarity index 96% rename from src/main/scala/util/StringUtil.scala rename to src/main/scala/gitbucket/core/util/StringUtil.scala index dac3de362..4bb1cb071 100644 --- a/src/main/scala/util/StringUtil.scala +++ b/src/main/scala/gitbucket/core/util/StringUtil.scala @@ -1,8 +1,8 @@ -package util +package gitbucket.core.util import java.net.{URLDecoder, URLEncoder} import org.mozilla.universalchardet.UniversalDetector -import util.ControlUtil._ +import ControlUtil._ import org.apache.commons.io.input.BOMInputStream import org.apache.commons.io.IOUtils @@ -30,7 +30,7 @@ object StringUtil { value.replace("&", "&").replace("<", "<").replace(">", ">").replace("\"", """) /** - * Make string from byte array. Character encoding is detected automatically by [[util.StringUtil.detectEncoding]]. + * Make string from byte array. Character encoding is detected automatically by [[StringUtil.detectEncoding]]. * And if given bytes contains UTF-8 BOM, it's removed from returned string. */ def convertFromByteArray(content: Array[Byte]): String = diff --git a/src/main/scala/util/Validations.scala b/src/main/scala/gitbucket/core/util/Validations.scala similarity index 97% rename from src/main/scala/util/Validations.scala rename to src/main/scala/gitbucket/core/util/Validations.scala index ce4c1827c..7aa533ea9 100644 --- a/src/main/scala/util/Validations.scala +++ b/src/main/scala/gitbucket/core/util/Validations.scala @@ -1,4 +1,4 @@ -package util +package gitbucket.core.util import jp.sf.amateras.scalatra.forms._ import org.scalatra.i18n.Messages diff --git a/src/main/scala/util/Version.scala b/src/main/scala/gitbucket/core/util/Version.scala similarity index 97% rename from src/main/scala/util/Version.scala rename to src/main/scala/gitbucket/core/util/Version.scala index fed74a8e0..3c7ffe631 100644 --- a/src/main/scala/util/Version.scala +++ b/src/main/scala/gitbucket/core/util/Version.scala @@ -1,10 +1,10 @@ -package util +package gitbucket.core.util import java.sql.Connection import org.apache.commons.io.IOUtils import org.slf4j.LoggerFactory -import util.ControlUtil._ +import ControlUtil._ case class Version(majorVersion: Int, minorVersion: Int) { diff --git a/src/main/scala/view/AvatarImageProvider.scala b/src/main/scala/gitbucket/core/view/AvatarImageProvider.scala similarity index 90% rename from src/main/scala/view/AvatarImageProvider.scala rename to src/main/scala/gitbucket/core/view/AvatarImageProvider.scala index 8e610af34..8d316ab3f 100644 --- a/src/main/scala/view/AvatarImageProvider.scala +++ b/src/main/scala/gitbucket/core/view/AvatarImageProvider.scala @@ -1,8 +1,9 @@ -package view +package gitbucket.core.view -import service.RequestCache +import gitbucket.core.controller.Context +import gitbucket.core.service.RequestCache +import gitbucket.core.util.StringUtil import play.twirl.api.Html -import util.StringUtil trait AvatarImageProvider { self: RequestCache => @@ -11,7 +12,7 @@ trait AvatarImageProvider { self: RequestCache => * Looks up Gravatar if avatar icon has not been configured in user settings. */ protected def getAvatarImageHtml(userName: String, size: Int, - mailAddress: String = "", tooltip: Boolean = false)(implicit context: app.Context): Html = { + mailAddress: String = "", tooltip: Boolean = false)(implicit context: Context): Html = { val src = if(mailAddress.isEmpty){ // by user name diff --git a/src/main/scala/view/LinkConverter.scala b/src/main/scala/gitbucket/core/view/LinkConverter.scala similarity index 79% rename from src/main/scala/view/LinkConverter.scala rename to src/main/scala/gitbucket/core/view/LinkConverter.scala index 03f60099e..951a45da4 100644 --- a/src/main/scala/view/LinkConverter.scala +++ b/src/main/scala/gitbucket/core/view/LinkConverter.scala @@ -1,15 +1,17 @@ -package view +package gitbucket.core.view -import service.RequestCache -import util.Implicits.RichString +import gitbucket.core.controller.Context +import gitbucket.core.service.{RepositoryService, RequestCache} +import gitbucket.core.util.Implicits +import gitbucket.core.util.Implicits.RichString trait LinkConverter { self: RequestCache => /** * Converts issue id, username and commit id to link. */ - protected def convertRefsLinks(value: String, repository: service.RepositoryService.RepositoryInfo, - issueIdPrefix: String = "#")(implicit context: app.Context): String = { + protected def convertRefsLinks(value: String, repository: RepositoryService.RepositoryInfo, + issueIdPrefix: String = "#")(implicit context: Context): String = { value // escape HTML tags .replace("&", "&").replace("<", "<").replace(">", ">").replace("\"", """) diff --git a/src/main/scala/view/Markdown.scala b/src/main/scala/gitbucket/core/view/Markdown.scala similarity index 94% rename from src/main/scala/view/Markdown.scala rename to src/main/scala/gitbucket/core/view/Markdown.scala index 836e5c91f..fd0b19ce6 100644 --- a/src/main/scala/view/Markdown.scala +++ b/src/main/scala/gitbucket/core/view/Markdown.scala @@ -1,17 +1,18 @@ -package view +package gitbucket.core.view -import util.StringUtil -import util.ControlUtil._ -import util.Directory._ -import org.parboiled.common.StringUtils -import org.pegdown._ -import org.pegdown.ast._ -import org.pegdown.LinkRenderer.Rendering import java.text.Normalizer import java.util.Locale import java.util.regex.Pattern + +import gitbucket.core.controller.Context +import gitbucket.core.service.{RepositoryService, RequestCache, WikiService} +import gitbucket.core.util.StringUtil +import org.parboiled.common.StringUtils +import org.pegdown.LinkRenderer.Rendering +import org.pegdown._ +import org.pegdown.ast._ + import scala.collection.JavaConverters._ -import service.{RequestCache, WikiService} object Markdown { @@ -19,12 +20,12 @@ object Markdown { * Converts Markdown of Wiki pages to HTML. */ def toHtml(markdown: String, - repository: service.RepositoryService.RepositoryInfo, + repository: RepositoryService.RepositoryInfo, enableWikiLink: Boolean, enableRefsLink: Boolean, enableTaskList: Boolean = false, hasWritePermission: Boolean = false, - pages: List[String] = Nil)(implicit context: app.Context): String = { + pages: List[String] = Nil)(implicit context: Context): String = { // escape issue id val s = if(enableRefsLink){ @@ -45,8 +46,8 @@ object Markdown { } class GitBucketLinkRender( - context: app.Context, - repository: service.RepositoryService.RepositoryInfo, + context: Context, + repository: RepositoryService.RepositoryInfo, enableWikiLink: Boolean, pages: List[String]) extends LinkRenderer with WikiService { @@ -96,13 +97,13 @@ class GitBucketVerbatimSerializer extends VerbatimSerializer { class GitBucketHtmlSerializer( markdown: String, - repository: service.RepositoryService.RepositoryInfo, + repository: RepositoryService.RepositoryInfo, enableWikiLink: Boolean, enableRefsLink: Boolean, enableTaskList: Boolean, hasWritePermission: Boolean, pages: List[String] - )(implicit val context: app.Context) extends ToHtmlSerializer( + )(implicit val context: Context) extends ToHtmlSerializer( new GitBucketLinkRender(context, repository, enableWikiLink, pages), Map[String, VerbatimSerializer](VerbatimSerializer.DEFAULT -> new GitBucketVerbatimSerializer).asJava ) with LinkConverter with RequestCache { diff --git a/src/main/scala/view/Pagination.scala b/src/main/scala/gitbucket/core/view/Pagination.scala similarity index 97% rename from src/main/scala/view/Pagination.scala rename to src/main/scala/gitbucket/core/view/Pagination.scala index 8f2b62de4..ad9136804 100644 --- a/src/main/scala/view/Pagination.scala +++ b/src/main/scala/gitbucket/core/view/Pagination.scala @@ -1,4 +1,4 @@ -package view +package gitbucket.core.view /** * Provides control information for pagination. diff --git a/src/main/scala/view/helpers.scala b/src/main/scala/gitbucket/core/view/helpers.scala similarity index 88% rename from src/main/scala/view/helpers.scala rename to src/main/scala/gitbucket/core/view/helpers.scala index caea648e2..7d7b2b203 100644 --- a/src/main/scala/view/helpers.scala +++ b/src/main/scala/gitbucket/core/view/helpers.scala @@ -1,9 +1,12 @@ -package view -import java.util.{Locale, Date, TimeZone} +package gitbucket.core.view + import java.text.SimpleDateFormat +import java.util.{Date, Locale, TimeZone} + +import gitbucket.core.controller.Context +import gitbucket.core.service.{RepositoryService, RequestCache} +import gitbucket.core.util.{JGitUtil, StringUtil} import play.twirl.api.Html -import util.StringUtil -import service.RequestCache /** * Provides helper methods for Twirl templates. @@ -75,7 +78,7 @@ object helpers extends AvatarImageProvider with LinkConverter with RequestCache def plural(count: Int, singular: String, plural: String = ""): String = if(count == 1) singular else if(plural.isEmpty) singular + "s" else plural - private[this] val renderersBySuffix: Seq[(String, (List[String], String, String, service.RepositoryService.RepositoryInfo, Boolean, Boolean, app.Context) => Html)] = + private[this] val renderersBySuffix: Seq[(String, (List[String], String, String, RepositoryService.RepositoryInfo, Boolean, Boolean, Context) => Html)] = Seq( ".md" -> ((filePath, fileContent, branch, repository, enableWikiLink, enableRefsLink, context) => markdown(fileContent, repository, enableWikiLink, enableRefsLink)(context)), ".markdown" -> ((filePath, fileContent, branch, repository, enableWikiLink, enableRefsLink, context) => markdown(fileContent, repository, enableWikiLink, enableRefsLink)(context)) @@ -87,17 +90,17 @@ object helpers extends AvatarImageProvider with LinkConverter with RequestCache * Converts Markdown of Wiki pages to HTML. */ def markdown(value: String, - repository: service.RepositoryService.RepositoryInfo, + repository: RepositoryService.RepositoryInfo, enableWikiLink: Boolean, enableRefsLink: Boolean, enableTaskList: Boolean = false, hasWritePermission: Boolean = false, - pages: List[String] = Nil)(implicit context: app.Context): Html = + pages: List[String] = Nil)(implicit context: Context): Html = Html(Markdown.toHtml(value, repository, enableWikiLink, enableRefsLink, enableTaskList, hasWritePermission, pages)) def renderMarkup(filePath: List[String], fileContent: String, branch: String, - repository: service.RepositoryService.RepositoryInfo, - enableWikiLink: Boolean, enableRefsLink: Boolean)(implicit context: app.Context): Html = { + repository: RepositoryService.RepositoryInfo, + enableWikiLink: Boolean, enableRefsLink: Boolean)(implicit context: Context): Html = { val fileNameLower = filePath.reverse.head.toLowerCase renderersBySuffix.find { case (suffix, _) => fileNameLower.endsWith(suffix) } match { @@ -114,20 +117,20 @@ object helpers extends AvatarImageProvider with LinkConverter with RequestCache * Returns <img> which displays the avatar icon for the given user name. * This method looks up Gravatar if avatar icon has not been configured in user settings. */ - def avatar(userName: String, size: Int, tooltip: Boolean = false)(implicit context: app.Context): Html = + def avatar(userName: String, size: Int, tooltip: Boolean = false)(implicit context: Context): Html = getAvatarImageHtml(userName, size, "", tooltip) /** * Returns <img> which displays the avatar icon for the given mail address. * This method looks up Gravatar if avatar icon has not been configured in user settings. */ - def avatar(commit: util.JGitUtil.CommitInfo, size: Int)(implicit context: app.Context): Html = + def avatar(commit: JGitUtil.CommitInfo, size: Int)(implicit context: Context): Html = getAvatarImageHtml(commit.authorName, size, commit.authorEmailAddress) /** * Converts commit id, issue id and username to the link. */ - def link(value: String, repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context): Html = + def link(value: String, repository: RepositoryService.RepositoryInfo)(implicit context: Context): Html = Html(convertRefsLinks(value, repository)) def cut(value: String, length: Int): String = @@ -147,7 +150,7 @@ object helpers extends AvatarImageProvider with LinkConverter with RequestCache /** * Convert link notations in the activity message. */ - def activityMessage(message: String)(implicit context: app.Context): Html = + def activityMessage(message: String)(implicit context: Context): Html = Html(message .replaceAll("\\[issue:([^\\s]+?)/([^\\s]+?)#((\\d+))\\]" , s"""$$1/$$2#$$3""") .replaceAll("\\[pullreq:([^\\s]+?)/([^\\s]+?)#((\\d+))\\]" , s"""$$1/$$2#$$3""") @@ -170,34 +173,34 @@ object helpers extends AvatarImageProvider with LinkConverter with RequestCache /** * Generates the url to the repository. */ - def url(repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context): String = + def url(repository: RepositoryService.RepositoryInfo)(implicit context: Context): String = s"${context.path}/${repository.owner}/${repository.name}" /** * Generates the url to the account page. */ - def url(userName: String)(implicit context: app.Context): String = s"${context.path}/${userName}" + def url(userName: String)(implicit context: Context): String = s"${context.path}/${userName}" /** * Returns the url to the root of assets. */ - def assets(implicit context: app.Context): String = s"${context.path}/assets" + def assets(implicit context: Context): String = s"${context.path}/assets" /** * Generates the text link to the account page. * If user does not exist or disabled, this method returns user name as text without link. */ - def user(userName: String, mailAddress: String = "", styleClass: String = "")(implicit context: app.Context): Html = + def user(userName: String, mailAddress: String = "", styleClass: String = "")(implicit context: Context): Html = userWithContent(userName, mailAddress, styleClass)(Html(userName)) /** * Generates the avatar link to the account page. * If user does not exist or disabled, this method returns avatar image without link. */ - def avatarLink(userName: String, size: Int, mailAddress: String = "", tooltip: Boolean = false)(implicit context: app.Context): Html = + def avatarLink(userName: String, size: Int, mailAddress: String = "", tooltip: Boolean = false)(implicit context: Context): Html = userWithContent(userName, mailAddress)(avatar(userName, size, tooltip)) - private def userWithContent(userName: String, mailAddress: String = "", styleClass: String = "")(content: Html)(implicit context: app.Context): Html = + private def userWithContent(userName: String, mailAddress: String = "", styleClass: String = "")(content: Html)(implicit context: Context): Html = (if(mailAddress.isEmpty){ getAccountByUserName(userName) } else { diff --git a/src/main/twirl/error.scala.html b/src/main/twirl/error.scala.html deleted file mode 100644 index fc4a0115e..000000000 --- a/src/main/twirl/error.scala.html +++ /dev/null @@ -1,4 +0,0 @@ -@(title: String)(implicit context: app.Context) -@main("Error"){ -

    @title

    -} \ No newline at end of file diff --git a/src/main/twirl/account/activity.scala.html b/src/main/twirl/gitbucket/core/account/activity.scala.html similarity index 53% rename from src/main/twirl/account/activity.scala.html rename to src/main/twirl/gitbucket/core/account/activity.scala.html index ca4c3c70c..24d2c28a0 100644 --- a/src/main/twirl/account/activity.scala.html +++ b/src/main/twirl/gitbucket/core/account/activity.scala.html @@ -1,6 +1,8 @@ -@(account: model.Account, groupNames: List[String], activities: List[model.Activity])(implicit context: app.Context) +@(account: gitbucket.core.model.Account, + groupNames: List[String], + activities: List[gitbucket.core.model.Activity])(implicit context: gitbucket.core.controller.Context) @import context._ -@import view.helpers._ +@import gitbucket.core.view.helpers._ @main(account, groupNames, "activity"){
    activities diff --git a/src/main/twirl/account/edit.scala.html b/src/main/twirl/gitbucket/core/account/edit.scala.html similarity index 93% rename from src/main/twirl/account/edit.scala.html rename to src/main/twirl/gitbucket/core/account/edit.scala.html index 32055aba1..b2691a12b 100644 --- a/src/main/twirl/account/edit.scala.html +++ b/src/main/twirl/gitbucket/core/account/edit.scala.html @@ -1,7 +1,7 @@ -@(account: model.Account, info: Option[Any])(implicit context: app.Context) +@(account: gitbucket.core.model.Account, info: Option[Any])(implicit context: gitbucket.core.controller.Context) +@import gitbucket.core.util.LDAPUtil @import context._ -@import view.helpers._ -@import util.LDAPUtil +@import gitbucket.core.view.helpers._ @html.main("Edit your profile"){
    diff --git a/src/main/twirl/account/group.scala.html b/src/main/twirl/gitbucket/core/account/group.scala.html similarity index 96% rename from src/main/twirl/account/group.scala.html rename to src/main/twirl/gitbucket/core/account/group.scala.html index d6d7cf65e..921beb266 100644 --- a/src/main/twirl/account/group.scala.html +++ b/src/main/twirl/gitbucket/core/account/group.scala.html @@ -1,6 +1,6 @@ -@(account: Option[model.Account], members: List[model.GroupMember])(implicit context: app.Context) +@(account: Option[gitbucket.core.model.Account], members: List[gitbucket.core.model.GroupMember])(implicit context: gitbucket.core.controller.Context) @import context._ -@import view.helpers._ +@import gitbucket.core.view.helpers._ @html.main(if(account.isEmpty) "Create group" else "Edit group"){
    diff --git a/src/main/twirl/account/main.scala.html b/src/main/twirl/gitbucket/core/account/main.scala.html similarity index 93% rename from src/main/twirl/account/main.scala.html rename to src/main/twirl/gitbucket/core/account/main.scala.html index 2e148fe16..b4467f9aa 100644 --- a/src/main/twirl/account/main.scala.html +++ b/src/main/twirl/gitbucket/core/account/main.scala.html @@ -1,7 +1,7 @@ -@(account: model.Account, groupNames: List[String], active: String, - isGroupManager: Boolean = false)(body: Html)(implicit context: app.Context) +@(account: gitbucket.core.model.Account, groupNames: List[String], active: String, + isGroupManager: Boolean = false)(body: Html)(implicit context: gitbucket.core.controller.Context) @import context._ -@import view.helpers._ +@import gitbucket.core.view.helpers._ @html.main(account.userName){
    diff --git a/src/main/twirl/account/members.scala.html b/src/main/twirl/gitbucket/core/account/members.scala.html similarity index 63% rename from src/main/twirl/account/members.scala.html rename to src/main/twirl/gitbucket/core/account/members.scala.html index 0e21d0102..029122319 100644 --- a/src/main/twirl/account/members.scala.html +++ b/src/main/twirl/gitbucket/core/account/members.scala.html @@ -1,6 +1,6 @@ -@(account: model.Account, members: List[String], isGroupManager: Boolean)(implicit context: app.Context) +@(account: gitbucket.core.model.Account, members: List[String], isGroupManager: Boolean)(implicit context: gitbucket.core.controller.Context) @import context._ -@import view.helpers._ +@import gitbucket.core.view.helpers._ @main(account, Nil, "members", isGroupManager){ @if(members.isEmpty){ No members diff --git a/src/main/twirl/account/menu.scala.html b/src/main/twirl/gitbucket/core/account/menu.scala.html similarity index 81% rename from src/main/twirl/account/menu.scala.html rename to src/main/twirl/gitbucket/core/account/menu.scala.html index a5d913948..60f0229b3 100644 --- a/src/main/twirl/account/menu.scala.html +++ b/src/main/twirl/gitbucket/core/account/menu.scala.html @@ -1,4 +1,4 @@ -@(active: String, ssh: Boolean)(implicit context: app.Context) +@(active: String, ssh: Boolean)(implicit context: gitbucket.core.controller.Context) @import context._
    - - + @if(hasWritePermission){ + + } + @openCount Open @@ -35,116 +37,119 @@ @closedCount Closed - -
    - @helper.html.dropdown("Author", flat = true) { - @collaborators.map { collaborator => -
  • - - @helper.html.checkicon(condition.author == Some(collaborator)) - @avatar(collaborator, 20) @collaborator - -
  • - } - } - @helper.html.dropdown("Label", flat = true) { - @labels.map { label => -
  • - - @helper.html.checkicon(condition.labels.contains(label.labelName)) -    - @label.labelName - -
  • - } - } - @helper.html.dropdown("Milestone", flat = true) { -
  • - - @helper.html.checkicon(condition.milestone == Some(None)) Issues with no milestone - -
  • - @milestones.filter(_.closedDate.isEmpty).map { milestone => -
  • - - @helper.html.checkicon(condition.milestone == Some(Some(milestone.title))) @milestone.title - -
  • - } - } - @helper.html.dropdown("Assignee", flat = true) { - @collaborators.map { collaborator => -
  • - - @helper.html.checkicon(condition.assigned == Some(collaborator)) - @avatar(collaborator, 20) @collaborator - -
  • - } - } - @helper.html.dropdown("Sort", flat = true){ -
  • - - @helper.html.checkicon(condition.sort == "created" && condition.direction == "desc") Newest - -
  • -
  • - - @helper.html.checkicon(condition.sort == "created" && condition.direction == "asc") Oldest - -
  • -
  • - - @helper.html.checkicon(condition.sort == "comments" && condition.direction == "desc") Most commented - -
  • -
  • - - @helper.html.checkicon(condition.sort == "comments" && condition.direction == "asc") Least commented - -
  • -
  • - - @helper.html.checkicon(condition.sort == "updated" && condition.direction == "desc") Recently updated - -
  • -
  • - - @helper.html.checkicon(condition.sort == "updated" && condition.direction == "asc") Least recently updated - -
  • - } -
    - @if(hasWritePermission){ -
    - @helper.html.dropdown("Mark as", flat = true) { -
  • Open
  • -
  • Close
  • +
    + @helper.html.dropdown("Author", flat = true) { + @collaborators.map { collaborator => +
  • + + @helper.html.checkicon(condition.author == Some(collaborator)) + @avatar(collaborator, 20) @collaborator + +
  • + } } @helper.html.dropdown("Label", flat = true) { @labels.map { label =>
  • - - -   + + @helper.html.checkicon(condition.labels.contains(label.labelName)) +    @label.labelName
  • } } @helper.html.dropdown("Milestone", flat = true) { -
  • No milestone
  • +
  • + + @helper.html.checkicon(condition.milestone == Some(None)) Issues with no milestone + +
  • @milestones.filter(_.closedDate.isEmpty).map { milestone => -
  • @milestone.title
  • +
  • + + @helper.html.checkicon(condition.milestone == Some(Some(milestone.title))) @milestone.title + +
  • } } @helper.html.dropdown("Assignee", flat = true) { -
  • Clear assignee
  • @collaborators.map { collaborator => -
  • @avatar(collaborator, 20) @collaborator
  • +
  • + + @helper.html.checkicon(condition.assigned == Some(collaborator)) + @avatar(collaborator, 20) @collaborator + +
  • } } + @helper.html.dropdown("Sort", flat = true){ +
  • + + @helper.html.checkicon(condition.sort == "created" && condition.direction == "desc") Newest + +
  • +
  • + + @helper.html.checkicon(condition.sort == "created" && condition.direction == "asc") Oldest + +
  • +
  • + + @helper.html.checkicon(condition.sort == "comments" && condition.direction == "desc") Most commented + +
  • +
  • + + @helper.html.checkicon(condition.sort == "comments" && condition.direction == "asc") Least commented + +
  • +
  • + + @helper.html.checkicon(condition.sort == "updated" && condition.direction == "desc") Recently updated + +
  • +
  • + + @helper.html.checkicon(condition.sort == "updated" && condition.direction == "asc") Least recently updated + +
  • + }
    + + @if(hasWritePermission){ + + selected +
    + @helper.html.dropdown("Mark as", flat = true) { +
  • Open
  • +
  • Close
  • + } + @helper.html.dropdown("Label", flat = true) { + @labels.map { label => +
  • + + +   + @label.labelName + +
  • + } + } + @helper.html.dropdown("Milestone", flat = true) { +
  • No milestone
  • + @milestones.filter(_.closedDate.isEmpty).map { milestone => +
  • @milestone.title
  • + } + } + @helper.html.dropdown("Assign", flat = true) { +
  • Assign to nobody
  • + @collaborators.map { collaborator => +
  • @avatar(collaborator, 20) @collaborator
  • + } + } +
    +
    }
    @@ -56,5 +57,5 @@ }
    - @helper.html.paginator(page, (if(condition.state == "open") openCount else closedCount), service.IssuesService.IssueLimit, 10, condition.toURL) + @helper.html.paginator(page, (if(condition.state == "open") openCount else closedCount), IssuesService.IssueLimit, 10, condition.toURL)
    diff --git a/src/main/twirl/dashboard/issuesnavi.scala.html b/src/main/twirl/gitbucket/core/dashboard/issuesnavi.scala.html similarity index 86% rename from src/main/twirl/dashboard/issuesnavi.scala.html rename to src/main/twirl/gitbucket/core/dashboard/issuesnavi.scala.html index ec15e7416..5770f8279 100644 --- a/src/main/twirl/dashboard/issuesnavi.scala.html +++ b/src/main/twirl/gitbucket/core/dashboard/issuesnavi.scala.html @@ -1,8 +1,8 @@ @(filter: String, active: String, - condition: service.IssuesService.IssueSearchCondition)(implicit context: app.Context) + condition: gitbucket.core.service.IssuesService.IssueSearchCondition)(implicit context: gitbucket.core.controller.Context) @import context._ -@import view.helpers._ +@import gitbucket.core.view.helpers._