Skip to content

Commit

Permalink
Search Commits via Commit Hash (#7400)
Browse files Browse the repository at this point in the history
* search commits via commit hash

Signed-off-by: Gary Kim <[email protected]>

* Also include all option for hash search

Signed-off-by: Gary Kim <[email protected]>

* Remove code duplication in commit search

Signed-off-by: Gary Kim <[email protected]>

* Add case ignore to commit hash search

Signed-off-by: Gary Kim <[email protected]>
  • Loading branch information
gary-kim authored and techknowlogick committed Sep 2, 2019
1 parent 6097ff6 commit ee11974
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 12 deletions.
6 changes: 6 additions & 0 deletions integrations/repo_commits_search_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
}
45 changes: 33 additions & 12 deletions modules/git/repo_commit.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
if len(opts.Keywords) > 0 {
for _, v := range opts.Keywords {
cmd.AddArguments("--grep=" + v)
}
}
cmd := NewCommand("log", id.String(), "-100", prettyLogFormat)
args := []string{"-i"}
if len(opts.Authors) > 0 {
for _, v := range opts.Authors {
cmd.AddArguments("--author=" + v)
args = append(args, "--author="+v)
}
}
if len(opts.Committers) > 0 {
for _, v := range opts.Committers {
cmd.AddArguments("--committer=" + v)
args = append(args, "--committer="+v)
}
}
if len(opts.After) > 0 {
cmd.AddArguments("--after=" + opts.After)
args = append(args, "--after="+opts.After)
}
if len(opts.Before) > 0 {
cmd.AddArguments("--before=" + opts.Before)
args = append(args, "--before="+opts.Before)
}
if opts.All {
cmd.AddArguments("--all")
args = append(args, "--all")
}
if len(opts.Keywords) > 0 {
for _, v := range opts.Keywords {
cmd.AddArguments("--grep=" + v)
}
}
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) {
Expand Down

0 comments on commit ee11974

Please sign in to comment.