From 9f58e0c715d66802c746dc162d94c2e5c97b5c44 Mon Sep 17 00:00:00 2001 From: leo Date: Wed, 17 Nov 2021 16:12:26 +0800 Subject: [PATCH] feature: add 'Prune' context menu for remote to prune dead branches without fetching --- src/Commands/Remote.cs | 5 +++++ src/Resources/Locales/en_US.xaml | 9 +++++---- src/Resources/Locales/zh_CN.xaml | 7 ++++--- src/Views/Popups/Prune.xaml | 10 ++++++++++ src/Views/Popups/Prune.xaml.cs | 30 +++++++++++++++++++++++++++++ src/Views/Widgets/Dashboard.xaml.cs | 14 +++++++++++--- 6 files changed, 65 insertions(+), 10 deletions(-) create mode 100644 src/Views/Popups/Prune.xaml create mode 100644 src/Views/Popups/Prune.xaml.cs diff --git a/src/Commands/Remote.cs b/src/Commands/Remote.cs index 7bbc73ad..09326afd 100644 --- a/src/Commands/Remote.cs +++ b/src/Commands/Remote.cs @@ -23,6 +23,11 @@ namespace SourceGit.Commands { return Exec(); } + public bool Prune(string name) { + Args = $"remote prune {name}"; + return Exec(); + } + public bool SetURL(string name, string url) { Args = $"remote set-url {name} {url}"; return Exec(); diff --git a/src/Resources/Locales/en_US.xaml b/src/Resources/Locales/en_US.xaml index ed9d45df..e6580b6c 100644 --- a/src/Resources/Locales/en_US.xaml +++ b/src/Resources/Locales/en_US.xaml @@ -185,10 +185,11 @@ Copy Branch Name Unset Upstream - Fetch '{0}' - Edit '{0}' - Delete '{0}' - Copy Remote URL + Fetch ... + Prune + Edit ... + Delete ... + Copy URL Reset '{0}' to Here Rebase '{0}' to Here diff --git a/src/Resources/Locales/zh_CN.xaml b/src/Resources/Locales/zh_CN.xaml index b28eb483..ad67a4b2 100644 --- a/src/Resources/Locales/zh_CN.xaml +++ b/src/Resources/Locales/zh_CN.xaml @@ -184,9 +184,10 @@ 复制分支名 取消追踪 - 拉取 '{0}' 更新 - 编辑 '{0}' - 删除 '{0}' + 拉取更新 ... + 清理远程已删除分支 + 编辑 ... + 删除 ... 复制远程地址 重置 '{0}' 到此处 diff --git a/src/Views/Popups/Prune.xaml b/src/Views/Popups/Prune.xaml new file mode 100644 index 00000000..2a207bd7 --- /dev/null +++ b/src/Views/Popups/Prune.xaml @@ -0,0 +1,10 @@ + + diff --git a/src/Views/Popups/Prune.xaml.cs b/src/Views/Popups/Prune.xaml.cs new file mode 100644 index 00000000..cca1e137 --- /dev/null +++ b/src/Views/Popups/Prune.xaml.cs @@ -0,0 +1,30 @@ +using System.Threading.Tasks; + +namespace SourceGit.Views.Popups { + /// + /// 清理远程已删除分支 + /// + public partial class Prune : Controls.PopupWidget { + private string repo = null; + private string remote = null; + + public Prune(string repo, string remote) { + this.repo = repo; + this.remote = remote; + InitializeComponent(); + } + + public override string GetTitle() { + return App.Text("RemoteCM.Prune"); + } + + public override Task Start() { + return Task.Run(() => { + Models.Watcher.SetEnabled(repo, false); + var succ = new Commands.Remote(repo).Prune(remote); + Models.Watcher.SetEnabled(repo, true); + return succ; + }); + } + } +} diff --git a/src/Views/Widgets/Dashboard.xaml.cs b/src/Views/Widgets/Dashboard.xaml.cs index 1573e494..5354bc5e 100644 --- a/src/Views/Widgets/Dashboard.xaml.cs +++ b/src/Views/Widgets/Dashboard.xaml.cs @@ -745,21 +745,28 @@ namespace SourceGit.Views.Widgets { private void FillRemoteContextMenu(ContextMenu menu, Models.Remote remote) { var fetch = new MenuItem(); - fetch.Header = App.Text("RemoteCM.Fetch", remote.Name); + fetch.Header = App.Text("RemoteCM.Fetch"); fetch.Click += (o, e) => { new Popups.Fetch(repo, remote.Name).Show(); e.Handled = true; }; + var prune = new MenuItem(); + prune.Header = App.Text("RemoteCM.Prune"); + prune.Click += (o, e) => { + new Popups.Prune(repo.Path, remote.Name).ShowAndStart(); + e.Handled = true; + }; + var edit = new MenuItem(); - edit.Header = App.Text("RemoteCM.Edit", remote.Name); + edit.Header = App.Text("RemoteCM.Edit"); edit.Click += (o, e) => { new Popups.Remote(repo, remote).Show(); e.Handled = true; }; var delete = new MenuItem(); - delete.Header = App.Text("RemoteCM.Delete", remote.Name); + delete.Header = App.Text("RemoteCM.Delete"); delete.Click += (o, e) => { new Popups.DeleteRemote(repo.Path, remote.Name).Show(); e.Handled = true; @@ -773,6 +780,7 @@ namespace SourceGit.Views.Widgets { }; menu.Items.Add(fetch); + menu.Items.Add(prune); menu.Items.Add(new Separator()); menu.Items.Add(edit); menu.Items.Add(delete);