git-grep: refactor defaults

One method to set them all... or something like that.

The defaults for git-grep options were scattered over the run
function body. This change refactors them into a separate method.
The application of defaults is checked implicitly by existing
tests and linters, and the new approach makes it very easy
to inspect the desired defaults are set.
This commit is contained in:
Radosław Piliszek 2024-08-15 10:23:47 +02:00
parent ad92ede00a
commit f784260633

View file

@ -35,6 +35,12 @@ type GrepOptions struct {
PathSpec []setting.Glob PathSpec []setting.Glob
} }
func (opts *GrepOptions) ensureDefaults() {
opts.RefName = cmp.Or(opts.RefName, "HEAD")
opts.MaxResultLimit = cmp.Or(opts.MaxResultLimit, 50)
opts.MatchesPerFile = cmp.Or(opts.MatchesPerFile, 20)
}
func hasPrefixFold(s, t string) bool { func hasPrefixFold(s, t string) bool {
if len(s) < len(t) { if len(s) < len(t) {
return false return false
@ -52,6 +58,8 @@ func GrepSearch(ctx context.Context, repo *Repository, search string, opts GrepO
_ = stdoutWriter.Close() _ = stdoutWriter.Close()
}() }()
opts.ensureDefaults()
/* /*
The output is like this ("^@" means \x00; the first number denotes the line, The output is like this ("^@" means \x00; the first number denotes the line,
the second number denotes the column of the first match in line): the second number denotes the column of the first match in line):
@ -68,7 +76,6 @@ func GrepSearch(ctx context.Context, repo *Repository, search string, opts GrepO
"-I", "--null", "--break", "--heading", "--column", "-I", "--null", "--break", "--heading", "--column",
"--fixed-strings", "--line-number", "--ignore-case", "--full-name") "--fixed-strings", "--line-number", "--ignore-case", "--full-name")
cmd.AddOptionValues("--context", fmt.Sprint(opts.ContextLineNumber)) cmd.AddOptionValues("--context", fmt.Sprint(opts.ContextLineNumber))
opts.MatchesPerFile = cmp.Or(opts.MatchesPerFile, 20)
cmd.AddOptionValues("--max-count", fmt.Sprint(opts.MatchesPerFile)) cmd.AddOptionValues("--max-count", fmt.Sprint(opts.MatchesPerFile))
words := []string{search} words := []string{search}
if opts.IsFuzzy { if opts.IsFuzzy {
@ -89,9 +96,8 @@ func GrepSearch(ctx context.Context, repo *Repository, search string, opts GrepO
for _, expr := range setting.Indexer.ExcludePatterns { for _, expr := range setting.Indexer.ExcludePatterns {
files = append(files, ":^"+expr.Pattern()) files = append(files, ":^"+expr.Pattern())
} }
cmd.AddDynamicArguments(cmp.Or(opts.RefName, "HEAD")).AddDashesAndList(files...) cmd.AddDynamicArguments(opts.RefName).AddDashesAndList(files...)
opts.MaxResultLimit = cmp.Or(opts.MaxResultLimit, 50)
stderr := bytes.Buffer{} stderr := bytes.Buffer{}
err = cmd.Run(&RunOpts{ err = cmd.Run(&RunOpts{
Dir: repo.Path, Dir: repo.Path,