Skip to content

Commit 99c7e38

Browse files
committed
refactor: rework Merge popup (#1973)
- Hide `Customize merge message` option when selected `Squash` or `Don't commit` mode. - Read `$GIT_DIR/SQUASH_MSG` after merging with `Squash` mode - Clear commit message after discarding all changes - Cleanup code Signed-off-by: leo <longshuang@msn.cn>
1 parent 76e3df6 commit 99c7e38

File tree

7 files changed

+46
-15
lines changed

7 files changed

+46
-15
lines changed

src/ViewModels/AIAssistant.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using System;
2-
using System.Collections.Generic;
1+
using System.Collections.Generic;
32
using System.Threading;
43
using System.Threading.Tasks;
54

@@ -23,12 +22,11 @@ public string Text
2322
private set => SetProperty(ref _text, value);
2423
}
2524

26-
public AIAssistant(Repository repo, Models.OpenAIService service, List<Models.Change> changes, Action<string> onApply)
25+
public AIAssistant(Repository repo, Models.OpenAIService service, List<Models.Change> changes)
2726
{
2827
_repo = repo;
2928
_service = service;
3029
_changes = changes;
31-
_onApply = onApply;
3230
_cancel = new CancellationTokenSource();
3331

3432
Gen();
@@ -44,7 +42,7 @@ public void Regen()
4442

4543
public void Apply()
4644
{
47-
_onApply?.Invoke(Text);
45+
_repo.SetCommitMessage(Text);
4846
}
4947

5048
public void Cancel()
@@ -72,7 +70,6 @@ private void Gen()
7270
private readonly Repository _repo = null;
7371
private Models.OpenAIService _service = null;
7472
private List<Models.Change> _changes = null;
75-
private Action<string> _onApply = null;
7673
private CancellationTokenSource _cancel = null;
7774
private bool _isGenerating = false;
7875
private string _text = string.Empty;

src/ViewModels/Discard.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,14 @@ public override async Task<bool> Sure()
7171
Use(log);
7272

7373
if (Mode is DiscardAllMode all)
74+
{
7475
await Commands.Discard.AllAsync(_repo.FullPath, all.IncludeUntracked, all.IncludeIgnored, log);
76+
_repo.ClearCommitMessage();
77+
}
7578
else
79+
{
7680
await Commands.Discard.ChangesAsync(_repo.FullPath, _changes, log);
81+
}
7782

7883
log.Complete();
7984
_repo.MarkWorkingCopyDirtyManually();

src/ViewModels/Merge.cs

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Threading.Tasks;
1+
using System.IO;
2+
using System.Threading.Tasks;
23

34
namespace SourceGit.ViewModels
45
{
@@ -16,8 +17,20 @@ public string Into
1617

1718
public Models.MergeMode Mode
1819
{
19-
get;
20-
set;
20+
get => _mode;
21+
set
22+
{
23+
if (SetProperty(ref _mode, value))
24+
CanEditMessage = _mode == Models.MergeMode.Default ||
25+
_mode == Models.MergeMode.FastForward ||
26+
_mode == Models.MergeMode.NoFastForward;
27+
}
28+
}
29+
30+
public bool CanEditMessage
31+
{
32+
get => _canEditMessage;
33+
set => SetProperty(ref _canEditMessage, value);
2134
}
2235

2336
public bool Edit
@@ -65,12 +78,19 @@ public override async Task<bool> Sure()
6578
var log = _repo.CreateLog($"Merging '{_sourceName}' into '{Into}'");
6679
Use(log);
6780

68-
var succ = await new Commands.Merge(_repo.FullPath, _sourceName, Mode.Arg, Edit)
81+
var succ = await new Commands.Merge(_repo.FullPath, _sourceName, Mode.Arg, _canEditMessage && Edit)
6982
.Use(log)
7083
.ExecAsync();
7184

7285
if (succ)
7386
{
87+
var squashMsgFile = Path.Combine(_repo.GitDir, "SQUASH_MSG");
88+
if (Mode == Models.MergeMode.Squash && File.Exists(squashMsgFile))
89+
{
90+
var msg = await File.ReadAllTextAsync(squashMsgFile);
91+
_repo.SetCommitMessage(msg);
92+
}
93+
7494
var submodules = await new Commands.QueryUpdatableSubmodules(_repo.FullPath).GetResultAsync();
7595
if (submodules.Count > 0)
7696
await new Commands.Submodule(_repo.FullPath)
@@ -113,5 +133,7 @@ private Models.MergeMode AutoSelectMergeMode()
113133

114134
private readonly Repository _repo = null;
115135
private readonly string _sourceName;
136+
private Models.MergeMode _mode = Models.MergeMode.Default;
137+
private bool _canEditMessage = true;
116138
}
117139
}

src/ViewModels/Repository.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -888,6 +888,12 @@ public void NavigateToCommit(string sha, bool isDelayMode = false)
888888
}
889889
}
890890

