summaryrefslogtreecommitdiffstats
path: root/modules/git/repo_commit.go
diff options
context:
space:
mode:
authorMura Li <typeless@users.noreply.github.com>2019-04-12 10:28:44 +0800
committerLunny Xiao <xiaolunwen@gmail.com>2019-04-12 10:28:44 +0800
commit3186ef554cdbf54e1a3328ffcb35ea18105d7cb1 (patch)
treea5291a4503ea8e7c009446098ea88cf885abb0fb /modules/git/repo_commit.go
parent1b7dffc3a30b2244aa2690abce19dd4c31613016 (diff)
downloadgitea-3186ef554cdbf54e1a3328ffcb35ea18105d7cb1.tar.gz
gitea-3186ef554cdbf54e1a3328ffcb35ea18105d7cb1.zip
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
Diffstat (limited to 'modules/git/repo_commit.go')
-rw-r--r--modules/git/repo_commit.go27
1 files changed, 24 insertions, 3 deletions
diff --git a/modules/git/repo_commit.go b/modules/git/repo_commit.go
index 146619373d..1ecd1f8891 100644
--- a/modules/git/repo_commit.go
+++ b/modules/git/repo_commit.go
@@ -237,9 +237,30 @@ func (repo *Repository) commitsByRange(id SHA1, page int) (*list.List, error) {
return repo.parsePrettyFormatLogToList(stdout)
}
-func (repo *Repository) searchCommits(id SHA1, keyword string, all bool) (*list.List, error) {
- cmd := NewCommand("log", id.String(), "-100", "-i", "--grep="+keyword, prettyLogFormat)
- if all {
+func (repo *Repository) searchCommits(id SHA1, opts SearchCommitsOptions) (*list.List, error) {
+ cmd := NewCommand("log", id.String(), "-100", "-i", prettyLogFormat)
+ if len(opts.Keywords) > 0 {
+ for _, v := range opts.Keywords {
+ cmd.AddArguments("--grep=" + v)
+ }
+ }
+ if len(opts.Authors) > 0 {
+ for _, v := range opts.Authors {
+ cmd.AddArguments("--author=" + v)
+ }
+ }
+ if len(opts.Committers) > 0 {
+ for _, v := range opts.Committers {
+ cmd.AddArguments("--committer=" + v)
+ }
+ }
+ if len(opts.After) > 0 {
+ cmd.AddArguments("--after=" + opts.After)
+ }
+ if len(opts.Before) > 0 {
+ cmd.AddArguments("--before=" + opts.Before)
+ }
+ if opts.All {
cmd.AddArguments("--all")
}
stdout, err := cmd.RunInDirBytes(repo.Path)