From d09866e2c3abf2499d6bfa3aee92cb25ccc941de Mon Sep 17 00:00:00 2001 From: leo Date: Wed, 17 Jul 2024 20:54:09 +0800 Subject: [PATCH] enhance: commit search (#268) * add `-i` parameter to ignore case while searching commit message * add `--branches --remotes` to search commits from all branches --- src/Commands/QueryCommits.cs | 26 ++++++++++++++++++-------- src/ViewModels/Repository.cs | 4 ++-- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/Commands/QueryCommits.cs b/src/Commands/QueryCommits.cs index 66a1ee28..7d4b6991 100644 --- a/src/Commands/QueryCommits.cs +++ b/src/Commands/QueryCommits.cs @@ -14,20 +14,30 @@ namespace SourceGit.Commands _findFirstMerged = needFindHead; } - public QueryCommits(string repo, int maxCount, string messageFilter) + public QueryCommits(string repo, int maxCount, string messageFilter, bool isFile) { - var argsBuilder = new StringBuilder(); - var words = messageFilter.Split(new[] { ' ', '\t', '\r' }, StringSplitOptions.RemoveEmptyEntries); - foreach (var word in words) + string search; + if (isFile) { - var escaped = word.Trim().Replace("\"", "\\\"", StringComparison.Ordinal); - argsBuilder.Append($"--grep=\"{escaped}\" "); + search = $"-- \"{messageFilter}\""; } - 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; 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; } diff --git a/src/ViewModels/Repository.cs b/src/ViewModels/Repository.cs index 36fd77d9..5f82953f 100644 --- a/src/ViewModels/Repository.cs +++ b/src/ViewModels/Repository.cs @@ -566,10 +566,10 @@ namespace SourceGit.ViewModels break; case 2: - visible = new Commands.QueryCommits(FullPath, 1000, _searchCommitFilter).Result(); + visible = new Commands.QueryCommits(FullPath, 1000, _searchCommitFilter, false).Result(); break; case 3: - visible = new Commands.QueryCommits(FullPath, $"-1000 -- \"{_searchCommitFilter}\"", false).Result(); + visible = new Commands.QueryCommits(FullPath, 1000, _searchCommitFilter, true).Result(); break; }