summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorGary Kim <gary@garykim.dev>2019-09-02 23:38:04 +0000
committertechknowlogick <techknowlogick@gitea.io>2019-09-02 19:38:04 -0400
commitee11974719528197241840dc245f7daf08ec5c0a (patch)
treed1a4483ae5650bcb9aa1f103c62c445e914ebba8 /modules
parent6097ff68e7a50a3ae4933a4169c007a78651017e (diff)
downloadgitea-ee11974719528197241840dc245f7daf08ec5c0a.tar.gz
gitea-ee11974719528197241840dc245f7daf08ec5c0a.zip
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>
Diffstat (limited to 'modules')
-rw-r--r--modules/git/repo_commit.go45
1 files changed, 33 insertions, 12 deletions
diff --git a/modules/git/repo_commit.go b/modules/git/repo_commit.go
index 28374298c1..5808c7600e 100644
--- a/modules/git/repo_commit.go
+++ b/modules/git/repo_commit.go
@@ -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) {