mirror of
https://fastgit.cc/github.com/sourcegit-scm/sourcegit
synced 2026-04-30 13:51:53 +08:00
enhance: manually update local branch tree after renaming a local branch (#2169)
Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
@@ -60,17 +60,9 @@ namespace SourceGit.ViewModels
|
||||
.RenameAsync(_name);
|
||||
|
||||
if (succ)
|
||||
_repo.UIStates.RenameBranchFilter(Target.FullName, _name);
|
||||
_repo.FastRefreshBranchesAfterRenaming(Target, _name);
|
||||
|
||||
log.Complete();
|
||||
_repo.MarkBranchesDirtyManually();
|
||||
|
||||
if (isCurrent)
|
||||
{
|
||||
ProgressDescription = "Waiting for branch updated...";
|
||||
await Task.Delay(400);
|
||||
}
|
||||
|
||||
return succ;
|
||||
}
|
||||
|
||||
|
||||
@@ -824,6 +824,30 @@ namespace SourceGit.ViewModels
|
||||
RefreshWorktrees();
|
||||
}
|
||||
|
||||
public void FastRefreshBranchesAfterRenaming(Models.Branch b, string newName)
|
||||
{
|
||||
_watcher?.MarkBranchUpdated();
|
||||
|
||||
var newFullName = $"refs/heads/{newName}";
|
||||
_uiStates.RenameBranchFilter(b.FullName, newFullName);
|
||||
|
||||
b.Name = newName;
|
||||
b.FullName = newFullName;
|
||||
|
||||
List<Models.Branch> locals = [];
|
||||
foreach (var branch in _branches)
|
||||
{
|
||||
if (branch.IsLocal)
|
||||
locals.Add(branch);
|
||||
}
|
||||
|
||||
var builder = BuildBranchTree(locals, []);
|
||||
LocalBranchTrees = builder.Locals;
|
||||
|
||||
RefreshCommits();
|
||||
RefreshWorktrees();
|
||||
}
|
||||
|
||||
public void MarkBranchesDirtyManually()
|
||||
{
|
||||
_watcher?.MarkBranchUpdated();
|
||||
|
||||
@@ -887,37 +887,45 @@ namespace SourceGit.Views
|
||||
}
|
||||
}
|
||||
|
||||
var rename = new MenuItem();
|
||||
rename.Header = App.Text("BranchCM.Rename", branch.Name);
|
||||
rename.Icon = App.CreateMenuIcon("Icons.Rename");
|
||||
rename.Click += (_, e) =>
|
||||
if (!branch.IsDetachedHead)
|
||||
{
|
||||
if (repo.CanCreatePopup())
|
||||
repo.ShowPopup(new ViewModels.RenameBranch(repo, branch));
|
||||
e.Handled = true;
|
||||
};
|
||||
var editDescription = new MenuItem();
|
||||
editDescription.Header = App.Text("BranchCM.EditDescription", branch.Name);
|
||||
editDescription.Icon = App.CreateMenuIcon("Icons.Edit");
|
||||
editDescription.Click += async (_, e) =>
|
||||
{
|
||||
var desc = await new Commands.Config(repo.FullPath).GetAsync($"branch.{branch.Name}.description");
|
||||
if (repo.CanCreatePopup())
|
||||
repo.ShowPopup(new ViewModels.EditBranchDescription(repo, branch, desc));
|
||||
e.Handled = true;
|
||||
};
|
||||
|
||||
var editDescription = new MenuItem();
|
||||
editDescription.Header = App.Text("BranchCM.EditDescription", branch.Name);
|
||||
editDescription.Icon = App.CreateMenuIcon("Icons.Edit");
|
||||
editDescription.Click += async (_, e) =>
|
||||
{
|
||||
var desc = await new Commands.Config(repo.FullPath).GetAsync($"branch.{branch.Name}.description");
|
||||
if (repo.CanCreatePopup())
|
||||
repo.ShowPopup(new ViewModels.EditBranchDescription(repo, branch, desc));
|
||||
e.Handled = true;
|
||||
};
|
||||
var rename = new MenuItem();
|
||||
rename.Header = App.Text("BranchCM.Rename", branch.Name);
|
||||
rename.Icon = App.CreateMenuIcon("Icons.Rename");
|
||||
rename.Click += (_, e) =>
|
||||
{
|
||||
if (repo.CanCreatePopup())
|
||||
repo.ShowPopup(new ViewModels.RenameBranch(repo, branch));
|
||||
e.Handled = true;
|
||||
};
|
||||
|
||||
var delete = new MenuItem();
|
||||
delete.Header = App.Text("BranchCM.Delete", branch.Name);
|
||||
delete.Icon = App.CreateMenuIcon("Icons.Clear");
|
||||
delete.IsEnabled = !branch.IsCurrent;
|
||||
delete.Click += (_, e) =>
|
||||
{
|
||||
if (repo.CanCreatePopup())
|
||||
repo.ShowPopup(new ViewModels.DeleteBranch(repo, branch));
|
||||
e.Handled = true;
|
||||
};
|
||||
var delete = new MenuItem();
|
||||
delete.Header = App.Text("BranchCM.Delete", branch.Name);
|
||||
delete.Icon = App.CreateMenuIcon("Icons.Clear");
|
||||
delete.IsEnabled = !branch.IsCurrent;
|
||||
delete.Click += (_, e) =>
|
||||
{
|
||||
if (repo.CanCreatePopup())
|
||||
repo.ShowPopup(new ViewModels.DeleteBranch(repo, branch));
|
||||
e.Handled = true;
|
||||
};
|
||||
|
||||
menu.Items.Add(new MenuItem() { Header = "-" });
|
||||
menu.Items.Add(editDescription);
|
||||
menu.Items.Add(rename);
|
||||
menu.Items.Add(delete);
|
||||
}
|
||||
|
||||
var createBranch = new MenuItem();
|
||||
createBranch.Icon = App.CreateMenuIcon("Icons.Branch.Add");
|
||||
@@ -939,10 +947,6 @@ namespace SourceGit.Views
|
||||
e.Handled = true;
|
||||
};
|
||||
|
||||
menu.Items.Add(new MenuItem() { Header = "-" });
|
||||
menu.Items.Add(editDescription);
|
||||
menu.Items.Add(rename);
|
||||
menu.Items.Add(delete);
|
||||
menu.Items.Add(new MenuItem() { Header = "-" });
|
||||
menu.Items.Add(createBranch);
|
||||
menu.Items.Add(createTag);
|
||||
|
||||
Reference in New Issue
Block a user