|
12 | 12 |
|
13 | 13 | namespace SourceGit.ViewModels
|
14 | 14 | {
|
15 |
| - public class ConflictContext |
| 15 | + public class ConflictContext : ObservableObject |
16 | 16 | {
|
17 |
| - public Models.Change Change { get; set; } |
| 17 | + public bool IsResolved |
| 18 | + { |
| 19 | + get => _isResolved; |
| 20 | + set => SetProperty(ref _isResolved, value); |
| 21 | + } |
| 22 | + |
| 23 | + public ConflictContext(string repo, Models.Change change) |
| 24 | + { |
| 25 | + Task.Run(() => |
| 26 | + { |
| 27 | + var result = new Commands.IsConflictResolved(repo, change).Result(); |
| 28 | + Dispatcher.UIThread.Post(() => |
| 29 | + { |
| 30 | + IsResolved = result; |
| 31 | + }); |
| 32 | + }); |
| 33 | + } |
| 34 | + |
| 35 | + private bool _isResolved = false; |
18 | 36 | }
|
19 | 37 |
|
20 | 38 | public class WorkingCopy : ObservableObject
|
@@ -296,9 +314,9 @@ public void SetDetail(Models.Change change, bool isUnstaged)
|
296 | 314 | {
|
297 | 315 | DetailContext = null;
|
298 | 316 | }
|
299 |
| - else if (change.IsConflit) |
| 317 | + else if (change.IsConflit && isUnstaged) |
300 | 318 | {
|
301 |
| - DetailContext = new ConflictContext() { Change = change }; |
| 319 | + DetailContext = new ConflictContext(_repo.FullPath, change); |
302 | 320 | }
|
303 | 321 | else
|
304 | 322 | {
|
@@ -432,26 +450,23 @@ public async void UseMine(List<Models.Change> changes)
|
432 | 450 | _repo.SetWatcherEnabled(true);
|
433 | 451 | }
|
434 | 452 |
|
435 |
| - public async void UseExternalMergeTool() |
| 453 | + public async void UseExternalMergeTool(Models.Change change) |
436 | 454 | {
|
437 |
| - if (_detailContext is ConflictContext ctx) |
438 |
| - { |
439 |
| - var type = Preference.Instance.ExternalMergeToolType; |
440 |
| - var exec = Preference.Instance.ExternalMergeToolPath; |
| 455 | + var type = Preference.Instance.ExternalMergeToolType; |
| 456 | + var exec = Preference.Instance.ExternalMergeToolPath; |
441 | 457 |
|
442 |
| - var tool = Models.ExternalMerger.Supported.Find(x => x.Type == type); |
443 |
| - if (tool == null) |
444 |
| - { |
445 |
| - App.RaiseException(_repo.FullPath, "Invalid merge tool in preference setting!"); |
446 |
| - return; |
447 |
| - } |
| 458 | + var tool = Models.ExternalMerger.Supported.Find(x => x.Type == type); |
| 459 | + if (tool == null) |
| 460 | + { |
| 461 | + App.RaiseException(_repo.FullPath, "Invalid merge tool in preference setting!"); |
| 462 | + return; |
| 463 | + } |
448 | 464 |
|
449 |
| - var args = tool.Type != 0 ? tool.Cmd : Preference.Instance.ExternalMergeToolCmd; |
| 465 | + var args = tool.Type != 0 ? tool.Cmd : Preference.Instance.ExternalMergeToolCmd; |
450 | 466 |
|
451 |
| - _repo.SetWatcherEnabled(false); |
452 |
| - await Task.Run(() => Commands.MergeTool.OpenForMerge(_repo.FullPath, exec, args, ctx.Change.Path)); |
453 |
| - _repo.SetWatcherEnabled(true); |
454 |
| - } |
| 467 | + _repo.SetWatcherEnabled(false); |
| 468 | + await Task.Run(() => Commands.MergeTool.OpenForMerge(_repo.FullPath, exec, args, change.Path)); |
| 469 | + _repo.SetWatcherEnabled(true); |
455 | 470 | }
|
456 | 471 |
|
457 | 472 | public async void DoCommit(bool autoPush)
|
@@ -554,7 +569,7 @@ public ContextMenu CreateContextMenuForUnstagedChanges(List<Models.Change> chang
|
554 | 569 | openMerger.Header = App.Text("FileCM.OpenWithExternalMerger");
|
555 | 570 | openMerger.Click += (_, e) =>
|
556 | 571 | {
|
557 |
| - UseExternalMergeTool(); |
| 572 | + UseExternalMergeTool(change); |
558 | 573 | e.Handled = true;
|
559 | 574 | };
|
560 | 575 |
|
|
0 commit comments