forked from forgejo/forgejo
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:
parent
1b7dffc3a3
commit
3186ef554c
41 changed files with 687 additions and 21 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue