diff --git a/etc/icons.svg b/etc/icons.svg index ada5d7f..a4dffbb 100644 --- a/etc/icons.svg +++ b/etc/icons.svg @@ -24,17 +24,28 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="0.98994949" - inkscape:cx="377.073" - inkscape:cy="804.25693" + inkscape:zoom="0.24748737" + inkscape:cx="629.30023" + inkscape:cy="281.44758" inkscape:document-units="px" inkscape:current-layer="layer1-9" showgrid="false" inkscape:window-width="1366" - inkscape:window-height="705" - inkscape:window-x="-8" + inkscape:window-height="706" + inkscape:window-x="1912" inkscape:window-y="-8" - inkscape:window-maximized="1" /> + inkscape:window-maximized="1" + inkscape:snap-global="true" + inkscape:snap-grids="false" + inkscape:snap-page="false" + inkscape:snap-bbox="true" + inkscape:bbox-paths="false" + inkscape:bbox-nodes="false" + inkscape:snap-to-guides="true"> + + @@ -56,13 +67,51 @@ inkscape:label="Layer 1" transform="matrix(0.66004549,0,0,0.66004549,12.445368,29.409765)"> + + + + + + + d="m 445.03908,191.42833 0,-128.577242 c 0,0 1.85983,-15.30681 -16.73849,-15.30681 -18.59831,0 -51.14538,0 -51.14538,0" + style="fill:none;stroke:#008000;stroke-width:22.7257061;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + transform="matrix(0.83611704,0,0,0.83611704,-94.824045,-115.22257)" /> + style="fill:#ffffff;stroke:#008000;stroke-width:22.7257061;stroke-miterlimit:4;stroke-dasharray:none" /> + d="m 448.69288,446.18012 0,-128.57725 c 0,0 1.85984,-15.30681 -16.73848,-15.30681 -18.59831,0 -51.14539,0 -51.14539,0" + style="fill:none;stroke:#800000;stroke-width:22.7257061;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + transform="matrix(0.83611704,0,0,0.83611704,-91.170233,139.52922)" /> + style="fill:#800000;stroke:#ffffff;stroke-width:1.11112404" /> + style="fill:#800000;stroke:#ffffff;stroke-width:0.57680577" /> + style="fill:#ffffff;stroke:#800000;stroke-width:22.7257061;stroke-miterlimit:4;stroke-dasharray:none" /> + d="m 408.40826,265.55484 0,70.69144 -45.58895,-32.13461 z" + style="fill:#800000;stroke:#800000;stroke-width:0.83335358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + d="m 281.42857,327.36218 c 0,19.32997 -15.67003,35 -35,35 -19.32996,0 -35,-15.67003 -35,-35 0,-19.32996 15.67004,-35 35,-35 19.32997,0 35,15.67004 35,35 z" + transform="matrix(2.9255147,0,0,2.9255147,83.281176,-813.70029)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/scala/app/DashboardController.scala b/src/main/scala/app/DashboardController.scala index 038f8c3..dbda3cf 100644 --- a/src/main/scala/app/DashboardController.scala +++ b/src/main/scala/app/DashboardController.scala @@ -103,7 +103,9 @@ page, countIssue(condition.copy(state = "open"), filterUser, true, repositories: _*), countIssue(condition.copy(state = "closed"), filterUser, true, repositories: _*), - condition), + condition, + None, + false), getPullRequestCountGroupByUser(condition.state == "closed", userName, None), getRepositoryNamesOfUser(userName).map { RepoName => (userName, RepoName, counts.collectFirst { case (_, RepoName, count) => count }.getOrElse(0)) diff --git a/src/main/scala/app/PullRequestsController.scala b/src/main/scala/app/PullRequestsController.scala index ab89181..4d939ae 100644 --- a/src/main/scala/app/PullRequestsController.scala +++ b/src/main/scala/app/PullRequestsController.scala @@ -106,12 +106,16 @@ try { // mark issue as merged and close. val loginAccount = context.loginAccount.get - createComment(repository.owner, repository.name, loginAccount.userName, issueId, "Merge", "merge") + createComment(repository.owner, repository.name, loginAccount.userName, issueId, form.message, "merge") createComment(repository.owner, repository.name, loginAccount.userName, issueId, "Close", "close") updateClosed(repository.owner, repository.name, issueId, true) + + // record activity recordMergeActivity(repository.owner, repository.name, loginAccount.userName, issueId, form.message) - // fetch pull request to working repository + // TODO apply ref comment + + // fetch pull request to temporary working repository val pullRequestBranchName = s"gitbucket-pullrequest-${issueId}" git.fetch @@ -301,7 +305,7 @@ recordPullRequestActivity(repository.owner, repository.name, loginUserName, issueId, form.title) - redirect(s"/${repository.owner}/${repository.name}/pulls/${issueId}") + redirect(s"/${repository.owner}/${repository.name}/pull/${issueId}") }) /** diff --git a/src/main/scala/service/ActivityService.scala b/src/main/scala/service/ActivityService.scala index 5470ffc..0e5dbba 100644 --- a/src/main/scala/service/ActivityService.scala +++ b/src/main/scala/service/ActivityService.scala @@ -6,23 +6,23 @@ trait ActivityService { - def getActivitiesByUser(activityUserName: String, isPublic: Boolean): List[Activity] = { - val q = Query(Activities) + def getActivitiesByUser(activityUserName: String, isPublic: Boolean): List[Activity] = + Activities .innerJoin(Repositories).on((t1, t2) => t1.byRepository(t2.userName, t2.repositoryName)) + .filter { case (t1, t2) => + if(isPublic){ + (t1.activityUserName is activityUserName.bind) && (t2.isPrivate is false.bind) + } else { + (t1.activityUserName is activityUserName.bind) + } + } + .sortBy { case (t1, t2) => t1.activityId desc } + .map { case (t1, t2) => t1 } + .take(30) + .list - (if(isPublic){ - q filter { case (t1, t2) => (t1.activityUserName is activityUserName.bind) && (t2.isPrivate is false.bind) } - } else { - q filter { case (t1, t2) => t1.activityUserName is activityUserName.bind } - }) - .sortBy { case (t1, t2) => t1.activityId desc } - .map { case (t1, t2) => t1 } - .take(30) - .list - } - def getRecentActivities(): List[Activity] = - Query(Activities) + Activities .innerJoin(Repositories).on((t1, t2) => t1.byRepository(t2.userName, t2.repositoryName)) .filter { case (t1, t2) => t2.isPrivate is false.bind } .sortBy { case (t1, t2) => t1.activityId desc } @@ -112,7 +112,7 @@ def recordCreateBranchActivity(userName: String, repositoryName: String, activityUserName: String, branchName: String) = Activities.autoInc insert(userName, repositoryName, activityUserName, - "create_tag", + "create_branch", s"[user:${activityUserName}] created branch [tag:${userName}/${repositoryName}#${branchName}] at [repo:${userName}/${repositoryName}]", None, currentDate) diff --git a/src/main/twirl/helper/activities.scala.html b/src/main/twirl/helper/activities.scala.html index 70435f5..118909f 100644 --- a/src/main/twirl/helper/activities.scala.html +++ b/src/main/twirl/helper/activities.scala.html @@ -1,45 +1,86 @@ @(activities: List[model.Activity])(implicit context: app.Context) @import context._ @import view.helpers._ + @if(activities.isEmpty){ No activity } else { @activities.map { activity =>
-
@datetime(activity.activityDate)
-
- @avatar(activity.activityUserName, 16) - @activityMessage(activity.message) -
- @activity.additionalInfo.map { additionalInfo => - @if(additionalInfo.nonEmpty){ - @(activity.activityType match { - case "create_wiki" => { - - } - case "edit_wiki" => { - - } - case "push" => { -
- {additionalInfo.split("\n").reverse.take(4).zipWithIndex.map{ case (commit, i) => - if(i == 3){ -
...
- } else { -
- {commit.substring(0, 7)} - {commit.substring(41)} -
- } - }} -
- } - case _ => { -
{additionalInfo}
- } - }) + @(activity.activityType match { + case "open_issue" => detailActivity(activity, "activity-issue.png") + case "comment_issue" => detailActivity(activity, "activity-comment.png") + case "close_issue" => detailActivity(activity, "activity-issue-close.png") + case "reopen_issue" => detailActivity(activity, "activity-issue-reopen.png") + case "open_pullreq" => detailActivity(activity, "activity-merge.png") + case "merge_pullreq" => detailActivity(activity, "activity-merge.png") + case "create_repository" => simpleActivity(activity, "activity-create-repository.png") + case "create_branch" => simpleActivity(activity, "activity-branch.png") + case "create_tag" => simpleActivity(activity, "activity-tag.png") + case "fork" => simpleActivity(activity, "activity-fork.png") + case "push" => customActivity(activity, "activity-commit.png"){ +
+ {activity.additionalInfo.get.split("\n").reverse.take(4).zipWithIndex.map{ case (commit, i) => + if(i == 3){ +
...
+ } else { +
+ {commit.substring(0, 7)} + {commit.substring(41)} +
+ } + }} +
} - } + case "create_wiki" => customActivity(activity, "activity-wiki.png"){ + + } + case "edit_wiki" => customActivity(activity, "activity-wiki.png"){ + + } + })
} } + +@detailActivity(activity: model.Activity, image: String) = { +
+
+
@datetime(activity.activityDate)
+
+ @avatar(activity.activityUserName, 16) + @activityMessage(activity.message) +
+ @activity.additionalInfo.map { additionalInfo => +
@additionalInfo
+ } +
+} + +@customActivity(activity: model.Activity, image: String)(additionalInfo: Any) = { +
+
+
@datetime(activity.activityDate)
+
+ @avatar(activity.activityUserName, 16) + @activityMessage(activity.message) +
+ @additionalInfo +
+} + +@simpleActivity(activity: model.Activity, image: String) = { +
+
+
+ @avatar(activity.activityUserName, 16) + @activityMessage(activity.message) + @datetime(activity.activityDate) +
+
+} + diff --git a/src/main/twirl/issues/commentlist.scala.html b/src/main/twirl/issues/commentlist.scala.html index 5c0bc52..ecff874 100644 --- a/src/main/twirl/issues/commentlist.scala.html +++ b/src/main/twirl/issues/commentlist.scala.html @@ -6,7 +6,7 @@ @import context._ @import view.helpers._ @comments.map { comment => - @if(comment.action != "close" && comment.action != "reopen" && comment.action != "merge"){ + @if(comment.action != "close" && comment.action != "reopen"){
@avatar(comment.commentedUserName, 48)
@@ -14,7 +14,7 @@ @comment.commentedUserName commented @datetime(comment.registeredDate) - @if(comment.action != "commit" && (hasWritePermission || loginAccount.map(_.userName == comment.commentedUserName).getOrElse(false))){ + @if(comment.action != "commit" && comment.action != "merge" && (hasWritePermission || loginAccount.map(_.userName == comment.commentedUserName).getOrElse(false))){ } diff --git a/src/main/twirl/pulls/compare.scala.html b/src/main/twirl/pulls/compare.scala.html index fef6a61..45520fc 100644 --- a/src/main/twirl/pulls/compare.scala.html +++ b/src/main/twirl/pulls/compare.scala.html @@ -14,7 +14,7 @@ @import org.eclipse.jgit.diff.DiffEntry.ChangeType @html.main("Pull Requests - " + repository.owner + "/" + repository.name){ @html.header("pulls", repository) -
+
Edit @originRepository.owner:@originId ... @forkedRepository.owner:@forkedId diff --git a/src/main/twirl/pulls/list.scala.html b/src/main/twirl/pulls/list.scala.html index 27ec623..6c0b3e4 100644 --- a/src/main/twirl/pulls/list.scala.html +++ b/src/main/twirl/pulls/list.scala.html @@ -24,7 +24,7 @@ @if(loginAccount.isDefined){ - @counts.find(_.userName == loginAccount.get.userName).map(_.count) + @counts.find(_.userName == loginAccount.get.userName).map(_.count).getOrElse(0) Yours @@ -44,7 +44,7 @@ }
- @listparts(issues, page, openCount, closedCount, condition) + @listparts(issues, page, openCount, closedCount, condition, Some(repository), hasWritePermission)
} diff --git a/src/main/twirl/pulls/listparts.scala.html b/src/main/twirl/pulls/listparts.scala.html index e3dfac4..0cd8918 100644 --- a/src/main/twirl/pulls/listparts.scala.html +++ b/src/main/twirl/pulls/listparts.scala.html @@ -2,18 +2,20 @@ page: Int, openCount: Int, closedCount: Int, - condition: service.IssuesService.IssueSearchCondition)(implicit context: app.Context) + condition: service.IssuesService.IssueSearchCondition, + repository: Option[service.RepositoryService.RepositoryInfo], + hasWritePermission: Boolean)(implicit context: app.Context) @import context._ @import view.helpers._
- @* - @if(hasWritePermission){ -
- @helper.html.paginator(page, (if(condition.state == "open") openCount else closedCount), service.PullRequestService.PullRequestLimit, 7, condition.toURL) - New pull request -
+ @repository.map { repository => + @if(hasWritePermission){ +
+ @helper.html.paginator(page, (if(condition.state == "open") openCount else closedCount), service.PullRequestService.PullRequestLimit, 7, condition.toURL) + New pull request +
+ } } - *@
@openCount Open @closedCount Closed diff --git a/src/main/twirl/pulls/pullreq.scala.html b/src/main/twirl/pulls/pullreq.scala.html index caf78f1..1d0d9ca 100644 --- a/src/main/twirl/pulls/pullreq.scala.html +++ b/src/main/twirl/pulls/pullreq.scala.html @@ -14,6 +14,24 @@ @import view.helpers._ @html.main("%s - Pull Request #%d - %s/%s".format(issue.title, issue.issueId, repository.owner, repository.name)){ @html.header("pulls", repository) +
+ @if(issue.closed) { + @comments.find(_.action == "merge").map{ comment => + Merged + @comment.commentedUserName merged @commits.flatten.size @plural(commits.flatten.size, "commit") + into @pullreq.requestUserName:@pullreq.requestBranch from @pullreq.userName:@pullreq.branch + at @datetime(comment.registeredDate) + }.getOrElse { + Closed + @issue.openedUserName wants to merge @commits.flatten.size @plural(commits.flatten.size, "commit") + into @pullreq.requestUserName:@pullreq.requestBranch from @pullreq.userName:@pullreq.branch + } + } else { + Open + @issue.openedUserName wants to merge @commits.flatten.size @plural(commits.flatten.size, "commit") + into @pullreq.requestUserName:@pullreq.requestBranch from @pullreq.userName:@pullreq.branch + } +