Support search operators for commits search (#6479)

* Support searching commits with prefix syntax

For now, support auther: committer:
When more than one prefix is supplied is presented, the result is the union.
When different prefixes are supplied, the result is the intersection.

For example,
"author:alice author:bob"
=> the result is all commits authored by Alice OR Bob

"hello committer:alice"
=> the result is all commits committed by Alice AND has the keyword
'hello' in the message.

Note that there should NOT have any space after the colon(:) of the prefix.
For example,
"author:bill" => correct
"author: bill" => wrong

* Remove unneeded logging

* Add missing files of test repository

* Add missing repo_unit entries to test fixtures

* Update test cases

* Add tooltip for commits search button

* Update tooltip text

I have no idea about how to format it with line breaks.

* Make the usage example more real

* Add a test case

* Add new options struct for SearchCommits

* Prefer len(s) > 0 over s != ""

* Add NewSearchCommitsOptions
This commit is contained in:
Mura Li 2019-04-12 10:28:44 +08:00 committed by Lunny Xiao
parent 1b7dffc3a3
commit 3186ef554c
41 changed files with 687 additions and 21 deletions

View file

@ -220,4 +220,39 @@
repo_id: 28
type: 1
config: "{}"
created_unix: 1524304355
created_unix: 1524304355
-
id: 33
repo_id: 36
type: 4
config: "{}"
created_unix: 1524304355
-
id: 34
repo_id: 36
type: 5
config: "{}"
created_unix: 1524304355
-
id: 35
repo_id: 36
type: 1
config: "{}"
created_unix: 1524304355
-
id: 36
repo_id: 36
type: 2
config: "{\"EnableTimetracker\":true,\"AllowOnlyContributorsToTrackTime\":true}"
created_unix: 1524304355
-
id: 37
repo_id: 36
type: 3
config: "{\"IgnoreWhitespaceConflicts\":false,\"AllowMerge\":true,\"AllowRebase\":true,\"AllowRebaseMerge\":true,\"AllowSquash\":true}"
created_unix: 1524304355

View file

@ -430,3 +430,14 @@
num_forks: 0
num_issues: 0
is_mirror: false
-
id: 36
owner_id: 2
lower_name: commits_search_test
name: commits_search_test
is_private: false
num_stars: 0
num_forks: 0
num_issues: 0
is_mirror: false

View file

@ -28,7 +28,7 @@
is_admin: false
avatar: avatar2
avatar_email: user2@example.com
num_repos: 6
num_repos: 7
num_stars: 2
num_followers: 2
num_following: 1

View file

@ -147,19 +147,19 @@ func TestSearchRepositoryByName(t *testing.T) {
count: 14},
{name: "AllPublic/PublicRepositoriesOfUserIncludingCollaborative",
opts: &SearchRepoOptions{Page: 1, PageSize: 10, OwnerID: 15, AllPublic: true},
count: 19},
count: 20},
{name: "AllPublic/PublicAndPrivateRepositoriesOfUserIncludingCollaborative",
opts: &SearchRepoOptions{Page: 1, PageSize: 10, OwnerID: 15, Private: true, AllPublic: true},
count: 23},
count: 24},
{name: "AllPublic/PublicAndPrivateRepositoriesOfUserIncludingCollaborativeByName",
opts: &SearchRepoOptions{Keyword: "test", Page: 1, PageSize: 10, OwnerID: 15, Private: true, AllPublic: true},
count: 13},
count: 14},
{name: "AllPublic/PublicAndPrivateRepositoriesOfUser2IncludingCollaborativeByName",
opts: &SearchRepoOptions{Keyword: "test", Page: 1, PageSize: 10, OwnerID: 18, Private: true, AllPublic: true},
count: 11},
count: 12},
{name: "AllPublic/PublicRepositoriesOfOrganization",
opts: &SearchRepoOptions{Page: 1, PageSize: 10, OwnerID: 17, AllPublic: true, Collaborate: util.OptionalBoolFalse},
count: 19},
count: 20},
}
for _, testCase := range testCases {