code_review: PR #1525

- `OpenForDiffAsync` should not use `await` (we do not need to wait it ends)
- Modify `Checkout`, `CheckoutCommit` and `CreateBranch`

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo
2025-07-05 16:22:52 +08:00
parent 3583527026
commit eb45380b8d
8 changed files with 35 additions and 51 deletions

View File

@@ -125,13 +125,13 @@ namespace SourceGit.ViewModels
var diffWithMerger = new MenuItem();
diffWithMerger.Header = App.Text("DiffWithMerger");
diffWithMerger.Icon = App.CreateMenuIcon("Icons.OpenWith");
diffWithMerger.Click += async (_, ev) =>
diffWithMerger.Click += (sender, ev) =>
{
var toolType = Preferences.Instance.ExternalMergeToolType;
var toolPath = Preferences.Instance.ExternalMergeToolPath;
var opt = new Models.DiffOption(_based.Head, _to.Head, change);
await Commands.MergeTool.OpenForDiffAsync(_repo, toolType, toolPath, opt);
_ = Commands.MergeTool.OpenForDiffAsync(_repo, toolType, toolPath, opt);
ev.Handled = true;
};
menu.Items.Add(diffWithMerger);

View File

@@ -58,14 +58,8 @@ namespace SourceGit.ViewModels
var succ = false;
var needPopStash = false;
if (DiscardLocalChanges)
{
succ = await new Commands.Checkout(_repo.FullPath)
.Use(log)
.BranchAsync(Branch, true);
}
else
if (!DiscardLocalChanges)
{
var changes = await new Commands.CountLocalChangesWithoutUntracked(_repo.FullPath).GetResultAsync();
if (changes > 0)
@@ -82,11 +76,11 @@ namespace SourceGit.ViewModels
needPopStash = true;
}
succ = await new Commands.Checkout(_repo.FullPath)
.Use(log)
.BranchAsync(Branch, false);
}
succ = await new Commands.Checkout(_repo.FullPath)
.Use(log)
.BranchAsync(Branch, DiscardLocalChanges);
if (succ)
{

View File

@@ -92,7 +92,6 @@ namespace SourceGit.ViewModels
if (IsRecurseSubmoduleVisible && RecurseSubmodules)
{
var submodules = await new Commands.QueryUpdatableSubmodules(_repo.FullPath).GetResultAsync();
if (submodules.Count > 0)
await new Commands.Submodule(_repo.FullPath)
.Use(log)

View File

@@ -41,10 +41,6 @@ namespace SourceGit.ViewModels
var log = _repo.CreateLog("Checkout Commit");
Use(log);
var updateSubmodules = IsRecurseSubmoduleVisible && RecurseSubmodules;
bool succ;
var needPop = false;
if (_repo.CurrentBranch is { IsDetachedHead: true })
{
var refs = await new Commands.QueryRefsContainsCommit(_repo.FullPath, _repo.CurrentBranch.Head).GetResultAsync();
@@ -59,14 +55,11 @@ namespace SourceGit.ViewModels
}
}
}
var succ = false;
var needPop = false;
if (DiscardLocalChanges)
{
succ = await new Commands.Checkout(_repo.FullPath)
.Use(log)
.CommitAsync(Commit.SHA, true);
}
else
if (!DiscardLocalChanges)
{
var changes = await new Commands.CountLocalChangesWithoutUntracked(_repo.FullPath).GetResultAsync();
if (changes > 0)
@@ -83,15 +76,15 @@ namespace SourceGit.ViewModels
needPop = true;
}
succ = await new Commands.Checkout(_repo.FullPath)
.Use(log)
.CommitAsync(Commit.SHA, false);
}
succ = await new Commands.Checkout(_repo.FullPath)
.Use(log)
.CommitAsync(Commit.SHA, DiscardLocalChanges);
if (succ)
{
if (updateSubmodules)
if (IsRecurseSubmoduleVisible && RecurseSubmodules)
{
var submodules = await new Commands.QueryUpdatableSubmodules(_repo.FullPath).GetResultAsync();
if (submodules.Count > 0)

View File

@@ -325,13 +325,13 @@ namespace SourceGit.ViewModels
var diffWithMerger = new MenuItem();
diffWithMerger.Header = App.Text("DiffWithMerger");
diffWithMerger.Icon = App.CreateMenuIcon("Icons.OpenWith");
diffWithMerger.Click += async (_, ev) =>
diffWithMerger.Click += (sender, ev) =>
{
var toolType = Preferences.Instance.ExternalMergeToolType;
var toolPath = Preferences.Instance.ExternalMergeToolPath;
var opt = new Models.DiffOption(_commit, change);
await Commands.MergeTool.OpenForDiffAsync(_repo.FullPath, toolType, toolPath, opt);
_ = Commands.MergeTool.OpenForDiffAsync(_repo.FullPath, toolType, toolPath, opt);
ev.Handled = true;
};

View File

@@ -123,9 +123,6 @@ namespace SourceGit.ViewModels
var log = _repo.CreateLog($"Create Branch '{fixedName}'");
Use(log);
var updateSubmodules = IsRecurseSubmoduleVisible && RecurseSubmodules;
bool succ;
if (CheckoutAfterCreated)
{
if (_repo.CurrentBranch is { IsDetachedHead: true } && !_repo.CurrentBranch.Head.Equals(_baseOnRevision, StringComparison.Ordinal))
@@ -143,17 +140,12 @@ namespace SourceGit.ViewModels
}
}
}
bool succ;
if (CheckoutAfterCreated && !_repo.IsBare)
{
var needPopStash = false;
if (DiscardLocalChanges)
{
succ = await new Commands.Checkout(_repo.FullPath)
.Use(log)
.BranchAsync(fixedName, _baseOnRevision, true, _allowOverwrite);
}
else
if (!DiscardLocalChanges)
{
var changes = await new Commands.CountLocalChangesWithoutUntracked(_repo.FullPath).GetResultAsync();
if (changes > 0)
@@ -170,15 +162,15 @@ namespace SourceGit.ViewModels
needPopStash = true;
}
succ = await new Commands.Checkout(_repo.FullPath)
.Use(log)
.BranchAsync(fixedName, _baseOnRevision, false, _allowOverwrite);
}
succ = await new Commands.Checkout(_repo.FullPath)
.Use(log)
.BranchAsync(fixedName, _baseOnRevision, DiscardLocalChanges, _allowOverwrite);
if (succ)
{
if (updateSubmodules)
if (IsRecurseSubmoduleVisible && RecurseSubmodules)
{
var submodules = await new Commands.QueryUpdatableSubmodules(_repo.FullPath).GetResultAsync();
if (submodules.Count > 0)

View File

@@ -599,7 +599,11 @@ namespace SourceGit.ViewModels
var parents = new List<Models.Commit>();
foreach (var sha in commit.Parents)
{
var parent = _commits.Find(x => x.SHA == sha) ?? await new Commands.QuerySingleCommit(_repo.FullPath, sha).GetResultAsync();
var parent = _commits.Find(x => x.SHA == sha);
if (parent == null)
parent = await new Commands.QuerySingleCommit(_repo.FullPath, sha)
.GetResultAsync();
if (parent != null)
parents.Add(parent);
}