Skip to content

Commit 03f96cc

Browse files
authored
feature: add children list to the commit base info view (#673)
1 parent e2e79fe commit 03f96cc

File tree

7 files changed

+88
-7
lines changed

7 files changed

+88
-7
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
namespace SourceGit.Commands
2+
{
3+
public class QueryCommitChildren : Command
4+
{
5+
public QueryCommitChildren(string repo, string sha)
6+
{
7+
WorkingDirectory = repo;
8+
Context = repo;
9+
_sha = sha;
10+
Args = $"rev-list --children --all {sha}^..";
11+
}
12+
13+
public string[] Result()
14+
{
15+
var rs = ReadToEnd();
16+
if (!rs.IsSuccess)
17+
return [];
18+
19+
int start = rs.StdOut.IndexOf($"\n{_sha}");
20+
if (start != -1)
21+
{
22+
int end = rs.StdOut.IndexOf('\n', start + 1);
23+
if (end == -1)
24+
end = rs.StdOut.Length;
25+
start = rs.StdOut.IndexOf(' ', start);
26+
if (start != -1 && start < end)
27+
return rs.StdOut.Substring(start + 1, end - start - 1).Split(' ', System.StringSplitOptions.RemoveEmptyEntries);
28+
}
29+
return [];
30+
}
31+
32+
private string _sha;
33+
}
34+
}

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
@@ -118,6 +118,7 @@
118118
<x:String x:Key="Text.CommitDetail.Info" xml:space="preserve">INFORMATIONS</x:String>
119119
<x:String x:Key="Text.CommitDetail.Info.Author" xml:space="preserve">AUTEUR</x:String>
120120
<x:String x:Key="Text.CommitDetail.Info.Changed" xml:space="preserve">CHANGÉ</x:String>
121+
<x:String x:Key="Text.CommitDetail.Info.Children" xml:space="preserve">ENFANTS</x:String>
121122
<x:String x:Key="Text.CommitDetail.Info.Committer" xml:space="preserve">COMMITTER</x:String>
122123
<x:String x:Key="Text.CommitDetail.Info.ContainsIn" xml:space="preserve">Vérifier les références contenant ce commit</x:String>
123124
<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;
@@ -496,6 +502,7 @@ private void Refresh()
496502
VisibleChanges = null;
497503
SelectedChanges = null;
498504
ViewRevisionFileContent = null;
505+
Children.Clear();
499506

500507
if (_commit == null)
501508
return;
@@ -512,6 +519,12 @@ private void Refresh()
512519
Dispatcher.UIThread.Invoke(() => SignInfo = signInfo);
513520
});
514521

522+
Task.Run(() =>
523+
{
524+
var children = new Commands.QueryCommitChildren(_repo.FullPath, _commit.SHA).Result();
525+
Dispatcher.UIThread.Invoke(() => Children.AddRange(children));
526+
});
527+
515528
if (_cancelToken != null)
516529
_cancelToken.Requested = true;
517530

src/Views/CommitBaseInfo.axaml

Lines changed: 28 additions & 6 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">
@@ -117,14 +117,36 @@
117117
TextDecorations="Underline"
118118
Cursor="Hand"
119119
Margin="0,0,16,0"
120-
PointerPressed="OnParentSHAPressed"/>
120+
PointerPressed="OnSHAPressed"/>
121+
</DataTemplate>
122+
</ItemsControl.ItemTemplate>
123+
</ItemsControl>
124+
125+
<!-- CHILDREN -->
126+
<TextBlock Grid.Row="2" Grid.Column="0" Classes="info_label" Text="{DynamicResource Text.CommitDetail.Info.Children}"/>
127+
<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}}">
128+
<ItemsControl.ItemsPanel>
129+
<ItemsPanelTemplate>
130+
<StackPanel Orientation="Horizontal" VerticalAlignment="Center"/>
131+
</ItemsPanelTemplate>
132+
</ItemsControl.ItemsPanel>
133+
134+
<ItemsControl.ItemTemplate>
135+
<DataTemplate>
136+
<TextBlock Classes="primary"
137+
Text="{Binding Converter={x:Static c:StringConverters.ToShortSHA}}"
138+
Foreground="DarkOrange"
139+
TextDecorations="Underline"
140+
Cursor="Hand"
141+
Margin="0,0,16,0"
142+
PointerPressed="OnSHAPressed"/>
121143
</DataTemplate>
122144
</ItemsControl.ItemTemplate>
123145
</ItemsControl>
124146

125147
<!-- REFS -->
126-
<TextBlock Grid.Row="2" Grid.Column="0" Classes="info_label" Text="{DynamicResource Text.CommitDetail.Info.Refs}" IsVisible="{Binding HasDecorators}"/>
127-
<Border Grid.Row="2" Grid.Column="1" Margin="12,0,0,0" Height="24" IsVisible="{Binding HasDecorators}">
148+
<TextBlock Grid.Row="3" Grid.Column="0" Classes="info_label" Text="{DynamicResource Text.CommitDetail.Info.Refs}" IsVisible="{Binding HasDecorators}"/>
149+
<Border Grid.Row="3" Grid.Column="1" Margin="12,0,0,0" Height="24" IsVisible="{Binding HasDecorators}">
128150
<v:CommitRefsPresenter TagBackground="{DynamicResource Brush.DecoratorTag}"
129151
Foreground="{DynamicResource Brush.FG1}"
130152
FontFamily="{DynamicResource Fonts.Primary}"
@@ -134,8 +156,8 @@
134156
</Border>
135157

136158
<!-- Messages -->
137-
<TextBlock Grid.Row="3" Grid.Column="0" Classes="info_label" Text="{DynamicResource Text.CommitDetail.Info.Message}" VerticalAlignment="Top" Margin="0,4,0,0" />
138-
<v:CommitMessagePresenter Grid.Row="3" Grid.Column="1"
159+
<TextBlock Grid.Row="4" Grid.Column="0" Classes="info_label" Text="{DynamicResource Text.CommitDetail.Info.Message}" VerticalAlignment="Top" Margin="0,4,0,0" />
160+
<v:CommitMessagePresenter Grid.Row="4" Grid.Column="1"
139161
Margin="12,5,8,0"
140162
Classes="primary"
141163
Message="{Binding #ThisControl.Message}"

src/Views/CommitBaseInfo.axaml.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,15 @@ public AvaloniaList<Models.IssueTrackerRule> IssueTrackerRules
5353
set => SetValue(IssueTrackerRulesProperty, value);
5454
}
5555

56+
public static readonly StyledProperty<AvaloniaList<string>> ChildrenProperty =
57+
AvaloniaProperty.Register<CommitBaseInfo, AvaloniaList<string>>(nameof(Children));
58+
59+
public AvaloniaList<string> Children
60+
{
61+
get => GetValue(ChildrenProperty);
62+
set => SetValue(ChildrenProperty, value);
63+
}
64+
5665
public CommitBaseInfo()
5766
{
5867
InitializeComponent();
@@ -113,7 +122,7 @@ private void OnOpenContainsIn(object sender, RoutedEventArgs e)
113122
e.Handled = true;
114123
}
115124

116-
private void OnParentSHAPressed(object sender, PointerPressedEventArgs e)
125+
private void OnSHAPressed(object sender, PointerPressedEventArgs e)
117126
{
118127
if (DataContext is ViewModels.CommitDetail detail && sender is Control { DataContext: string sha })
119128
{

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)