From 64295a9d28283f73c6531c1915f5415a3776e559 Mon Sep 17 00:00:00 2001 From: leo Date: Thu, 28 Aug 2025 14:42:36 +0800 Subject: [PATCH] refactor: rewrite the way to checkout untracked/new-added file from stash Signed-off-by: leo --- src/ViewModels/StashesPage.cs | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/src/ViewModels/StashesPage.cs b/src/ViewModels/StashesPage.cs index 3d18fff5..de34ecab 100644 --- a/src/ViewModels/StashesPage.cs +++ b/src/ViewModels/StashesPage.cs @@ -198,24 +198,16 @@ namespace SourceGit.ViewModels public async Task CheckoutSingleFileAsync(Models.Change change) { - var fullPath = Native.OS.GetAbsPath(_repo.FullPath, change.Path); - var log = _repo.CreateLog($"Reset File to '{_selectedStash.SHA}'"); + var revision = _selectedStash.SHA; + if (_untracked.Contains(change) && _selectedStash.Parents.Count == 3) + revision = _selectedStash.Parents[2]; + else if (change.Index == Models.ChangeState.Added && _selectedStash.Parents.Count > 1) + revision = _selectedStash.Parents[1]; - if (_untracked.Contains(change)) - { - await Commands.SaveRevisionFile.RunAsync(_repo.FullPath, _selectedStash.Parents[2], change.Path, fullPath); - } - else if (change.Index == Models.ChangeState.Added) - { - await Commands.SaveRevisionFile.RunAsync(_repo.FullPath, _selectedStash.SHA, change.Path, fullPath); - } - else - { - await new Commands.Checkout(_repo.FullPath) + var log = _repo.CreateLog($"Reset File to '{_selectedStash.Name}'"); + await new Commands.Checkout(_repo.FullPath) .Use(log) - .FileWithRevisionAsync(change.Path, $"{_selectedStash.SHA}"); - } - + .FileWithRevisionAsync(change.Path, revision); log.Complete(); }