mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-02 11:36:05 +01:00
Separate issues and pull requests search
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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) =>
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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"}")
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user