Skip to content

Commit b5f0bbc

Browse files
committed
feature: add children list to the commit base info view
Useful for navigation between the commits.
1 parent b7abf2e commit b5f0bbc

File tree

7 files changed

+104
-5
lines changed

7 files changed

+104
-5
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using System;
2+
using System.Collections.Generic;
3+
4+
namespace SourceGit.Commands
5+
{
6+
public class QueryCommitChildren : Command
7+
{
8+
public QueryCommitChildren(string repo, string commit)
9+
{
10+
WorkingDirectory = repo;
11+
Context = repo;
12+
_commit = commit;
13+
Args = $"rev-list --parents --all ^{commit}";
14+
}
15+
16+
public IEnumerable<string> Result()
17+
{
18+
var rs = ReadToEnd();
19+
if (!rs.IsSuccess)
20+
yield break;
21+
22+
foreach (string s in rs.StdOut.Split('\n', StringSplitOptions.None))
23+
{
24+
if (s.Contains(_commit))
25+
yield return s.Substring(0, 40);
26+
}
27+
}
28+
29+
private string _commit;
30+
}
31+
}

src/Resources/Locales/en_US.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@
125125
<x:String x:Key="Text.CommitDetail.Info" xml:space="preserve">INFORMATION</x:String>
126126
<x:String x:Key="Text.CommitDetail.Info.Author" xml:space="preserve">AUTHOR</x:String>
127127
<x:String x:Key="Text.CommitDetail.Info.Changed" xml:space="preserve">CHANGED</x:String>
128+
<x:String x:Key="Text.CommitDetail.Info.Children" xml:space="preserve">CHILDREN</x:String>
128129
<x:String x:Key="Text.CommitDetail.Info.Committer" xml:space="preserve">COMMITTER</x:String>
129130
<x:String x:Key="Text.CommitDetail.Info.ContainsIn" xml:space="preserve">Check refs that contains this commit</x:String>
130131
<x:String x:Key="Text.CommitDetail.Info.ContainsIn.Title" xml:space="preserve">COMMIT IS CONTAINED BY</x:String>

src/Resources/Locales/fr_FR.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@
126126
<x:String x:Key="Text.CommitDetail.Info" xml:space="preserve">INFORMATIONS</x:String>
127127
<x:String x:Key="Text.CommitDetail.Info.Author" xml:space="preserve">AUTEUR</x:String>
128128
<x:String x:Key="Text.CommitDetail.Info.Changed" xml:space="preserve">CHANGÉ</x:String>
129+
<x:String x:Key="Text.CommitDetail.Info.Children" xml:space="preserve">ENFANTS</x:String>
129130
<x:String x:Key="Text.CommitDetail.Info.Committer" xml:space="preserve">COMMITTER</x:String>
130131
<x:String x:Key="Text.CommitDetail.Info.ContainsIn" xml:space="preserve">Vérifier les références contenant ce commit</x:String>
131132
<x:String x:Key="Text.CommitDetail.Info.ContainsIn.Title" xml:space="preserve">LE COMMIT EST CONTENU PAR</x:String>

src/ViewModels/CommitDetail.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,12 @@ public List<Models.Change> SelectedChanges
7878
}
7979
}
8080

81+
public AvaloniaList<string> Children
82+
{
83+
get;
84+
private set;
85+
} = new AvaloniaList<string>();
86+
8187
public string SearchChangeFilter
8288
{
8389
get => _searchChangeFilter;
@@ -515,6 +521,7 @@ private void Refresh()
515521
VisibleChanges = null;
516522
SelectedChanges = null;
517523
ViewRevisionFileContent = null;
524+
Children.Clear();
518525

519526
if (_commit == null)
520527
return;
@@ -531,6 +538,12 @@ private void Refresh()
531538
Dispatcher.UIThread.Invoke(() => SignInfo = signInfo);
532539
});
533540

541+
Task.Run(() =>
542+
{
543+
var children = new Commands.QueryCommitChildren(_repo.FullPath, _commit.SHA).Result();
544+
Dispatcher.UIThread.Invoke(() => Children.AddRange(children));
545+
});
546+
534547
if (_cancelToken != null)
535548
_cancelToken.Requested = true;
536549

src/Views/CommitBaseInfo.axaml

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
<Rectangle Height=".65" Margin="8" Fill="{DynamicResource Brush.Border2}" VerticalAlignment="Center"/>
5252

5353
<!-- Base Information -->
54-
<Grid RowDefinitions="24,Auto,Auto,Auto" ColumnDefinitions="96,*">
54+
<Grid RowDefinitions="24,Auto,Auto,Auto,Auto" ColumnDefinitions="96,*">
5555
<!-- SHA -->
5656
<TextBlock Grid.Row="0" Grid.Column="0" Classes="info_label" Text="{DynamicResource Text.CommitDetail.Info.SHA}" />
5757
<StackPanel Grid.Row="0" Grid.Column="1" Orientation="Horizontal">
@@ -143,9 +143,52 @@
143143
</ItemsControl.ItemTemplate>
144144
</ItemsControl>
145145

