From d78315695bfe2aecb1e197e5a1df39a81c1ef032 Mon Sep 17 00:00:00 2001 From: Tomofumi Tanaka Date: Mon, 29 Sep 2014 11:27:48 +0900 Subject: [PATCH 1/4] (refs $#498)Don't show private repo user doesn't have permission This fix in the dashboard pull request view But this fix still has a problem show wrong count number pull request. --- src/main/scala/app/DashboardController.scala | 2 +- src/main/scala/service/RepositoryService.scala | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/scala/app/DashboardController.scala b/src/main/scala/app/DashboardController.scala index d0a40f092..719ed3798 100644 --- a/src/main/scala/app/DashboardController.scala +++ b/src/main/scala/app/DashboardController.scala @@ -80,7 +80,7 @@ trait DashboardControllerBase extends ControllerBase { }.copy(repo = repository)) val userName = context.loginAccount.get.userName - val allRepos = getAllRepositories() + val allRepos = getAllRepositories(userName) val userRepos = getUserRepositories(userName, context.baseUrl, true).map(repo => repo.owner -> repo.name) val filterUser = Map(filter -> userName) val page = IssueSearchCondition.page(request) diff --git a/src/main/scala/service/RepositoryService.scala b/src/main/scala/service/RepositoryService.scala index 8e204a867..630511656 100644 --- a/src/main/scala/service/RepositoryService.scala +++ b/src/main/scala/service/RepositoryService.scala @@ -166,8 +166,18 @@ trait RepositoryService { self: AccountService => } } - def getAllRepositories()(implicit s: Session): List[(String, String)] = { - Repositories.sortBy(_.lastActivityDate desc).map{ t => + /** + * Returns the repositories without private repository that user does not have access right. + * Include public repository, private own repository and private but collaborator repository. + * + * @param userName the user name of collaborator + * @return the repository infomation list + */ + def getAllRepositories(userName: String)(implicit s: Session): List[(String, String)] = { + Repositories.filter { t1 => + (t1.isPrivate === false.bind) || + (Collaborators.filter { t2 => t2.byRepository(t1.userName, t1.repositoryName) && (t2.collaboratorName === userName.bind)} exists) + }.sortBy(_.lastActivityDate desc).map{ t => (t.userName, t.repositoryName) }.list } From 6fa7ea30fbbfe9fc8b8924d925330547f126721e Mon Sep 17 00:00:00 2001 From: Tomofumi Tanaka Date: Mon, 29 Sep 2014 11:53:19 +0900 Subject: [PATCH 2/4] (refs #498)Returns private own repository RepositoryService.getAllRepositories should returns private own repository too. --- src/main/scala/service/RepositoryService.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/scala/service/RepositoryService.scala b/src/main/scala/service/RepositoryService.scala index 630511656..2a6157fa3 100644 --- a/src/main/scala/service/RepositoryService.scala +++ b/src/main/scala/service/RepositoryService.scala @@ -176,6 +176,7 @@ trait RepositoryService { self: AccountService => def getAllRepositories(userName: String)(implicit s: Session): List[(String, String)] = { Repositories.filter { t1 => (t1.isPrivate === false.bind) || + (t1.userName === userName.bind) || (Collaborators.filter { t2 => t2.byRepository(t1.userName, t1.repositoryName) && (t2.collaboratorName === userName.bind)} exists) }.sortBy(_.lastActivityDate desc).map{ t => (t.userName, t.repositoryName) From 43babfed94e282ddd860bd4c30e71442cbfb4a06 Mon Sep 17 00:00:00 2001 From: Tomofumi Tanaka Date: Mon, 29 Sep 2014 14:00:29 +0900 Subject: [PATCH 3/4] (refs #498) Correct pull request counts --- src/main/scala/app/DashboardController.scala | 2 +- src/main/scala/service/PullRequestService.scala | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/scala/app/DashboardController.scala b/src/main/scala/app/DashboardController.scala index 719ed3798..a82519393 100644 --- a/src/main/scala/app/DashboardController.scala +++ b/src/main/scala/app/DashboardController.scala @@ -97,7 +97,7 @@ trait DashboardControllerBase extends ControllerBase { condition, None, false), - getPullRequestCountGroupByUser(condition.state == "closed", None, None), + getAllPullRequestCountGroupByUser(condition.state == "closed", userName), userRepos.map { case (userName, repoName) => (userName, repoName, counts.find { x => x._1 == userName && x._2 == repoName }.map(_._3).getOrElse(0)) }.sortBy(_._3).reverse, diff --git a/src/main/scala/service/PullRequestService.scala b/src/main/scala/service/PullRequestService.scala index 2129d0791..a329445b3 100644 --- a/src/main/scala/service/PullRequestService.scala +++ b/src/main/scala/service/PullRequestService.scala @@ -36,6 +36,23 @@ trait PullRequestService { self: IssuesService => .list .map { x => PullRequestCount(x._1, x._2) } + def getAllPullRequestCountGroupByUser(closed: Boolean, userName: String)(implicit s: Session): List[PullRequestCount] = + PullRequests + .innerJoin(Issues).on { (t1, t2) => t1.byPrimaryKey(t2.userName, t2.repositoryName, t2.issueId) } + .innerJoin(Repositories).on { (t, t3) => t._2.byRepository(t3.userName, t3.repositoryName) } + .filter { case (t, t3) => + (t._2.closed === closed.bind) && ( + (t3.isPrivate === false.bind) || + (t3.userName === userName.bind) || + (Collaborators.filter { t4 => t4.byRepository(t3.userName, t3.repositoryName) && (t4.collaboratorName === userName.bind)} exists) + ) + } + .groupBy { case (t, t3) => t._2.openedUserName } + .map { case (userName, t) => userName -> t.length } + .sortBy(_._2 desc) + .list + .map { x => PullRequestCount(x._1, x._2) } + def createPullRequest(originUserName: String, originRepositoryName: String, issueId: Int, originBranch: String, requestUserName: String, requestRepositoryName: String, requestBranch: String, commitIdFrom: String, commitIdTo: String)(implicit s: Session): Unit = From 9d1323a0443b95b5b9c71cdbab7ec5d44372821a Mon Sep 17 00:00:00 2001 From: Tomofumi Tanaka Date: Mon, 29 Sep 2014 16:33:23 +0900 Subject: [PATCH 4/4] (refs #498)Reformat counting pull request query --- src/main/scala/service/PullRequestService.scala | 11 ++++++----- src/main/scala/service/RepositoryService.scala | 4 ++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/scala/service/PullRequestService.scala b/src/main/scala/service/PullRequestService.scala index a329445b3..fe677a0aa 100644 --- a/src/main/scala/service/PullRequestService.scala +++ b/src/main/scala/service/PullRequestService.scala @@ -41,11 +41,12 @@ trait PullRequestService { self: IssuesService => .innerJoin(Issues).on { (t1, t2) => t1.byPrimaryKey(t2.userName, t2.repositoryName, t2.issueId) } .innerJoin(Repositories).on { (t, t3) => t._2.byRepository(t3.userName, t3.repositoryName) } .filter { case (t, t3) => - (t._2.closed === closed.bind) && ( - (t3.isPrivate === false.bind) || - (t3.userName === userName.bind) || - (Collaborators.filter { t4 => t4.byRepository(t3.userName, t3.repositoryName) && (t4.collaboratorName === userName.bind)} exists) - ) + (t._2.closed === closed.bind) && + ( + (t3.isPrivate === false.bind) || + (t3.userName === userName.bind) || + (Collaborators.filter { t4 => t4.byRepository(t3.userName, t3.repositoryName) && (t4.collaboratorName === userName.bind)} exists) + ) } .groupBy { case (t, t3) => t._2.openedUserName } .map { case (userName, t) => userName -> t.length } diff --git a/src/main/scala/service/RepositoryService.scala b/src/main/scala/service/RepositoryService.scala index 2a6157fa3..31e363751 100644 --- a/src/main/scala/service/RepositoryService.scala +++ b/src/main/scala/service/RepositoryService.scala @@ -176,8 +176,8 @@ trait RepositoryService { self: AccountService => def getAllRepositories(userName: String)(implicit s: Session): List[(String, String)] = { Repositories.filter { t1 => (t1.isPrivate === false.bind) || - (t1.userName === userName.bind) || - (Collaborators.filter { t2 => t2.byRepository(t1.userName, t1.repositoryName) && (t2.collaboratorName === userName.bind)} exists) + (t1.userName === userName.bind) || + (Collaborators.filter { t2 => t2.byRepository(t1.userName, t1.repositoryName) && (t2.collaboratorName === userName.bind)} exists) }.sortBy(_.lastActivityDate desc).map{ t => (t.userName, t.repositoryName) }.list