From addbb19728f7a07a67f6b2a8a9083f2e4389b079 Mon Sep 17 00:00:00 2001 From: leo Date: Thu, 15 Aug 2024 22:13:20 +0800 Subject: [PATCH] feature: add context menu items to revision changes to reset (checkout) selected file to this revision or to it's first parent file version (#359) --- src/Resources/Locales/en_US.axaml | 2 ++ src/Resources/Locales/zh_CN.axaml | 2 ++ src/Resources/Locales/zh_TW.axaml | 2 ++ src/ViewModels/CommitDetail.cs | 28 +++++++++++++++++++++++++++- 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/Resources/Locales/en_US.axaml b/src/Resources/Locales/en_US.axaml index 6f03ef06..75be560a 100644 --- a/src/Resources/Locales/en_US.axaml +++ b/src/Resources/Locales/en_US.axaml @@ -64,6 +64,8 @@ Branch Compare Bytes CANCEL + Reset to This Revision + Reset to Parent Revision CHANGE DISPLAY MODE Show as File and Dir List Show as Path List diff --git a/src/Resources/Locales/zh_CN.axaml b/src/Resources/Locales/zh_CN.axaml index 96b85d7b..2bd21da2 100644 --- a/src/Resources/Locales/zh_CN.axaml +++ b/src/Resources/Locales/zh_CN.axaml @@ -67,6 +67,8 @@ 分支比较 字节 取 消 + 重置文件到该版本 + 重置文件到上一版本 切换变更显示模式 文件名+路径列表模式 全路径列表模式 diff --git a/src/Resources/Locales/zh_TW.axaml b/src/Resources/Locales/zh_TW.axaml index 1f49fe1b..ea4a2cde 100644 --- a/src/Resources/Locales/zh_TW.axaml +++ b/src/Resources/Locales/zh_TW.axaml @@ -67,6 +67,8 @@ 分支比較 位元組 取 消 + 重置檔案到該版本 + 重置檔案到上一版本 切換變更顯示模式 檔名+路徑列表模式 全路徑列表模式 diff --git a/src/ViewModels/CommitDetail.cs b/src/ViewModels/CommitDetail.cs index 33a96022..dba0e7b2 100644 --- a/src/ViewModels/CommitDetail.cs +++ b/src/ViewModels/CommitDetail.cs @@ -260,6 +260,33 @@ namespace SourceGit.ViewModels ev.Handled = true; }; menu.Items.Add(diffWithMerger); + menu.Items.Add(new MenuItem { Header = "-" }); + + if (File.Exists(Path.Combine(_repo.FullPath, change.Path))) + { + var resetToThisRevision = new MenuItem(); + resetToThisRevision.Header = App.Text("ChangeCM.CheckoutThisRevision"); + resetToThisRevision.Icon = App.CreateMenuIcon("Icons.Undo"); + resetToThisRevision.Click += (_, ev) => + { + new Commands.Checkout(_repo.FullPath).FileWithRevision(change.Path, $"{_commit.SHA}"); + ev.Handled = true; + }; + + var resetToFirstParent = new MenuItem(); + resetToFirstParent.Header = App.Text("ChangeCM.CheckoutFirstParentRevision"); + resetToFirstParent.Icon = App.CreateMenuIcon("Icons.Undo"); + resetToFirstParent.IsEnabled = _commit.Parents.Count > 0 && change.Index != Models.ChangeState.Added; + resetToFirstParent.Click += (_, ev) => + { + new Commands.Checkout(_repo.FullPath).FileWithRevision(change.Path, $"{_commit.SHA}~1"); + ev.Handled = true; + }; + + menu.Items.Add(resetToThisRevision); + menu.Items.Add(resetToFirstParent); + menu.Items.Add(new MenuItem { Header = "-" }); + } if (change.Index != Models.ChangeState.Deleted) { @@ -294,7 +321,6 @@ namespace SourceGit.ViewModels ev.Handled = true; }; - menu.Items.Add(new MenuItem { Header = "-" }); menu.Items.Add(history); menu.Items.Add(blame); menu.Items.Add(explore);