mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-02 19:45:57 +01:00
Separate issues and pull requests search
This commit is contained in:
@@ -237,9 +237,19 @@ trait IndexControllerBase extends ControllerBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
target.toLowerCase match {
|
target.toLowerCase match {
|
||||||
case "issue" =>
|
case "issues" =>
|
||||||
gitbucket.core.search.html.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,
|
query,
|
||||||
page,
|
page,
|
||||||
repository
|
repository
|
||||||
|
|||||||
@@ -630,7 +630,7 @@ trait IssuesService {
|
|||||||
* @param query the keywords separated by whitespace.
|
* @param query the keywords separated by whitespace.
|
||||||
* @return issues with comment count and matched content of issue or comment
|
* @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
|
implicit s: Session
|
||||||
): List[(Issue, Int, String)] = {
|
): List[(Issue, Int, String)] = {
|
||||||
//import slick.driver.JdbcDriver.likeEncode
|
//import slick.driver.JdbcDriver.likeEncode
|
||||||
@@ -638,7 +638,9 @@ trait IssuesService {
|
|||||||
|
|
||||||
// Search Issue
|
// Search Issue
|
||||||
val issues = Issues
|
val issues = Issues
|
||||||
.filter(_.byRepository(owner, repository))
|
.filter { t =>
|
||||||
|
t.byRepository(owner, repository) && t.pullRequest === pullRequest.bind
|
||||||
|
}
|
||||||
.join(IssueOutline)
|
.join(IssueOutline)
|
||||||
.on {
|
.on {
|
||||||
case (t1, t2) =>
|
case (t1, t2) =>
|
||||||
|
|||||||
@@ -14,13 +14,15 @@ import gitbucket.core.model.Profile.profile.blockingApi._
|
|||||||
trait RepositorySearchService { self: IssuesService =>
|
trait RepositorySearchService { self: IssuesService =>
|
||||||
import RepositorySearchService._
|
import RepositorySearchService._
|
||||||
|
|
||||||
def countIssues(owner: String, repository: String, query: String)(implicit session: Session): Int =
|
def countIssues(owner: String, repository: String, query: String, pullRequest: Boolean)(
|
||||||
searchIssuesByKeyword(owner, repository, query).length
|
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
|
implicit session: Session
|
||||||
): List[IssueSearchResult] =
|
): List[IssueSearchResult] =
|
||||||
searchIssuesByKeyword(owner, repository, query).map {
|
searchIssuesByKeyword(owner, repository, query, pullRequest).map {
|
||||||
case (issue, commentCount, content) =>
|
case (issue, commentCount, content) =>
|
||||||
IssueSearchResult(
|
IssueSearchResult(
|
||||||
issue.issueId,
|
issue.issueId,
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
@(issues: List[gitbucket.core.service.RepositorySearchService.IssueSearchResult],
|
@(issues: List[gitbucket.core.service.RepositorySearchService.IssueSearchResult],
|
||||||
|
pullRequest: Boolean,
|
||||||
query: String,
|
query: String,
|
||||||
page: Int,
|
page: Int,
|
||||||
repository: gitbucket.core.service.RepositoryService.RepositoryInfo)(implicit context: gitbucket.core.controller.Context)
|
repository: gitbucket.core.service.RepositoryService.RepositoryInfo)(implicit context: gitbucket.core.controller.Context)
|
||||||
@import gitbucket.core.view.helpers
|
@import gitbucket.core.view.helpers
|
||||||
@import gitbucket.core.service.RepositorySearchService
|
@import gitbucket.core.service.RepositorySearchService
|
||||||
@gitbucket.core.html.main("Search Results", Some(repository)){
|
@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(query.nonEmpty) {
|
||||||
@if(issues.isEmpty) {
|
@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 {
|
} 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 =>
|
@issues.drop((page - 1) * RepositorySearchService.IssueLimit).take(RepositorySearchService.IssueLimit).map { issue =>
|
||||||
@@ -31,6 +32,6 @@
|
|||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
@gitbucket.core.helper.html.paginator(page, issues.size, RepositorySearchService.IssueLimit, 10,
|
@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">
|
<select class="form-control" name="type">
|
||||||
<option value="code" @if(active == "files"){ selected }>Files</option>
|
<option value="code" @if(active == "files"){ selected }>Files</option>
|
||||||
@if(repository.repository.options.issuesOption != "DISABLE") {
|
@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") {
|
@if(repository.repository.options.wikiOption != "DISABLE") {
|
||||||
<option value="wiki" @if(active == "wiki"){ selected }>Wiki</option>
|
<option value="wiki" @if(active == "wiki"){ selected }>Wiki</option>
|
||||||
@@ -17,4 +20,4 @@
|
|||||||
<input type="hidden" name="type" value="@active"/>
|
<input type="hidden" name="type" value="@active"/>
|
||||||
</form>
|
</form>
|
||||||
@body
|
@body
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
@gitbucket.core.search.html.menu("wiki", query, repository){
|
@gitbucket.core.search.html.menu("wiki", query, repository){
|
||||||
@if(query.nonEmpty) {
|
@if(query.nonEmpty) {
|
||||||
@if(wikis.isEmpty) {
|
@if(wikis.isEmpty) {
|
||||||
<h4>We could not find any code matching '@query'</h4>
|
<h4>We could not find any pages matching '@query'</h4>
|
||||||
} else {
|
} else {
|
||||||
<h4>We've found @wikis.size @helpers.plural(wikis.size, "page")</h4>
|
<h4>We've found @wikis.size @helpers.plural(wikis.size, "page")</h4>
|
||||||
}
|
}
|
||||||
@@ -23,4 +23,4 @@
|
|||||||
@gitbucket.core.helper.html.paginator(page, wikis.size, RepositorySearchService.CodeLimit, 10,
|
@gitbucket.core.helper.html.paginator(page, wikis.size, RepositorySearchService.CodeLimit, 10,
|
||||||
s"${helpers.url(repository)}/search?q=${helpers.urlEncode(query)}&type=wiki")
|
s"${helpers.url(repository)}/search?q=${helpers.urlEncode(query)}&type=wiki")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user