891+
public void SetCommitMessage(string message)
892+
{
893+
if (_workingCopy is not null)
894+
_workingCopy.CommitMessage = message;
895+
}
896+
891897
public void ClearCommitMessage()
892898
{
893899
if (_workingCopy is not null)

src/Views/CommitMessageToolBox.axaml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ private async void OnOpenOpenAIHelper(object sender, RoutedEventArgs e)
505505

506506
if (services.Count == 1)
507507
{
508-
await App.ShowDialog(new ViewModels.AIAssistant(repo, services[0], vm.Staged, t => vm.CommitMessage = t));
508+
await App.ShowDialog(new ViewModels.AIAssistant(repo, services[0], vm.Staged));
509509
return;
510510
}
511511

@@ -517,7 +517,7 @@ private async void OnOpenOpenAIHelper(object sender, RoutedEventArgs e)
517517
item.Header = service.Name;
518518
item.Click += async (_, ev) =>
519519
{
520-
await App.ShowDialog(new ViewModels.AIAssistant(repo, dup, vm.Staged, t => vm.CommitMessage = t));
520+
await App.ShowDialog(new ViewModels.AIAssistant(repo, dup, vm.Staged));
521521
ev.Handled = true;
522522
};
523523

src/Views/Merge.axaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
Text="{DynamicResource Text.Merge}"/>
2020
</StackPanel>
2121

22-
<Grid Margin="0,16,0,0" RowDefinitions="32,32,32,32" ColumnDefinitions="130,*">
22+
<Grid Margin="0,16,0,0" RowDefinitions="32,32,32,Auto" ColumnDefinitions="130,*">
2323
<TextBlock Grid.Row="0" Grid.Column="0"
2424
HorizontalAlignment="Right" VerticalAlignment="Center"
2525
Margin="0,0,8,0"
@@ -99,6 +99,7 @@
9999
Height="32"
100100
Content="{DynamicResource Text.Merge.Edit}"
101101
IsChecked="{Binding Edit, Mode=TwoWay}"
102+
IsVisible="{Binding CanEditMessage, Mode=OneWay}"
102103
ToolTip.Tip="--edit"/>
103104
</Grid>
104105
</StackPanel>

src/Views/WorkingCopy.axaml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -890,7 +890,7 @@ public ContextMenu CreateContextMenuForStagedChanges(ViewModels.WorkingCopy vm,
890890
{
891891
ai.Click += async (_, e) =>
892892
{
893-
await App.ShowDialog(new ViewModels.AIAssistant(repo, services[0], selectedStaged, t => vm.CommitMessage = t));
893+
await App.ShowDialog(new ViewModels.AIAssistant(repo, services[0], selectedStaged));
894894
e.Handled = true;
895895
};
896896
}
@@ -904,7 +904,7 @@ public ContextMenu CreateContextMenuForStagedChanges(ViewModels.WorkingCopy vm,
904904
item.Header = service.Name;
905905
item.Click += async (_, e) =>
906906
{
907-
await App.ShowDialog(new ViewModels.AIAssistant(repo, dup, selectedStaged, t => vm.CommitMessage = t));
907+
await App.ShowDialog(new ViewModels.AIAssistant(repo, dup, selectedStaged));
908908
e.Handled = true;
909909
};
910910

0 commit comments

Comments
 (0)