Skip to content

Commit 27d1bbc

Browse files
committed
search commits via commit hash
Signed-off-by: Gary Kim <[email protected]>
1 parent 877df0f commit 27d1bbc

File tree

2 files changed

+31
-6
lines changed

2 files changed

+31
-6
lines changed

integrations/repo_commits_search_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,16 @@ func testRepoCommitsSearch(t *testing.T, query, commit string) {
2828
}
2929

3030
func TestRepoCommitsSearch(t *testing.T) {
31+
testRepoCommitsSearch(t, "e8eabd", "")
32+
testRepoCommitsSearch(t, "38a9cb", "")
33+
testRepoCommitsSearch(t, "6e8e", "6e8eabd9a7")
34+
testRepoCommitsSearch(t, "58e97", "58e97d1a24")
3135
testRepoCommitsSearch(t, "author:alice", "6e8eabd9a7")
36+
testRepoCommitsSearch(t, "author:alice 6e8ea", "6e8eabd9a7")
3237
testRepoCommitsSearch(t, "committer:Tom", "58e97d1a24")
3338
testRepoCommitsSearch(t, "author:bob commit-4", "58e97d1a24")
3439
testRepoCommitsSearch(t, "author:bob commit after:2019-03-03", "58e97d1a24")
40+
testRepoCommitsSearch(t, "committer:alice 6e8e before:2019-03-02", "6e8eabd9a7")
3541
testRepoCommitsSearch(t, "committer:alice commit before:2019-03-02", "6e8eabd9a7")
3642
testRepoCommitsSearch(t, "committer:alice author:tom commit before:2019-03-04 after:2019-03-02", "0a8499a22a")
3743
}

modules/git/repo_commit.go

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -203,35 +203,54 @@ func (repo *Repository) commitsByRange(id SHA1, page int) (*list.List, error) {
203203

204204
func (repo *Repository) searchCommits(id SHA1, opts SearchCommitsOptions) (*list.List, error) {
205205
cmd := NewCommand("log", id.String(), "-100", "-i", prettyLogFormat)
206-
if len(opts.Keywords) > 0 {
207-
for _, v := range opts.Keywords {
208-
cmd.AddArguments("--grep=" + v)
209-
}
210-
}
206+
args := []string{"log", "-i", prettyLogFormat}
211207
if len(opts.Authors) > 0 {
212208
for _, v := range opts.Authors {
213209
cmd.AddArguments("--author=" + v)
210+
args = append(args, "--author="+v)
214211
}
215212
}
216213
if len(opts.Committers) > 0 {
217214
for _, v := range opts.Committers {
218215
cmd.AddArguments("--committer=" + v)
216+
args = append(args, "--committer="+v)
219217
}
220218
}
221219
if len(opts.After) > 0 {
222220
cmd.AddArguments("--after=" + opts.After)
221+
args = append(args, "--after="+opts.After)
223222
}
224223
if len(opts.Before) > 0 {
225224
cmd.AddArguments("--before=" + opts.Before)
225+
args = append(args, "--before="+opts.Before)
226226
}
227227
if opts.All {
228228
cmd.AddArguments("--all")
229229
}
230+
if len(opts.Keywords) > 0 {
231+
for _, v := range opts.Keywords {
232+
cmd.AddArguments("--grep=" + v)
233+
}
234+
}
230235
stdout, err := cmd.RunInDirBytes(repo.Path)
231236
if err != nil {
232237
return nil, err
233238
}
234-
return repo.parsePrettyFormatLogToList(stdout)
239+
if len(opts.Keywords) > 0 {
240+
for _, v := range opts.Keywords {
241+
if len(v) >= 4 {
242+
hashCmd := NewCommand(args...)
243+
hashCmd.AddArguments("-1", v)
244+
hashMatching, err := hashCmd.RunInDirBytes(repo.Path)
245+
if err != nil || bytes.Contains(stdout, hashMatching) {
246+
continue
247+
}
248+
stdout = append(stdout, hashMatching...)
249+
stdout = append(stdout, '\n')
250+
}
251+
}
252+
}
253+
return repo.parsePrettyFormatLogToList(bytes.TrimSuffix(stdout, []byte{'\n'}))
235254
}
236255

237256
func (repo *Repository) getFilesChanged(id1, id2 string) ([]string, error) {

0 commit comments

Comments
 (0)