enhance: commit search (#268)

* add `-i` parameter to ignore case while searching commit message
* add `--branches --remotes` to search commits from all branches
This commit is contained in:
leo 2024-07-17 20:54:09 +08:00
parent a68b61da94
commit d09866e2c3
No known key found for this signature in database
2 changed files with 20 additions and 10 deletions

View file

@ -14,20 +14,30 @@ namespace SourceGit.Commands
_findFirstMerged = needFindHead; _findFirstMerged = needFindHead;
} }
public QueryCommits(string repo, int maxCount, string messageFilter) public QueryCommits(string repo, int maxCount, string messageFilter, bool isFile)
{ {
var argsBuilder = new StringBuilder(); string search;
var words = messageFilter.Split(new[] { ' ', '\t', '\r' }, StringSplitOptions.RemoveEmptyEntries); if (isFile)
foreach (var word in words)
{ {
var escaped = word.Trim().Replace("\"", "\\\"", StringComparison.Ordinal); search = $"-- \"{messageFilter}\"";
argsBuilder.Append($"--grep=\"{escaped}\" ");
} }
argsBuilder.Append("--all-match"); else
{
var argsBuilder = new StringBuilder();
var words = messageFilter.Split(new[] { ' ', '\t', '\r' }, StringSplitOptions.RemoveEmptyEntries);
foreach (var word in words)
{
var escaped = word.Trim().Replace("\"", "\\\"", StringComparison.Ordinal);
argsBuilder.Append($"--grep=\"{escaped}\" ");
}
argsBuilder.Append("--all-match -i");
search = argsBuilder.ToString();
}
WorkingDirectory = repo; WorkingDirectory = repo;
Context = repo; Context = repo;
Args = $"log -{maxCount} --date-order --no-show-signature --decorate=full --pretty=format:%H%n%P%n%D%n%aN±%aE%n%at%n%cN±%cE%n%ct%n%s " + argsBuilder.ToString(); Args = $"log -{maxCount} --date-order --no-show-signature --decorate=full --pretty=format:%H%n%P%n%D%n%aN±%aE%n%at%n%cN±%cE%n%ct%n%s --branches --remotes " + search;
_findFirstMerged = false; _findFirstMerged = false;
} }

View file

@ -566,10 +566,10 @@ namespace SourceGit.ViewModels
break; break;
case 2: case 2:
visible = new Commands.QueryCommits(FullPath, 1000, _searchCommitFilter).Result(); visible = new Commands.QueryCommits(FullPath, 1000, _searchCommitFilter, false).Result();
break; break;
case 3: case 3:
visible = new Commands.QueryCommits(FullPath, $"-1000 -- \"{_searchCommitFilter}\"", false).Result(); visible = new Commands.QueryCommits(FullPath, 1000, _searchCommitFilter, true).Result();
break; break;
} }