From 1522da89a23f9d8b46c30161b7d4771ec21f76eb Mon Sep 17 00:00:00 2001 From: leo Date: Thu, 14 Aug 2025 16:10:09 +0800 Subject: [PATCH] refactor: more changes to use async methods Signed-off-by: leo --- src/ViewModels/Histories.cs | 10 ++--- src/ViewModels/LauncherPage.cs | 10 +---- src/ViewModels/Repository.cs | 44 +++++++++++---------- src/ViewModels/WorkingCopy.cs | 6 +-- src/Views/BranchTree.axaml.cs | 32 ++++++++-------- src/Views/Histories.axaml.cs | 23 +++++------ src/Views/LauncherPage.axaml.cs | 11 ++++-- src/Views/Repository.axaml | 2 +- src/Views/Repository.axaml.cs | 8 ++++ src/Views/RepositoryToolbar.axaml | 2 +- src/Views/RepositoryToolbar.axaml.cs | 57 ++++++++++++++++------------ src/Views/TagsView.axaml.cs | 4 +- 12 files changed, 113 insertions(+), 96 deletions(-) diff --git a/src/ViewModels/Histories.cs b/src/ViewModels/Histories.cs index 86424f6d..da627e00 100644 --- a/src/ViewModels/Histories.cs +++ b/src/ViewModels/Histories.cs @@ -193,7 +193,7 @@ namespace SourceGit.ViewModels } } - public bool CheckoutBranchByDecorator(Models.Decorator decorator) + public async Task CheckoutBranchByDecoratorAsync(Models.Decorator decorator) { if (decorator == null) return false; @@ -208,7 +208,7 @@ namespace SourceGit.ViewModels if (b == null) return false; - _repo.CheckoutBranch(b); + await _repo.CheckoutBranchAsync(b); return true; } @@ -231,7 +231,7 @@ namespace SourceGit.ViewModels } else if (!lb.IsCurrent) { - _repo.CheckoutBranch(lb); + await _repo.CheckoutBranchAsync(lb); } return true; @@ -240,7 +240,7 @@ namespace SourceGit.ViewModels return false; } - public void CheckoutBranchByCommit(Models.Commit commit) + public async Task CheckoutBranchByCommitAsync(Models.Commit commit) { if (commit.IsCurrentHead) return; @@ -254,7 +254,7 @@ namespace SourceGit.ViewModels if (b == null) continue; - _repo.CheckoutBranch(b); + await _repo.CheckoutBranchAsync(b); return; } diff --git a/src/ViewModels/LauncherPage.cs b/src/ViewModels/LauncherPage.cs index a39fd7d3..906f9e8a 100644 --- a/src/ViewModels/LauncherPage.cs +++ b/src/ViewModels/LauncherPage.cs @@ -89,15 +89,7 @@ namespace SourceGit.ViewModels return _popup is not { InProgress: true }; } - public void StartPopup(Popup popup) - { - Popup = popup; - - if (popup.CanStartDirectly()) - ProcessPopup(); - } - - public async void ProcessPopup() + public async Task ProcessPopupAsync() { if (_popup is { InProgress: false } dump) { diff --git a/src/ViewModels/Repository.cs b/src/ViewModels/Repository.cs index 5b299b3e..2701a4fb 100644 --- a/src/ViewModels/Repository.cs +++ b/src/ViewModels/Repository.cs @@ -636,9 +636,13 @@ namespace SourceGit.ViewModels page.Popup = popup; } - public void ShowAndStartPopup(Popup popup) + public async Task ShowAndStartPopupAsync(Popup popup) { - GetOwnerPage()?.StartPopup(popup); + var page = GetOwnerPage(); + page.Popup = popup; + + if (popup.CanStartDirectly()) + await page.ProcessPopupAsync(); } public bool IsGitFlowEnabled() @@ -802,7 +806,7 @@ namespace SourceGit.ViewModels }); } - public void Fetch(bool autoStart) + public async Task FetchAsync(bool autoStart) { if (!CanCreatePopup()) return; @@ -814,12 +818,12 @@ namespace SourceGit.ViewModels } if (autoStart) - ShowAndStartPopup(new Fetch(this)); + await ShowAndStartPopupAsync(new Fetch(this)); else ShowPopup(new Fetch(this)); } - public void Pull(bool autoStart) + public async Task PullAsync(bool autoStart) { if (IsBare || !CanCreatePopup()) return; @@ -838,12 +842,12 @@ namespace SourceGit.ViewModels var pull = new Pull(this, null); if (autoStart && pull.SelectedBranch != null) - ShowAndStartPopup(pull); + await ShowAndStartPopupAsync(pull); else ShowPopup(pull); } - public void Push(bool autoStart) + public async Task PushAsync(bool autoStart) { if (!CanCreatePopup()) return; @@ -861,7 +865,7 @@ namespace SourceGit.ViewModels } if (autoStart) - ShowAndStartPopup(new Push(this, null)); + await ShowAndStartPopupAsync(new Push(this, null)); else ShowPopup(new Push(this, null)); } @@ -872,7 +876,7 @@ namespace SourceGit.ViewModels ShowPopup(new Apply(this)); } - public void ExecCustomAction(Models.CustomAction action, object scope) + public async Task ExecCustomActionAsync(Models.CustomAction action, object scope) { if (!CanCreatePopup()) return; @@ -886,15 +890,15 @@ namespace SourceGit.ViewModels }; if (action.Controls.Count == 0) - ShowAndStartPopup(popup); + await ShowAndStartPopupAsync(popup); else ShowPopup(popup); } - public void Cleanup() + public async Task CleanupAsync() { if (CanCreatePopup()) - ShowAndStartPopup(new Cleanup(this)); + await ShowAndStartPopupAsync(new Cleanup(this)); } public void ClearFilter() @@ -1126,9 +1130,9 @@ namespace SourceGit.ViewModels RefreshHistoriesFilters(refresh); } - public void StashAll(bool autoStart) + public async Task StashAllAsync(bool autoStart) { - _workingCopy?.StashAll(autoStart); + await _workingCopy?.StashAllAsync(autoStart); } public async Task SkipMergeAsync() @@ -1441,7 +1445,7 @@ namespace SourceGit.ViewModels ShowPopup(new CreateBranch(this, _currentBranch)); } - public void CheckoutBranch(Models.Branch branch) + public async Task CheckoutBranchAsync(Models.Branch branch) { if (branch.IsLocal) { @@ -1464,7 +1468,7 @@ namespace SourceGit.ViewModels if (_localChangesCount > 0 || _submodules.Count > 0) ShowPopup(new Checkout(this, branch.Name)); else - ShowAndStartPopup(new Checkout(this, branch.Name)); + await ShowAndStartPopupAsync(new Checkout(this, branch.Name)); } else { @@ -1477,7 +1481,7 @@ namespace SourceGit.ViewModels if (b.TrackStatus.Behind.Count > 0) ShowPopup(new CheckoutAndFastForward(this, b, branch)); else if (!b.IsCurrent) - CheckoutBranch(b); + await CheckoutBranchAsync(b); return; } @@ -1491,7 +1495,7 @@ namespace SourceGit.ViewModels { var c = await new Commands.QuerySingleCommit(_fullpath, tag.SHA).GetResultAsync(); if (c != null) - _histories?.CheckoutBranchByCommit(c); + await _histories?.CheckoutBranchByCommitAsync(c); } public async Task CompareBranchWithWorktree(Models.Branch branch) @@ -1593,10 +1597,10 @@ namespace SourceGit.ViewModels ShowPopup(new AddWorktree(this)); } - public void PruneWorktrees() + public async Task PruneWorktreesAsync() { if (CanCreatePopup()) - ShowAndStartPopup(new PruneWorktrees(this)); + await ShowAndStartPopupAsync(new PruneWorktrees(this)); } public void OpenWorktree(Models.Worktree worktree) diff --git a/src/ViewModels/WorkingCopy.cs b/src/ViewModels/WorkingCopy.cs index 4ff82332..bae1f2e3 100644 --- a/src/ViewModels/WorkingCopy.cs +++ b/src/ViewModels/WorkingCopy.cs @@ -330,13 +330,13 @@ namespace SourceGit.ViewModels Native.OS.OpenWithDefaultEditor(absPath); } - public void StashAll(bool autoStart) + public async Task StashAllAsync(bool autoStart) { if (!_repo.CanCreatePopup()) return; if (autoStart) - _repo.ShowAndStartPopup(new StashChanges(_repo, _cached, false)); + await _repo.ShowAndStartPopupAsync(new StashChanges(_repo, _cached, false)); else _repo.ShowPopup(new StashChanges(_repo, _cached, false)); } @@ -679,7 +679,7 @@ namespace SourceGit.ViewModels } if (_repo.CanCreatePopup()) - _repo.ShowAndStartPopup(new Push(_repo, pushBranch)); + await _repo.ShowAndStartPopupAsync(new Push(_repo, pushBranch)); } } diff --git a/src/Views/BranchTree.axaml.cs b/src/Views/BranchTree.axaml.cs index cca5defa..aca4212c 100644 --- a/src/Views/BranchTree.axaml.cs +++ b/src/Views/BranchTree.axaml.cs @@ -516,7 +516,7 @@ namespace SourceGit.Views e.Handled = true; } - private void OnDoubleTappedBranchNode(object sender, TappedEventArgs _) + private async void OnDoubleTappedBranchNode(object sender, TappedEventArgs _) { if (sender is Grid { DataContext: ViewModels.BranchTreeNode node }) { @@ -526,7 +526,7 @@ namespace SourceGit.Views return; if (DataContext is ViewModels.Repository { Settings: not null } repo) - repo.CheckoutBranch(branch); + await repo.CheckoutBranchAsync(branch); } else { @@ -606,10 +606,10 @@ namespace SourceGit.Views fastForward.Header = App.Text("BranchCM.FastForward", upstream.FriendlyName); fastForward.Icon = App.CreateMenuIcon("Icons.FastForward"); fastForward.IsEnabled = branch.TrackStatus.Ahead.Count == 0 && branch.TrackStatus.Behind.Count > 0; - fastForward.Click += (_, e) => + fastForward.Click += async (_, e) => { if (repo.CanCreatePopup()) - repo.ShowAndStartPopup(new ViewModels.Merge(repo, upstream, branch.Name, true)); + await repo.ShowAndStartPopupAsync(new ViewModels.Merge(repo, upstream, branch.Name, true)); e.Handled = true; }; @@ -638,9 +638,9 @@ namespace SourceGit.Views var checkout = new MenuItem(); checkout.Header = App.Text("BranchCM.Checkout", branch.Name); checkout.Icon = App.CreateMenuIcon("Icons.Check"); - checkout.Click += (_, e) => + checkout.Click += async (_, e) => { - repo.CheckoutBranch(branch); + await repo.CheckoutBranchAsync(branch); e.Handled = true; }; menu.Items.Add(checkout); @@ -654,10 +654,10 @@ namespace SourceGit.Views fastForward.Header = App.Text("BranchCM.FastForward", upstream.FriendlyName); fastForward.Icon = App.CreateMenuIcon("Icons.FastForward"); fastForward.IsEnabled = branch.TrackStatus.Ahead.Count == 0 && branch.TrackStatus.Behind.Count > 0; - fastForward.Click += (_, e) => + fastForward.Click += async (_, e) => { if (repo.CanCreatePopup()) - repo.ShowAndStartPopup(new ViewModels.ResetWithoutCheckout(repo, branch, upstream)); + await repo.ShowAndStartPopupAsync(new ViewModels.ResetWithoutCheckout(repo, branch, upstream)); e.Handled = true; }; menu.Items.Add(fastForward); @@ -666,10 +666,10 @@ namespace SourceGit.Views fetchInto.Header = App.Text("BranchCM.FetchInto", upstream.FriendlyName, branch.Name); fetchInto.Icon = App.CreateMenuIcon("Icons.Fetch"); fetchInto.IsEnabled = branch.TrackStatus.Ahead.Count == 0; - fetchInto.Click += (_, e) => + fetchInto.Click += async (_, e) => { if (repo.CanCreatePopup()) - repo.ShowAndStartPopup(new ViewModels.FetchInto(repo, branch, upstream)); + await repo.ShowAndStartPopupAsync(new ViewModels.FetchInto(repo, branch, upstream)); e.Handled = true; }; @@ -898,10 +898,10 @@ namespace SourceGit.Views var prune = new MenuItem(); prune.Header = App.Text("RemoteCM.Prune"); prune.Icon = App.CreateMenuIcon("Icons.Clean"); - prune.Click += (_, e) => + prune.Click += async (_, e) => { if (repo.CanCreatePopup()) - repo.ShowAndStartPopup(new ViewModels.PruneRemote(repo, remote)); + await repo.ShowAndStartPopupAsync(new ViewModels.PruneRemote(repo, remote)); e.Handled = true; }; @@ -952,9 +952,9 @@ namespace SourceGit.Views var checkout = new MenuItem(); checkout.Header = App.Text("BranchCM.Checkout", name); checkout.Icon = App.CreateMenuIcon("Icons.Check"); - checkout.Click += (_, e) => + checkout.Click += async (_, e) => { - repo.CheckoutBranch(branch); + await repo.CheckoutBranchAsync(branch); e.Handled = true; }; menu.Items.Add(checkout); @@ -1099,9 +1099,9 @@ namespace SourceGit.Views var item = new MenuItem(); item.Icon = App.CreateMenuIcon("Icons.Action"); item.Header = label; - item.Click += (_, e) => + item.Click += async (_, e) => { - repo.ExecCustomAction(dup, branch); + await repo.ExecCustomActionAsync(dup, branch); e.Handled = true; }; diff --git a/src/Views/Histories.axaml.cs b/src/Views/Histories.axaml.cs index d6967e58..6d2f48c0 100644 --- a/src/Views/Histories.axaml.cs +++ b/src/Views/Histories.axaml.cs @@ -298,7 +298,7 @@ namespace SourceGit.Views } } - private void OnCommitListDoubleTapped(object sender, TappedEventArgs e) + private async void OnCommitListDoubleTapped(object sender, TappedEventArgs e) { e.Handled = true; @@ -310,12 +310,13 @@ namespace SourceGit.Views if (e.Source is CommitRefsPresenter crp) { var decorator = crp.DecoratorAt(e.GetPosition(crp)); - if (histories.CheckoutBranchByDecorator(decorator)) + var succ = await histories.CheckoutBranchByDecoratorAsync(decorator); + if (succ) return; } if (e.Source is Control { DataContext: Models.Commit c }) - histories.CheckoutBranchByCommit(c); + await histories.CheckoutBranchByCommitAsync(c); } } @@ -811,9 +812,9 @@ namespace SourceGit.Views var item = new MenuItem(); item.Icon = App.CreateMenuIcon("Icons.Action"); item.Header = label; - item.Click += (_, e) => + item.Click += async (_, e) => { - repo.ExecCustomAction(dup, commit); + await repo.ExecCustomActionAsync(dup, commit); e.Handled = true; }; @@ -913,14 +914,14 @@ namespace SourceGit.Views fastForward.Header = App.Text("BranchCM.FastForward", upstream); fastForward.Icon = App.CreateMenuIcon("Icons.FastForward"); fastForward.IsEnabled = current.TrackStatus.Ahead.Count == 0 && current.TrackStatus.Behind.Count > 0; - fastForward.Click += (_, e) => + fastForward.Click += async (_, e) => { var b = repo.Branches.Find(x => x.FriendlyName == upstream); if (b == null) return; if (repo.CanCreatePopup()) - repo.ShowAndStartPopup(new ViewModels.Merge(repo, b, current.Name, true)); + await repo.ShowAndStartPopupAsync(new ViewModels.Merge(repo, b, current.Name, true)); e.Handled = true; }; @@ -1011,9 +1012,9 @@ namespace SourceGit.Views var checkout = new MenuItem(); checkout.Header = App.Text("BranchCM.Checkout", branch.Name); checkout.Icon = App.CreateMenuIcon("Icons.Check"); - checkout.Click += (_, e) => + checkout.Click += async (_, e) => { - repo.CheckoutBranch(branch); + await repo.CheckoutBranchAsync(branch); e.Handled = true; }; submenu.Items.Add(checkout); @@ -1103,9 +1104,9 @@ namespace SourceGit.Views var checkout = new MenuItem(); checkout.Header = App.Text("BranchCM.Checkout", name); checkout.Icon = App.CreateMenuIcon("Icons.Check"); - checkout.Click += (_, e) => + checkout.Click += async (_, e) => { - repo.CheckoutBranch(branch); + await repo.CheckoutBranchAsync(branch); e.Handled = true; }; submenu.Items.Add(checkout); diff --git a/src/Views/LauncherPage.axaml.cs b/src/Views/LauncherPage.axaml.cs index b4e127a2..8670f8c2 100644 --- a/src/Views/LauncherPage.axaml.cs +++ b/src/Views/LauncherPage.axaml.cs @@ -15,7 +15,7 @@ namespace SourceGit.Views InitializeComponent(); } - private void OnPopupSureByHotKey(object sender, RoutedEventArgs e) + private async void OnPopupSureByHotKey(object sender, RoutedEventArgs e) { var children = this.GetLogicalDescendants(); foreach (var child in children) @@ -39,13 +39,16 @@ namespace SourceGit.Views } } - OnPopupSure(sender, e); + if (DataContext is ViewModels.LauncherPage page) + await page.ProcessPopupAsync(); + + e.Handled = true; } - private void OnPopupSure(object _, RoutedEventArgs e) + private async void OnPopupSure(object _, RoutedEventArgs e) { if (DataContext is ViewModels.LauncherPage page) - page.ProcessPopup(); + await page.ProcessPopupAsync(); e.Handled = true; } diff --git a/src/Views/Repository.axaml b/src/Views/Repository.axaml index 71a1f322..07567752 100644 --- a/src/Views/Repository.axaml +++ b/src/Views/Repository.axaml @@ -379,7 +379,7 @@ Classes="icon_button" Width="14" Margin="8,0" - Command="{Binding PruneWorktrees}" + Click="OnPruneWorktrees" IsVisible="{Binding Worktrees, Converter={x:Static c:ListConverters.IsNotNullOrEmpty}}" ToolTip.Tip="{DynamicResource Text.Repository.Worktrees.Prune}"> diff --git a/src/Views/Repository.axaml.cs b/src/Views/Repository.axaml.cs index ed6901fe..94c2062b 100644 --- a/src/Views/Repository.axaml.cs +++ b/src/Views/Repository.axaml.cs @@ -643,6 +643,14 @@ namespace SourceGit.Views e.Handled = true; } + private async void OnPruneWorktrees(object sender, RoutedEventArgs e) + { + if (DataContext is ViewModels.Repository repo) + await repo.PruneWorktreesAsync(); + + e.Handled = true; + } + private async void OnSkipInProgress(object sender, RoutedEventArgs e) { if (DataContext is ViewModels.Repository repo) diff --git a/src/Views/RepositoryToolbar.axaml b/src/Views/RepositoryToolbar.axaml index 2e62e55e..844eef8d 100644 --- a/src/Views/RepositoryToolbar.axaml +++ b/src/Views/RepositoryToolbar.axaml @@ -103,7 +103,7 @@ - diff --git a/src/Views/RepositoryToolbar.axaml.cs b/src/Views/RepositoryToolbar.axaml.cs index 027e6458..d2578006 100644 --- a/src/Views/RepositoryToolbar.axaml.cs +++ b/src/Views/RepositoryToolbar.axaml.cs @@ -122,65 +122,65 @@ namespace SourceGit.Views } } - private void Fetch(object sender, TappedEventArgs e) + private async void Fetch(object sender, TappedEventArgs e) { if (DataContext is ViewModels.Repository repo) { - repo.Fetch(e.KeyModifiers is KeyModifiers.Control); + await repo.FetchAsync(e.KeyModifiers is KeyModifiers.Control); e.Handled = true; } } - private void FetchDirectlyByHotKey(object sender, RoutedEventArgs e) + private async void FetchDirectlyByHotKey(object sender, RoutedEventArgs e) { if (DataContext is ViewModels.Repository repo) { - repo.Fetch(true); + await repo.FetchAsync(true); e.Handled = true; } } - private void Pull(object sender, TappedEventArgs e) + private async void Pull(object sender, TappedEventArgs e) { if (DataContext is ViewModels.Repository repo) { - repo.Pull(e.KeyModifiers is KeyModifiers.Control); + await repo.PullAsync(e.KeyModifiers is KeyModifiers.Control); e.Handled = true; } } - private void PullDirectlyByHotKey(object sender, RoutedEventArgs e) + private async void PullDirectlyByHotKey(object sender, RoutedEventArgs e) { if (DataContext is ViewModels.Repository repo) { - repo.Pull(true); + await repo.PullAsync(true); e.Handled = true; } } - private void Push(object sender, TappedEventArgs e) + private async void Push(object sender, TappedEventArgs e) { if (DataContext is ViewModels.Repository repo) { - repo.Push(e.KeyModifiers is KeyModifiers.Control); + await repo.PushAsync(e.KeyModifiers is KeyModifiers.Control); e.Handled = true; } } - private void PushDirectlyByHotKey(object sender, RoutedEventArgs e) + private async void PushDirectlyByHotKey(object sender, RoutedEventArgs e) { if (DataContext is ViewModels.Repository repo) { - repo.Push(true); + await repo.PushAsync(true); e.Handled = true; } } - private void StashAll(object _, TappedEventArgs e) + private async void StashAll(object _, TappedEventArgs e) { if (DataContext is ViewModels.Repository repo) { - repo.StashAll(e.KeyModifiers is KeyModifiers.Control); + await repo.StashAllAsync(e.KeyModifiers is KeyModifiers.Control); e.Handled = true; } } @@ -277,12 +277,12 @@ namespace SourceGit.Views fetch.Header = App.Text("GitLFS.Fetch"); fetch.Icon = App.CreateMenuIcon("Icons.Fetch"); fetch.IsEnabled = repo.Remotes.Count > 0; - fetch.Click += (_, e) => + fetch.Click += async (_, e) => { if (repo.CanCreatePopup()) { if (repo.Remotes.Count == 1) - repo.ShowAndStartPopup(new ViewModels.LFSFetch(repo)); + await repo.ShowAndStartPopupAsync(new ViewModels.LFSFetch(repo)); else repo.ShowPopup(new ViewModels.LFSFetch(repo)); } @@ -295,12 +295,12 @@ namespace SourceGit.Views pull.Header = App.Text("GitLFS.Pull"); pull.Icon = App.CreateMenuIcon("Icons.Pull"); pull.IsEnabled = repo.Remotes.Count > 0; - pull.Click += (_, e) => + pull.Click += async (_, e) => { if (repo.CanCreatePopup()) { if (repo.Remotes.Count == 1) - repo.ShowAndStartPopup(new ViewModels.LFSPull(repo)); + await repo.ShowAndStartPopupAsync(new ViewModels.LFSPull(repo)); else repo.ShowPopup(new ViewModels.LFSPull(repo)); } @@ -313,12 +313,12 @@ namespace SourceGit.Views push.Header = App.Text("GitLFS.Push"); push.Icon = App.CreateMenuIcon("Icons.Push"); push.IsEnabled = repo.Remotes.Count > 0; - push.Click += (_, e) => + push.Click += async (_, e) => { if (repo.CanCreatePopup()) { if (repo.Remotes.Count == 1) - repo.ShowAndStartPopup(new ViewModels.LFSPush(repo)); + await repo.ShowAndStartPopupAsync(new ViewModels.LFSPush(repo)); else repo.ShowPopup(new ViewModels.LFSPush(repo)); } @@ -330,10 +330,10 @@ namespace SourceGit.Views var prune = new MenuItem(); prune.Header = App.Text("GitLFS.Prune"); prune.Icon = App.CreateMenuIcon("Icons.Clean"); - prune.Click += (_, e) => + prune.Click += async (_, e) => { if (repo.CanCreatePopup()) - repo.ShowAndStartPopup(new ViewModels.LFSPrune(repo)); + await repo.ShowAndStartPopupAsync(new ViewModels.LFSPrune(repo)); e.Handled = true; }; @@ -406,6 +406,15 @@ namespace SourceGit.Views e.Handled = true; } + private async void Cleanup(object sender, RoutedEventArgs e) + { + if (DataContext is ViewModels.Repository repo) + { + await repo.CleanupAsync(); + e.Handled = true; + } + } + private void OpenCustomActionMenu(object sender, RoutedEventArgs e) { if (DataContext is ViewModels.Repository repo && sender is Control control) @@ -422,9 +431,9 @@ namespace SourceGit.Views var item = new MenuItem(); item.Icon = App.CreateMenuIcon("Icons.Action"); item.Header = label; - item.Click += (_, e) => + item.Click += async (_, e) => { - repo.ExecCustomAction(dup, null); + await repo.ExecCustomActionAsync(dup, null); e.Handled = true; }; diff --git a/src/Views/TagsView.axaml.cs b/src/Views/TagsView.axaml.cs index a35fcfbb..94361986 100644 --- a/src/Views/TagsView.axaml.cs +++ b/src/Views/TagsView.axaml.cs @@ -280,9 +280,9 @@ namespace SourceGit.Views var item = new MenuItem(); item.Icon = App.CreateMenuIcon("Icons.Action"); item.Header = label; - item.Click += (_, e) => + item.Click += async (_, e) => { - repo.ExecCustomAction(dup, tag); + await repo.ExecCustomActionAsync(dup, tag); e.Handled = true; };