diff --git a/src/Commands/IsConflictResolved.cs b/src/Commands/IsConflictResolved.cs new file mode 100644 index 00000000..49bc56fa --- /dev/null +++ b/src/Commands/IsConflictResolved.cs @@ -0,0 +1,20 @@ +namespace SourceGit.Commands +{ + public class IsConflictResolved : Command + { + public IsConflictResolved(string repo, Models.Change change) + { + var opt = new Models.DiffOption(change, true); + + WorkingDirectory = repo; + Context = repo; + Args = $"diff -a --ignore-cr-at-eol --check {opt}"; + } + + public bool Result() + { + var rs = ReadToEnd(); + return rs.IsSuccess; + } + } +} diff --git a/src/Resources/Locales/en_US.axaml b/src/Resources/Locales/en_US.axaml index fc2260a8..fed4f46b 100644 --- a/src/Resources/Locales/en_US.axaml +++ b/src/Resources/Locales/en_US.axaml @@ -427,11 +427,13 @@ Sort Changes Amend + You can stage this file now. COMMIT COMMIT & PUSH Enter commit message CTRL + Enter CONFLICTS DETECTED + FILE CONFLICTS ARE RESOLVED RECENT INPUT MESSAGES INCLUDE UNTRACKED FILES MESSAGE HISTORIES diff --git a/src/Resources/Locales/zh_CN.axaml b/src/Resources/Locales/zh_CN.axaml index ae5a624f..c2500d54 100644 --- a/src/Resources/Locales/zh_CN.axaml +++ b/src/Resources/Locales/zh_CN.axaml @@ -427,11 +427,13 @@ 排序 本地更改 修补(--amend) + 现在您已可将其加入暂存区中 提交 提交并推送 填写提交信息 CTRL + Enter 检测到冲突 + 文件冲突已解决 最近输入的提交信息 显示未跟踪文件 历史提交信息 diff --git a/src/ViewModels/WorkingCopy.cs b/src/ViewModels/WorkingCopy.cs index 24e733a0..76c3be50 100644 --- a/src/ViewModels/WorkingCopy.cs +++ b/src/ViewModels/WorkingCopy.cs @@ -12,9 +12,27 @@ using CommunityToolkit.Mvvm.ComponentModel; namespace SourceGit.ViewModels { - public class ConflictContext + public class ConflictContext : ObservableObject { - public Models.Change Change { get; set; } + public bool IsResolved + { + get => _isResolved; + set => SetProperty(ref _isResolved, value); + } + + public ConflictContext(string repo, Models.Change change) + { + Task.Run(() => + { + var result = new Commands.IsConflictResolved(repo, change).Result(); + Dispatcher.UIThread.Post(() => + { + IsResolved = result; + }); + }); + } + + private bool _isResolved = false; } public class WorkingCopy : ObservableObject @@ -296,9 +314,9 @@ namespace SourceGit.ViewModels { DetailContext = null; } - else if (change.IsConflit) + else if (change.IsConflit && isUnstaged) { - DetailContext = new ConflictContext() { Change = change }; + DetailContext = new ConflictContext(_repo.FullPath, change); } else { @@ -432,26 +450,23 @@ namespace SourceGit.ViewModels _repo.SetWatcherEnabled(true); } - public async void UseExternalMergeTool() + public async void UseExternalMergeTool(Models.Change change) { - if (_detailContext is ConflictContext ctx) + var type = Preference.Instance.ExternalMergeToolType; + var exec = Preference.Instance.ExternalMergeToolPath; + + var tool = Models.ExternalMerger.Supported.Find(x => x.Type == type); + if (tool == null) { - var type = Preference.Instance.ExternalMergeToolType; - var exec = Preference.Instance.ExternalMergeToolPath; - - var tool = Models.ExternalMerger.Supported.Find(x => x.Type == type); - if (tool == null) - { - App.RaiseException(_repo.FullPath, "Invalid merge tool in preference setting!"); - return; - } - - var args = tool.Type != 0 ? tool.Cmd : Preference.Instance.ExternalMergeToolCmd; - - _repo.SetWatcherEnabled(false); - await Task.Run(() => Commands.MergeTool.OpenForMerge(_repo.FullPath, exec, args, ctx.Change.Path)); - _repo.SetWatcherEnabled(true); + App.RaiseException(_repo.FullPath, "Invalid merge tool in preference setting!"); + return; } + + var args = tool.Type != 0 ? tool.Cmd : Preference.Instance.ExternalMergeToolCmd; + + _repo.SetWatcherEnabled(false); + await Task.Run(() => Commands.MergeTool.OpenForMerge(_repo.FullPath, exec, args, change.Path)); + _repo.SetWatcherEnabled(true); } public async void DoCommit(bool autoPush) @@ -554,7 +569,7 @@ namespace SourceGit.ViewModels openMerger.Header = App.Text("FileCM.OpenWithExternalMerger"); openMerger.Click += (_, e) => { - UseExternalMergeTool(); + UseExternalMergeTool(change); e.Handled = true; }; diff --git a/src/Views/WorkingCopy.axaml b/src/Views/WorkingCopy.axaml index 3e52ffc3..57931284 100644 --- a/src/Views/WorkingCopy.axaml +++ b/src/Views/WorkingCopy.axaml @@ -319,11 +319,19 @@ - - - - - + + + + + + + + + + + + +