diff options
author | Gary Kim <gary@garykim.dev> | 2019-09-02 23:38:04 +0000 |
---|---|---|
committer | techknowlogick <techknowlogick@gitea.io> | 2019-09-02 19:38:04 -0400 |
commit | ee11974719528197241840dc245f7daf08ec5c0a (patch) | |
tree | d1a4483ae5650bcb9aa1f103c62c445e914ebba8 /modules | |
parent | 6097ff68e7a50a3ae4933a4169c007a78651017e (diff) | |
download | gitea-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.go | 45 |
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) { |