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:
		
							parent
							
								
									6097ff68e7
								
							
						
					
					
						commit
						ee11974719
					
				
					 2 changed files with 48 additions and 21 deletions
				
			
		|  | @ -28,10 +28,16 @@ func testRepoCommitsSearch(t *testing.T, query, commit string) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func TestRepoCommitsSearch(t *testing.T) { | 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", "6e8eabd9a7") | ||||||
|  | 	testRepoCommitsSearch(t, "author:alice 6e8ea", "6e8eabd9a7") | ||||||
| 	testRepoCommitsSearch(t, "committer:Tom", "58e97d1a24") | 	testRepoCommitsSearch(t, "committer:Tom", "58e97d1a24") | ||||||
| 	testRepoCommitsSearch(t, "author:bob commit-4", "58e97d1a24") | 	testRepoCommitsSearch(t, "author:bob commit-4", "58e97d1a24") | ||||||
| 	testRepoCommitsSearch(t, "author:bob commit after:2019-03-03", "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 commit before:2019-03-02", "6e8eabd9a7") | ||||||
| 	testRepoCommitsSearch(t, "committer:alice author:tom commit before:2019-03-04 after:2019-03-02", "0a8499a22a") | 	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) { | 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 { | 	if len(opts.Keywords) > 0 { | ||||||
| 		for _, v := range opts.Keywords { | 		for _, v := range opts.Keywords { | ||||||
| 			cmd.AddArguments("--grep=" + v) | 			cmd.AddArguments("--grep=" + v) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if len(opts.Authors) > 0 { | 	cmd.AddArguments(args...) | ||||||
| 		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) | 	stdout, err := cmd.RunInDirBytes(repo.Path) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		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) { | func (repo *Repository) getFilesChanged(id1, id2 string) ([]string, error) { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue