mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Search Commits via Commit Hash (#7400)
* search commits via commit hash Signed-off-by: Gary Kim <gary@garykim.dev> * Also include all option for hash search Signed-off-by: Gary Kim <gary@garykim.dev> * Remove code duplication in commit search Signed-off-by: Gary Kim <gary@garykim.dev> * Add case ignore to commit hash search Signed-off-by: Gary Kim <gary@garykim.dev>
This commit is contained in:
		| @@ -28,10 +28,16 @@ func testRepoCommitsSearch(t *testing.T, query, commit string) { | ||||
| } | ||||
|  | ||||
| func TestRepoCommitsSearch(t *testing.T) { | ||||
| 	testRepoCommitsSearch(t, "e8eabd", "") | ||||
| 	testRepoCommitsSearch(t, "38a9cb", "") | ||||
| 	testRepoCommitsSearch(t, "6e8e", "6e8eabd9a7") | ||||
| 	testRepoCommitsSearch(t, "58e97", "58e97d1a24") | ||||
| 	testRepoCommitsSearch(t, "author:alice", "6e8eabd9a7") | ||||
| 	testRepoCommitsSearch(t, "author:alice 6e8ea", "6e8eabd9a7") | ||||
| 	testRepoCommitsSearch(t, "committer:Tom", "58e97d1a24") | ||||
| 	testRepoCommitsSearch(t, "author:bob commit-4", "58e97d1a24") | ||||
| 	testRepoCommitsSearch(t, "author:bob commit after:2019-03-03", "58e97d1a24") | ||||
| 	testRepoCommitsSearch(t, "committer:alice 6e8e before:2019-03-02", "6e8eabd9a7") | ||||
| 	testRepoCommitsSearch(t, "committer:alice commit before:2019-03-02", "6e8eabd9a7") | ||||
| 	testRepoCommitsSearch(t, "committer:alice author:tom commit before:2019-03-04 after:2019-03-02", "0a8499a22a") | ||||
| } | ||||
|   | ||||
| @@ -208,36 +208,57 @@ func (repo *Repository) commitsByRange(id SHA1, page int) (*list.List, error) { | ||||
| } | ||||
|  | ||||
| func (repo *Repository) searchCommits(id SHA1, opts SearchCommitsOptions) (*list.List, error) { | ||||
| 	cmd := NewCommand("log", id.String(), "-100", "-i", prettyLogFormat) | ||||
| 	cmd := NewCommand("log", id.String(), "-100", prettyLogFormat) | ||||
| 	args := []string{"-i"} | ||||
| 	if len(opts.Authors) > 0 { | ||||
| 		for _, v := range opts.Authors { | ||||
| 			args = append(args, "--author="+v) | ||||
| 		} | ||||
| 	} | ||||
| 	if len(opts.Committers) > 0 { | ||||
| 		for _, v := range opts.Committers { | ||||
| 			args = append(args, "--committer="+v) | ||||
| 		} | ||||
| 	} | ||||
| 	if len(opts.After) > 0 { | ||||
| 		args = append(args, "--after="+opts.After) | ||||
| 	} | ||||
| 	if len(opts.Before) > 0 { | ||||
| 		args = append(args, "--before="+opts.Before) | ||||
| 	} | ||||
| 	if opts.All { | ||||
| 		args = append(args, "--all") | ||||
| 	} | ||||
| 	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") | ||||
| 	} | ||||
| 	cmd.AddArguments(args...) | ||||
| 	stdout, err := cmd.RunInDirBytes(repo.Path) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return repo.parsePrettyFormatLogToList(stdout) | ||||
| 	if len(stdout) != 0 { | ||||
| 		stdout = append(stdout, '\n') | ||||
| 	} | ||||
| 	if len(opts.Keywords) > 0 { | ||||
| 		for _, v := range opts.Keywords { | ||||
| 			if len(v) >= 4 { | ||||
| 				hashCmd := NewCommand("log", "-1", prettyLogFormat) | ||||
| 				hashCmd.AddArguments(args...) | ||||
| 				hashCmd.AddArguments(v) | ||||
| 				hashMatching, err := hashCmd.RunInDirBytes(repo.Path) | ||||
| 				if err != nil || bytes.Contains(stdout, hashMatching) { | ||||
| 					continue | ||||
| 				} | ||||
| 				stdout = append(stdout, hashMatching...) | ||||
| 				stdout = append(stdout, '\n') | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return repo.parsePrettyFormatLogToList(bytes.TrimSuffix(stdout, []byte{'\n'})) | ||||
| } | ||||
|  | ||||
| func (repo *Repository) getFilesChanged(id1, id2 string) ([]string, error) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user