feature: use git stash show -u --name-status <stash_name> command to query changes in selected stash if git >= 2.32.0

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo 2025-03-20 21:12:08 +08:00
parent 65dbfd336d
commit 38d87fa1a1
No known key found for this signature in database
4 changed files with 98 additions and 13 deletions

View file

@ -64,7 +64,7 @@ namespace SourceGit.ViewModels
{
if (OnlyStaged)
{
if (Native.OS.GitVersion >= Models.GitVersions.STASH_ONLY_STAGED)
if (Native.OS.GitVersion >= Models.GitVersions.STASH_PUSH_ONLY_STAGED)
{
succ = new Commands.Stash(_repo.FullPath).PushOnlyStaged(Message, KeepIndex);
}
@ -109,7 +109,7 @@ namespace SourceGit.ViewModels
return true;
var succ = false;
if (Native.OS.GitVersion >= Models.GitVersions.STASH_WITH_PATHSPECFILE)
if (Native.OS.GitVersion >= Models.GitVersions.STASH_PUSH_WITH_PATHSPECFILE)
{
var paths = new List<string>();
foreach (var c in changes)

View file

@ -58,14 +58,26 @@ namespace SourceGit.ViewModels
{
Task.Run(() =>
{
var changes = new Commands.CompareRevisions(_repo.FullPath, $"{value.SHA}^", value.SHA).Result();
if (value.Parents.Count == 3)
{
var untracked = new Commands.CompareRevisions(_repo.FullPath, "4b825dc642cb6eb9a060e54bf8d69288fbee4904", value.Parents[2]).Result();
foreach (var c in untracked)
changes.Add(c);
var changes = null as List<Models.Change>;
changes.Sort((l, r) => string.Compare(l.Path, r.Path, StringComparison.Ordinal));
if (Native.OS.GitVersion >= Models.GitVersions.STASH_SHOW_WITH_UNTRACKED)
{
changes = new Commands.QueryStashChanges(_repo.FullPath, value.Name).Result();
}
else
{
changes = new Commands.CompareRevisions(_repo.FullPath, $"{value.SHA}^", value.SHA).Result();
if (value.Parents.Count == 3)
{
var untracked = new Commands.CompareRevisions(_repo.FullPath, "4b825dc642cb6eb9a060e54bf8d69288fbee4904", value.Parents[2]).Result();
var needSort = changes.Count > 0;
foreach (var c in untracked)
changes.Add(c);
if (needSort)
changes.Sort((l, r) => string.Compare(l.Path, r.Path, StringComparison.Ordinal));
}
}
Dispatcher.UIThread.Invoke(() => Changes = changes);