146+
<!-- CHILDREN -->
147+
<TextBlock Grid.Row="2" Grid.Column="0" Classes="info_label" Text="{DynamicResource Text.CommitDetail.Info.Children}" IsVisible="{Binding #ThisControl.Children.Count, Converter={x:Static c:IntConverters.IsGreaterThanZero}}"/>
148+
<ItemsControl Grid.Row="2" Grid.Column="1" Height="24" Margin="12,0,0,0" ItemsSource="{Binding #ThisControl.Children}" IsVisible="{Binding #ThisControl.Children.Count, Converter={x:Static c:IntConverters.IsGreaterThanZero}}">
149+
<ItemsControl.ItemsPanel>
150+
<ItemsPanelTemplate>
151+
<StackPanel Orientation="Horizontal" VerticalAlignment="Center"/>
152+
</ItemsPanelTemplate>
153+
</ItemsControl.ItemsPanel>
154+
155+
<ItemsControl.ItemTemplate>
156+
<DataTemplate>
157+
<TextBlock Classes="primary"
158+
Text="{Binding Converter={x:Static c:StringConverters.ToShortSHA}}"
159+
Foreground="DarkOrange"
160+
TextDecorations="Underline"
161+
Cursor="Hand"
162+
Margin="0,0,16,0"
163+
PointerEntered="OnSHAPointerEntered"
164+
PointerPressed="OnSHAPressed">
165+
<TextBlock.Styles>
166+
<Style Selector="ToolTip">
167+
<Setter Property="MaxWidth" Value="600"/>
168+
</Style>
169+
</TextBlock.Styles>
170+
171+
<TextBlock.DataTemplates>
172+
<DataTemplate DataType="m:Commit">
173+
<StackPanel MinWidth="400" Orientation="Vertical">
174+
<Grid ColumnDefinitions="Auto,*,Auto">
175+
<v:Avatar Grid.Column="0" Width="16" Height="16" VerticalAlignment="Center" IsHitTestVisible="False" User="{Binding Author}"/>
176+
<TextBlock Grid.Column="1" Classes="primary" Text="{Binding Author.Name}" Margin="8,0,0,0"/>
177+
<TextBlock Grid.Column="2" Classes="primary" Text="{Binding CommitterTimeStr}" Foreground="{DynamicResource Brush.FG2}" Margin="8,0,0,0"/>
178+
</Grid>
179+
180+
<TextBlock Classes="primary" Margin="0,8,0,0" Text="{Binding Subject}" TextWrapping="Wrap"/>
181+
</StackPanel>
182+
</DataTemplate>
183+
</TextBlock.DataTemplates>
184+
</TextBlock>
185+
</DataTemplate>
186+
</ItemsControl.ItemTemplate>
187+
</ItemsControl>
188+
146189
<!-- REFS -->
147-
<TextBlock Grid.Row="2" Grid.Column="0" Classes="info_label" Text="{DynamicResource Text.CommitDetail.Info.Refs}" IsVisible="{Binding HasDecorators}"/>
148-
<Border Grid.Row="2" Grid.Column="1" Margin="12,0,0,0" Height="24" IsVisible="{Binding HasDecorators}">
190+
<TextBlock Grid.Row="3" Grid.Column="0" Classes="info_label" Text="{DynamicResource Text.CommitDetail.Info.Refs}" IsVisible="{Binding HasDecorators}"/>
191+
<Border Grid.Row="3" Grid.Column="1" Margin="12,0,0,0" Height="24" IsVisible="{Binding HasDecorators}">
149192
<v:CommitRefsPresenter TagBackground="{DynamicResource Brush.DecoratorTag}"
150193
Foreground="{DynamicResource Brush.FG1}"
151194
FontFamily="{DynamicResource Fonts.Primary}"
@@ -155,8 +198,8 @@
155198
</Border>
156199

157200
<!-- Messages -->
158-
<TextBlock Grid.Row="3" Grid.Column="0" Classes="info_label" Text="{DynamicResource Text.CommitDetail.Info.Message}" VerticalAlignment="Top" Margin="0,4,0,0" />
159-
<v:CommitMessagePresenter Grid.Row="4" Grid.Column="1"
201+
<TextBlock Grid.Row="4" Grid.Column="0" Classes="info_label" Text="{DynamicResource Text.CommitDetail.Info.Message}" VerticalAlignment="Top" Margin="0,4,0,0" />
202+
<v:CommitMessagePresenter Grid.Row="5" Grid.Column="1"
160203
Margin="12,5,8,0"
161204
Classes="primary"
162205
Message="{Binding #ThisControl.Message}"

src/Views/CommitBaseInfo.axaml.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,15 @@ public AvaloniaList<Models.IssueTrackerRule> IssueTrackerRules
5555
set => SetValue(IssueTrackerRulesProperty, value);
5656
}
5757

58+
public static readonly StyledProperty<AvaloniaList<string>> ChildrenProperty =
59+
AvaloniaProperty.Register<CommitBaseInfo, AvaloniaList<string>>(nameof(Children));
60+
61+
public AvaloniaList<string> Children
62+
{
63+
get => GetValue(ChildrenProperty);
64+
set => SetValue(ChildrenProperty, value);
65+
}
66+
5867
public CommitBaseInfo()
5968
{
6069
InitializeComponent();

src/Views/CommitDetail.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
SignInfo="{Binding SignInfo}"
2525
SupportsContainsIn="True"
2626
WebLinks="{Binding WebLinks}"
27+
Children="{Binding Children}"
2728
IssueTrackerRules="{Binding IssueTrackerRules}"/>
2829

2930
<!-- Line -->

0 commit comments

Comments
 (0)