From 0e35c565299e4c83b75d0e94115fd50c26abd5f0 Mon Sep 17 00:00:00 2001 From: leo Date: Sun, 25 May 2025 13:03:36 +0800 Subject: [PATCH] enhance: disable squash and fixup for the first commit in interactive rebase list (#1362) Signed-off-by: leo --- src/ViewModels/InteractiveRebase.cs | 32 +++++++++++++++++++++++++---- src/Views/InteractiveRebase.axaml | 4 ++-- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/ViewModels/InteractiveRebase.cs b/src/ViewModels/InteractiveRebase.cs index 0e77eecf..a8fe1c2b 100644 --- a/src/ViewModels/InteractiveRebase.cs +++ b/src/ViewModels/InteractiveRebase.cs @@ -19,6 +19,19 @@ namespace SourceGit.ViewModels private set; } + public bool CanSquashOrFixup + { + get => _canSquashOrFixup; + set + { + if (SetProperty(ref _canSquashOrFixup, value)) + { + if (_action == Models.InteractiveRebaseAction.Squash || _action == Models.InteractiveRebaseAction.Fixup) + Action = Models.InteractiveRebaseAction.Pick; + } + } + } + public Models.InteractiveRebaseAction Action { get => _action; @@ -48,10 +61,11 @@ namespace SourceGit.ViewModels } } - public InteractiveRebaseItem(Models.Commit c, string message) + public InteractiveRebaseItem(Models.Commit c, string message, bool canSquashOrFixup) { Commit = c; FullMessage = message; + CanSquashOrFixup = canSquashOrFixup; } public void SetAction(object param) @@ -62,6 +76,7 @@ namespace SourceGit.ViewModels private Models.InteractiveRebaseAction _action = Models.InteractiveRebaseAction.Pick; private string _subject; private string _fullMessage; + private bool _canSquashOrFixup = true; } public class InteractiveRebase : ObservableObject @@ -88,7 +103,7 @@ namespace SourceGit.ViewModels { get; private set; - } = new AvaloniaList(); + } = []; public InteractiveRebaseItem SelectedItem { @@ -121,8 +136,11 @@ namespace SourceGit.ViewModels var commits = new Commands.QueryCommitsForInteractiveRebase(repoPath, on.SHA).Result(); var list = new List(); - foreach (var c in commits) - list.Add(new InteractiveRebaseItem(c.Commit, c.Message)); + for (var i = 0; i < commits.Count; i++) + { + var c = commits[i]; + list.Add(new InteractiveRebaseItem(c.Commit, c.Message, i < commits.Count - 1)); + } Dispatcher.UIThread.Invoke(() => { @@ -140,6 +158,9 @@ namespace SourceGit.ViewModels var prev = Items[idx - 1]; Items.RemoveAt(idx - 1); Items.Insert(idx, prev); + + item.CanSquashOrFixup = true; + prev.CanSquashOrFixup = idx < Items.Count - 1; SelectedItem = item; } } @@ -152,6 +173,9 @@ namespace SourceGit.ViewModels var next = Items[idx + 1]; Items.RemoveAt(idx + 1); Items.Insert(idx, next); + + item.CanSquashOrFixup = idx < Items.Count - 2; + next.CanSquashOrFixup = true; SelectedItem = item; } } diff --git a/src/Views/InteractiveRebase.axaml b/src/Views/InteractiveRebase.axaml index 0883c9dc..7307eb84 100644 --- a/src/Views/InteractiveRebase.axaml +++ b/src/Views/InteractiveRebase.axaml @@ -143,7 +143,7 @@ - + @@ -155,7 +155,7 @@ - +