Skip to content

Commit 9d2f8b1

Browse files
committed
fix: Conventional Commit Helper not working in Interactive Rebase (#1446)
Signed-off-by: leo <[email protected]>
1 parent f59b34f commit 9d2f8b1

7 files changed

+97
-64
lines changed

src/App.axaml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -531,8 +531,8 @@ private bool TryLaunchAsCoreEditor(IClassicDesktopStyleApplicationLifetime deskt
531531
return true;
532532
}
533533

534-
var editor = new Views.StandaloneCommitMessageEditor();
535-
editor.SetFile(file);
534+
var editor = new Views.CommitMessageEditor();
535+
editor.AsStandalone(file);
536536
desktop.MainWindow = editor;
537537
return true;
538538
}

src/Views/StandaloneCommitMessageEditor.axaml renamed to src/Views/CommitMessageEditor.axaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
55
xmlns:v="using:SourceGit.Views"
66
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
7-
x:Class="SourceGit.Views.StandaloneCommitMessageEditor"
7+
x:Class="SourceGit.Views.CommitMessageEditor"
88
x:Name="ThisControl"
99
Icon="/App.ico"
1010
Title="{DynamicResource Text.CodeEditor}"
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
using System;
2+
using System.IO;
3+
4+
using Avalonia.Interactivity;
5+
6+
namespace SourceGit.Views
7+
{
8+
public partial class CommitMessageEditor : ChromelessWindow
9+
{
10+
public CommitMessageEditor()
11+
{
12+
InitializeComponent();
13+
}
14+
15+
public void AsStandalone(string file)
16+
{
17+
_onSave = msg => File.WriteAllText(file, msg);
18+
_shouldExitApp = true;
19+
20+
var content = File.ReadAllText(file).ReplaceLineEndings("\n").Trim();
21+
var firstLineEnd = content.IndexOf('\n', StringComparison.Ordinal);
22+
if (firstLineEnd == -1)
23+
{
24+
Editor.SubjectEditor.Text = content;
25+
}
26+
else
27+
{
28+
Editor.SubjectEditor.Text = content.Substring(0, firstLineEnd);
29+
Editor.DescriptionEditor.Text = content.Substring(firstLineEnd + 1).Trim();
30+
}
31+
}
32+
33+
public void AsBuiltin(string msg, Action<string> onSave)
34+
{
35+
_onSave = onSave;
36+
_shouldExitApp = false;
37+
38+
var firstLineEnd = msg.IndexOf('\n', StringComparison.Ordinal);
39+
if (firstLineEnd == -1)
40+
{
41+
Editor.SubjectEditor.Text = msg;
42+
}
43+
else
44+
{
45+
Editor.SubjectEditor.Text = msg.Substring(0, firstLineEnd);
46+
Editor.DescriptionEditor.Text = msg.Substring(firstLineEnd + 1).Trim();
47+
}
48+
}
49+
50+
protected override void OnClosed(EventArgs e)
51+
{
52+
base.OnClosed(e);
53+
54+
if (_shouldExitApp)
55+
App.Quit(_exitCode);
56+
}
57+
58+
private void SaveAndClose(object _1, RoutedEventArgs _2)
59+
{
60+
_onSave?.Invoke(Editor.Text);
61+
_exitCode = 0;
62+
Close();
63+
}
64+
65+
private Action<string> _onSave = null;
66+
private bool _shouldExitApp = true;
67+
private int _exitCode = -1;
68+
}
69+
}

src/Views/CommitMessageTextBox.axaml.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,14 @@ private void OnOpenOpenAIHelper(object sender, RoutedEventArgs e)
201201

202202
private void OnOpenConventionalCommitHelper(object _, RoutedEventArgs e)
203203
{
204-
App.ShowWindow(new ViewModels.ConventionalCommitMessageBuilder(text => Text = text), true);
204+
var toplevel = TopLevel.GetTopLevel(this);
205+
if (toplevel is Window owner)
206+
{
207+
var vm = new ViewModels.ConventionalCommitMessageBuilder(text => Text = text);
208+
var builder = new ConventionalCommitMessageBuilder() { DataContext = vm };
209+
builder.ShowDialog(owner);
210+
}
211+
205212
e.Handled = true;
206213
}
207214

src/Views/InteractiveRebase.axaml

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -189,14 +189,11 @@
189189

190190
<!-- Subject -->
191191
<Grid Grid.Column="2" ColumnDefinitions="Auto,*" ClipToBounds="True">
192-
<Button Grid.Column="0" Classes="icon_button" Margin="0,0,8,0" IsVisible="{Binding Action, Converter={x:Static c:InteractiveRebaseActionConverters.CanEditMessage}}">
193-
<Button.Flyout>
194-
<Flyout Placement="BottomEdgeAlignedLeft">
195-
<Panel Width="600" Height="120">
196-
<v:CommitMessageTextBox Text="{Binding FullMessage, Mode=TwoWay}"/>
197-
</Panel>
198-
</Flyout>
199-
</Button.Flyout>
192+
<Button Grid.Column="0"
193+
Classes="icon_button"
194+
Margin="0,0,8,0"
195+
IsVisible="{Binding Action, Converter={x:Static c:InteractiveRebaseActionConverters.CanEditMessage}}"
196+
Click="OnOpenCommitMessageEditor">
200197
<Path Width="14" Height="14" Margin="0,4,0,0" Data="{StaticResource Icons.Edit}"/>
201198
</Button>
202199
<TextBlock Grid.Column="1" Classes="primary" Margin="0,0,4,0" Text="{Binding Subject}"/>

src/Views/InteractiveRebase.axaml.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,18 @@ sender is Control
167167
e.Handled = true;
168168
}
169169

170+
private void OnOpenCommitMessageEditor(object sender, RoutedEventArgs e)
171+
{
172+
if (sender is Button { DataContext: ViewModels.InteractiveRebaseItem item })
173+
{
174+
var dialog = new CommitMessageEditor();
175+
dialog.AsBuiltin(item.FullMessage, msg => item.FullMessage = msg);
176+
dialog.ShowDialog(this);
177+
}
178+
179+
e.Handled = true;
180+
}
181+
170182
private async void OnStartJobs(object _1, RoutedEventArgs _2)
171183
{
172184
var vm = DataContext as ViewModels.InteractiveRebase;

src/Views/StandaloneCommitMessageEditor.axaml.cs

Lines changed: 0 additions & 52 deletions
This file was deleted.

0 commit comments

Comments
 (0)