From 5cdb8364a914613e3d8d5b1e3865fcb04f508e94 Mon Sep 17 00:00:00 2001 From: leo Date: Tue, 17 Mar 2026 13:50:18 +0800 Subject: [PATCH] enhance: run checking out automatically when all the local changes are new files Signed-off-by: leo --- src/ViewModels/Checkout.cs | 5 ----- src/ViewModels/Repository.cs | 17 ++++++++++++++++- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/ViewModels/Checkout.cs b/src/ViewModels/Checkout.cs index 71a324c6..aca5cb1e 100644 --- a/src/ViewModels/Checkout.cs +++ b/src/ViewModels/Checkout.cs @@ -22,11 +22,6 @@ namespace SourceGit.ViewModels DiscardLocalChanges = false; } - public override bool CanStartDirectly() - { - return _repo.LocalChangesCount == 0; - } - public override async Task Sure() { using var lockWatcher = _repo.LockWatcher(); diff --git a/src/ViewModels/Repository.cs b/src/ViewModels/Repository.cs index bbd25f17..bf31a3d5 100644 --- a/src/ViewModels/Repository.cs +++ b/src/ViewModels/Repository.cs @@ -1332,12 +1332,23 @@ namespace SourceGit.ViewModels changes.Sort((l, r) => Models.NumericSort.Compare(l.Path, r.Path)); _workingCopy.SetData(changes, token); + var hasModified = false; + foreach (var c in changes) + { + if (c.Index == Models.ChangeState.Added || c.WorkTree == Models.ChangeState.Untracked) + continue; + + hasModified = true; + break; + } + Dispatcher.UIThread.Invoke(() => { if (token.IsCancellationRequested) return; LocalChangesCount = changes.Count; + _canCheckoutDirectly = !hasModified; OnPropertyChanged(nameof(InProgressContext)); GetOwnerPage()?.ChangeDirtyState(Models.DirtyState.HasLocalChanges, changes.Count == 0); }); @@ -1411,7 +1422,10 @@ namespace SourceGit.ViewModels if (branch.IsLocal) { - await ShowAndStartPopupAsync(new Checkout(this, branch)); + if (_canCheckoutDirectly) + await ShowAndStartPopupAsync(new Checkout(this, branch)); + else + ShowPopup(new Checkout(this, branch)); } else { @@ -1965,6 +1979,7 @@ namespace SourceGit.ViewModels private List _submodules = []; private object _visibleSubmodules = null; private string _navigateToCommitDelayed = string.Empty; + private bool _canCheckoutDirectly = false; private bool _isAutoFetching = false; private Timer _autoFetchTimer = null;