|
|
@@ -24,6 +24,7 @@ type GrepResult struct { |
|
|
|
|
|
|
|
type GrepOptions struct { |
|
|
|
RefName string |
|
|
|
MaxResultLimit int |
|
|
|
ContextLineNumber int |
|
|
|
IsFuzzy bool |
|
|
|
} |
|
|
@@ -59,6 +60,7 @@ func GrepSearch(ctx context.Context, repo *Repository, search string, opts GrepO |
|
|
|
cmd.AddOptionValues("-e", strings.TrimLeft(search, "-")) |
|
|
|
} |
|
|
|
cmd.AddDynamicArguments(util.IfZero(opts.RefName, "HEAD")) |
|
|
|
opts.MaxResultLimit = util.IfZero(opts.MaxResultLimit, 50) |
|
|
|
stderr := bytes.Buffer{} |
|
|
|
err = cmd.Run(&RunOpts{ |
|
|
|
Dir: repo.Path, |
|
|
@@ -82,7 +84,7 @@ func GrepSearch(ctx context.Context, repo *Repository, search string, opts GrepO |
|
|
|
continue |
|
|
|
} |
|
|
|
if line == "" { |
|
|
|
if len(results) >= 50 { |
|
|
|
if len(results) >= opts.MaxResultLimit { |
|
|
|
cancel() |
|
|
|
break |
|
|
|
} |
|
|
@@ -101,6 +103,10 @@ func GrepSearch(ctx context.Context, repo *Repository, search string, opts GrepO |
|
|
|
return scanner.Err() |
|
|
|
}, |
|
|
|
}) |
|
|
|
// git grep exits by cancel (killed), usually it is caused by the limit of results |
|
|
|
if IsErrorExitCode(err, -1) && stderr.Len() == 0 { |
|
|
|
return results, nil |
|
|
|
} |
|
|
|
// git grep exits with 1 if no results are found |
|
|
|
if IsErrorExitCode(err, 1) && stderr.Len() == 0 { |
|
|
|
return nil, nil |