mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	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:
		@@ -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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user