Separate issues and pull requests search

This commit is contained in:
Naoki Takezoe
2018-07-18 18:39:08 +09:00
parent 55c973b760
commit aac232f33e
6 changed files with 35 additions and 17 deletions

View File

@@ -237,9 +237,19 @@ trait IndexControllerBase extends ControllerBase {
}
target.toLowerCase match {
case "issue" =>
case "issues" =>
gitbucket.core.search.html.issues(
if (query.nonEmpty) searchIssues(repository.owner, repository.name, query) else Nil,
if (query.nonEmpty) searchIssues(repository.owner, repository.name, query, false) else Nil,
false,
query,
page,
repository
)
case "pulls" =>
gitbucket.core.search.html.issues(
if (query.nonEmpty) searchIssues(repository.owner, repository.name, query, true) else Nil,
true,
query,
page,
repository

View File

@@ -630,7 +630,7 @@ trait IssuesService {
* @param query the keywords separated by whitespace.
* @return issues with comment count and matched content of issue or comment
*/
def searchIssuesByKeyword(owner: String, repository: String, query: String)(
def searchIssuesByKeyword(owner: String, repository: String, query: String, pullRequest: Boolean)(
implicit s: Session
): List[(Issue, Int, String)] = {
//import slick.driver.JdbcDriver.likeEncode
@@ -638,7 +638,9 @@ trait IssuesService {
// Search Issue
val issues = Issues
.filter(_.byRepository(owner, repository))
.filter { t =>
t.byRepository(owner, repository) && t.pullRequest === pullRequest.bind
}
.join(IssueOutline)
.on {
case (t1, t2) =>

View File

@@ -14,13 +14,15 @@ import gitbucket.core.model.Profile.profile.blockingApi._
trait RepositorySearchService { self: IssuesService =>
import RepositorySearchService._
def countIssues(owner: String, repository: String, query: String)(implicit session: Session): Int =
searchIssuesByKeyword(owner, repository, query).length
def countIssues(owner: String, repository: String, query: String, pullRequest: Boolean)(
implicit session: Session
): Int =
searchIssuesByKeyword(owner, repository, query, pullRequest).length
def searchIssues(owner: String, repository: String, query: String)(
def searchIssues(owner: String, repository: String, query: String, pullRequest: Boolean)(
implicit session: Session
): List[IssueSearchResult] =
searchIssuesByKeyword(owner, repository, query).map {
searchIssuesByKeyword(owner, repository, query, pullRequest).map {
case (issue, commentCount, content) =>
IssueSearchResult(
issue.issueId,

View File

@@ -1,16 +1,17 @@
@(issues: List[gitbucket.core.service.RepositorySearchService.IssueSearchResult],
pullRequest: Boolean,
query: String,
page: Int,
repository: gitbucket.core.service.RepositoryService.RepositoryInfo)(implicit context: gitbucket.core.controller.Context)
@import gitbucket.core.view.helpers
@import gitbucket.core.service.RepositorySearchService
@gitbucket.core.html.main("Search Results", Some(repository)){
@gitbucket.core.search.html.menu("issues", query, repository){
@gitbucket.core.search.html.menu(if(pullRequest) "pulls" else "issues", query, repository){
@if(query.nonEmpty) {
@if(issues.isEmpty) {
<h4>We couldn't find any code matching '@query'</h4>
<h4>We couldn't find any @{if(pullRequest) "pull requests" else "issues"} matching '@query'</h4>
} else {
<h4>We've found @issues.size @helpers.plural(issues.size, "issue")</h4>
<h4>We've found @issues.size @helpers.plural(issues.size, if(pullRequest) "pull request" else "issue")</h4>
}
}
@issues.drop((page - 1) * RepositorySearchService.IssueLimit).take(RepositorySearchService.IssueLimit).map { issue =>
@@ -31,6 +32,6 @@
</div>
}
@gitbucket.core.helper.html.paginator(page, issues.size, RepositorySearchService.IssueLimit, 10,
s"${helpers.url(repository)}/search?q=${helpers.urlEncode(query)}&type=issue")
s"${helpers.url(repository)}/search?q=${helpers.urlEncode(query)}&type=${if(pullRequest) "pulls" else "issues"}")
}
}

View File

@@ -6,7 +6,10 @@
<select class="form-control" name="type">
<option value="code" @if(active == "files"){ selected }>Files</option>
@if(repository.repository.options.issuesOption != "DISABLE") {
<option value="issue" @if(active == "issues"){ selected }>Issues</option>
<option value="issues" @if(active == "issues"){ selected }>Issues</option>
}
@if(repository.repository.options.issuesOption != "DISABLE") {
<option value="pulls" @if(active == "pulls"){ selected }>Pull requests</option>
}
@if(repository.repository.options.wikiOption != "DISABLE") {
<option value="wiki" @if(active == "wiki"){ selected }>Wiki</option>

View File

@@ -8,7 +8,7 @@
@gitbucket.core.search.html.menu("wiki", query, repository){
@if(query.nonEmpty) {
@if(wikis.isEmpty) {
<h4>We could not find any code matching '@query'</h4>
<h4>We could not find any pages matching '@query'</h4>
} else {
<h4>We've found @wikis.size @helpers.plural(wikis.size, "page")</h4>
}