Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit cc5bb5f

Browse files
Show the list of children in the commit details (#710)
* feature: add children list to the commit base info view Useful for navigation between the commits. * feature: use repository filters to limit children search * feature: execute children search asynchronously * feature: respect global commit limit for a good measure * fix: input lines may contain several commits The first commit is always the immediate child, so take only 40 initial characters of the line * fix: hide children behind the preference * feature: make parents and children scrollable
1 parent cc1eb55 commit cc5bb5f

File tree

9 files changed

+172
-46
lines changed

9 files changed

+172
-46
lines changed

‎src/Commands/QueryCommitChildren.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using SourceGit.ViewModels;
4+
5+
namespace SourceGit.Commands
6+
{
7+
public class QueryCommitChildren : Command
8+
{
9+
public QueryCommitChildren(string repo, string commit, string filters)
10+
{
11+
WorkingDirectory = repo;
12+
Context = repo;
13+
_commit = commit;
14+
if (string.IsNullOrEmpty(filters))
15+
filters = "--all";
16+
Args = $"rev-list -{Preference.Instance.MaxHistoryCommits} --parents {filters} ^{commit}";
17+
}
18+
19+
protected override void OnReadline(string line)
20+
{
21+
if (line.Contains(_commit))
22+
_lines.Add(line.Substring(0, 40));
23+
}
24+
25+
public IEnumerable<string> Result()
26+
{
27+
Exec();
28+
return _lines;
29+
}
30+
31+
private string _commit;
32+
private List<string> _lines = new List<string>();
33+
}
34+
}

‎src/Resources/Locales/en_US.axaml

Lines changed: 2 additions & 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>
@@ -451,6 +452,7 @@
451452
<x:String x:Key="Text.Preference.General.Locale" xml:space="preserve">Language</x:String>
452453
<x:String x:Key="Text.Preference.General.MaxHistoryCommits" xml:space="preserve">History Commits</x:String>
453454
<x:String x:Key="Text.Preference.General.ShowAuthorTime" xml:space="preserve">Show author time intead of commit time in graph</x:String>
455+
<x:String x:Key="Text.Preference.General.ShowChildren" xml:space="preserve">Show children in the comment details</x:String>
454456
<x:String x:Key="Text.Preference.General.SubjectGuideLength" xml:space="preserve">Subject Guide Length</x:String>
455457
<x:String x:Key="Text.Preference.Git" xml:space="preserve">GIT</x:String>
456458
<x:String x:Key="Text.Preference.Git.CRLF" xml:space="preserve">Enable Auto CRLF</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: 19 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;
@@ -535,6 +542,18 @@ private void Refresh()
535542
_cancelToken.Requested = true;
536543

537544
_cancelToken = new Commands.Command.CancelToken();
545+
546+
if (Preference.Instance.ShowChildren)
547+
{
548+
Task.Run(() =>
549+
{
550+
var cmdChildren = new Commands.QueryCommitChildren(_repo.FullPath, _commit.SHA, _repo.Settings.BuildHistoriesFilter()) { Cancel = _cancelToken };
551+
var children = cmdChildren.Result();
552+
if (!cmdChildren.Cancel.Requested)
553+
Dispatcher.UIThread.Post(() => Children.AddRange(children));
554+
});
555+
}
556+
538557
Task.Run(() =>
539558
{
540559
var parent = _commit.Parents.Count == 0 ? "4b825dc642cb6eb9a060e54bf8d69288fbee4904" : _commit.Parents[0];

‎src/ViewModels/Preference.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,12 @@ public uint StatisticsSampleColor
294294
set => SetProperty(ref _statisticsSampleColor, value);
295295
}
296296

297+
public bool ShowChildren
298+
{
299+
get => _showChildren;
300+
set => SetProperty(ref _showChildren, value);
301+
}
302+
297303
public List<RepositoryNode> RepositoryNodes
298304
{
299305
get;
@@ -617,5 +623,7 @@ private bool RemoveInvalidRepositoriesRecursive(List<RepositoryNode> collection)
617623
private string _externalMergeToolPath = string.Empty;
618624

619625
private uint _statisticsSampleColor = 0xFF00FF00;
626+
627+
private bool _showChildren = false;
620628
}
621629
}

‎src/Views/CommitBaseInfo.axaml

Lines changed: 91 additions & 44 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">
@@ -102,50 +102,97 @@
102102

103103
<!-- PARENTS -->
104104
<TextBlock Grid.Row="1" Grid.Column="0" Classes="info_label" Text="{DynamicResource Text.CommitDetail.Info.Parents}" IsVisible="{Binding Parents.Count, Converter={x:Static c:IntConverters.IsGreaterThanZero}}"/>
105-
<ItemsControl Grid.Row="1" Grid.Column="1" Height="24" Margin="12,0,0,0" ItemsSource="{Binding Parents}" IsVisible="{Binding Parents.Count, Converter={x:Static c:IntConverters.IsGreaterThanZero}}">
106-
<ItemsControl.ItemsPanel>
107-
<ItemsPanelTemplate>
108-
<StackPanel Orientation="Horizontal" VerticalAlignment="Center"/>
109-
</ItemsPanelTemplate>
110-
</ItemsControl.ItemsPanel>
111-
112-
<ItemsControl.ItemTemplate>
113-
<DataTemplate>
114-
<TextBlock Classes="primary"
115-
Text="{Binding Converter={x:Static c:StringConverters.ToShortSHA}}"
116-
Foreground="DarkOrange"
117-
TextDecorations="Underline"
118-
Cursor="Hand"
119-
Margin="0,0,16,0"
120-
PointerEntered="OnSHAPointerEntered"
121-
PointerPressed="OnSHAPressed">
122-
<TextBlock.Styles>
123-
<Style Selector="ToolTip">
124-
<Setter Property="MaxWidth" Value="600"/>
125-
</Style>
126-
</TextBlock.Styles>
127-
128-
<TextBlock.DataTemplates>
129-
<DataTemplate DataType="m:Commit">
130-
<StackPanel MinWidth="400" Orientation="Vertical">
131-
<Grid ColumnDefinitions="Auto,*,Auto">
132-
<v:Avatar Grid.Column="0" Width="16" Height="16" VerticalAlignment="Center" IsHitTestVisible="False" User="{Binding Author}"/>
133-
<TextBlock Grid.Column="1" Classes="primary" Text="{Binding Author.Name}" Margin="8,0,0,0"/>
134-
<TextBlock Grid.Column="2" Classes="primary" Text="{Binding CommitterTimeStr}" Foreground="{DynamicResource Brush.FG2}" Margin="8,0,0,0"/>
135-
</Grid>
105+
<ScrollViewer Grid.Row="1" Grid.Column="1" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Hidden" AllowAutoHide="True">
106+
<ItemsControl Height="24" Margin="12,0,0,0" ItemsSource="{Binding Parents}" IsVisible="{Binding Parents.Count, Converter={x:Static c:IntConverters.IsGreaterThanZero}}">
107+
<ItemsControl.ItemsPanel>
108+
<ItemsPanelTemplate>
109+
<StackPanel Orientation="Horizontal" VerticalAlignment="Center"/>
110+
</ItemsPanelTemplate>
111+
</ItemsControl.ItemsPanel>
136112

137-
<TextBlock Classes="primary" Margin="0,8,0,0" Text="{Binding Subject}" TextWrapping="Wrap"/>
138-
</StackPanel>
139-
</DataTemplate>
140-
</TextBlock.DataTemplates>
141-
</TextBlock>
142-
</DataTemplate>
143-
</ItemsControl.ItemTemplate>
144-
</ItemsControl>
113+
<ItemsControl.ItemTemplate>
114+
<DataTemplate>
115+
<TextBlock Classes="primary"
116+
Text="{Binding Converter={x:Static c:StringConverters.ToShortSHA}}"
117+
Foreground="DarkOrange"
118+
TextDecorations="Underline"
119+
Cursor="Hand"
120+
Margin="0,0,16,0"
121+
PointerEntered="OnSHAPointerEntered"
122+
PointerPressed="OnSHAPressed">
123+
<TextBlock.Styles>
124+
<Style Selector="ToolTip">
125+
<Setter Property="MaxWidth" Value="600"/>
126+
</Style>
127+
</TextBlock.Styles>
128+
129+
<TextBlock.DataTemplates>
130+
<DataTemplate DataType="m:Commit">
131+
<StackPanel MinWidth="400" Orientation="Vertical">
132+
<Grid ColumnDefinitions="Auto,*,Auto">
133+
<v:Avatar Grid.Column="0" Width="16" Height="16" VerticalAlignment="Center" IsHitTestVisible="False" User="{Binding Author}"/>
134+
<TextBlock Grid.Column="1" Classes="primary" Text="{Binding Author.Name}" Margin="8,0,0,0"/>
135+
<TextBlock Grid.Column="2" Classes="primary" Text="{Binding CommitterTimeStr}" Foreground="{DynamicResource Brush.FG2}" Margin="8,0,0,0"/>
136+
</Grid>
137+
138+
<TextBlock Classes="primary" Margin="0,8,0,0" Text="{Binding Subject}" TextWrapping="Wrap"/>
139+
</StackPanel>
140+
</DataTemplate>
141+
</TextBlock.DataTemplates>
142+
</TextBlock>
143+
</DataTemplate>
144+
</ItemsControl.ItemTemplate>
145+
</ItemsControl>
146+
</ScrollViewer>
147+
148+
<!-- CHILDREN -->
149+
<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}}"/>
150+
<ScrollViewer Grid.Row="2" Grid.Column="1" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Hidden" AllowAutoHide="True">
151+
<ItemsControl Height="24" Margin="12,0,0,0" ItemsSource="{Binding #ThisControl.Children}" IsVisible="{Binding #ThisControl.Children.Count, Converter={x:Static c:IntConverters.IsGreaterThanZero}}">
152+
<ItemsControl.ItemsPanel>
153+
<ItemsPanelTemplate>
154+
<StackPanel Orientation="Horizontal" VerticalAlignment="Center"/>
155+
</ItemsPanelTemplate>
156+
</ItemsControl.ItemsPanel>
157+
158+
<ItemsControl.ItemTemplate>
159+
<DataTemplate>
160+
<TextBlock Classes="primary"
161+
Text="{Binding Converter={x:Static c:StringConverters.ToShortSHA}}"
162+
Foreground="DarkOrange"
163+
TextDecorations="Underline"
164+
Cursor="Hand"
165+
Margin="0,0,16,0"
166+
PointerEntered="OnSHAPointerEntered"
167+
PointerPressed="OnSHAPressed">
168+
<TextBlock.Styles>
169+
<Style Selector="ToolTip">
170+
<Setter Property="MaxWidth" Value="600"/>
171+
</Style>
172+
</TextBlock.Styles>
173+
174+
<TextBlock.DataTemplates>
175+
<DataTemplate DataType="m:Commit">
176+
<StackPanel MinWidth="400" Orientation="Vertical">
177+
<Grid ColumnDefinitions="Auto,*,Auto">
178+
<v:Avatar Grid.Column="0" Width="16" Height="16" VerticalAlignment="Center" IsHitTestVisible="False" User="{Binding Author}"/>
179+
<TextBlock Grid.Column="1" Classes="primary" Text="{Binding Author.Name}" Margin="8,0,0,0"/>
180+
<TextBlock Grid.Column="2" Classes="primary" Text="{Binding CommitterTimeStr}" Foreground="{DynamicResource Brush.FG2}" Margin="8,0,0,0"/>
181+
</Grid>
182+
183+
<TextBlock Classes="primary" Margin="0,8,0,0" Text="{Binding Subject}" TextWrapping="Wrap"/>
184+
</StackPanel>
185+
</DataTemplate>
186+
</TextBlock.DataTemplates>
187+
</TextBlock>
188+
</DataTemplate>
189+
</ItemsControl.ItemTemplate>
190+
</ItemsControl>
191+
</ScrollViewer>
145192

146193
<!-- 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}">
194+
<TextBlock Grid.Row="3" Grid.Column="0" Classes="info_label" Text="{DynamicResource Text.CommitDetail.Info.Refs}" IsVisible="{Binding HasDecorators}"/>
195+
<Border Grid.Row="3" Grid.Column="1" Margin="12,0,0,0" Height="24" IsVisible="{Binding HasDecorators}">
149196
<v:CommitRefsPresenter TagBackground="{DynamicResource Brush.DecoratorTag}"
150197
Foreground="{DynamicResource Brush.FG1}"
151198
FontFamily="{DynamicResource Fonts.Primary}"
@@ -155,8 +202,8 @@
155202
</Border>
156203

157204
<!-- 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"
205+
<TextBlock Grid.Row="4" Grid.Column="0" Classes="info_label" Text="{DynamicResource Text.CommitDetail.Info.Message}" VerticalAlignment="Top" Margin="0,4,0,0" />
206+
<v:CommitMessagePresenter Grid.Row="5" Grid.Column="1"
160207
Margin="12,5,8,0"
161208
Classes="primary"
162209
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 -->

‎src/Views/Preference.axaml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
<TabItem.Header>
4646
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Preference.General}"/>
4747
</TabItem.Header>
48-
<Grid Margin="8" RowDefinitions="32,32,32,32,32,32" ColumnDefinitions="Auto,*">
48+
<Grid Margin="8" RowDefinitions="32,32,32,32,32,32,32" ColumnDefinitions="Auto,*">
4949
<TextBlock Grid.Row="0" Grid.Column="0"
5050
Text="{DynamicResource Text.Preference.General.Locale}"
5151
HorizontalAlignment="Right"
@@ -114,6 +114,11 @@
114114
Height="32"
115115
Content="{DynamicResource Text.Preference.General.Check4UpdatesOnStartup}"
116116
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=Check4UpdatesOnStartup, Mode=TwoWay}"/>
117+
118+
<CheckBox Grid.Row="6" Grid.Column="1"
119+
Height="32"
120+
Content="{DynamicResource Text.Preference.General.ShowChildren}"
121+
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=ShowChildren, Mode=TwoWay}"/>
117122
</Grid>
118123
</TabItem>
119124

@@ -188,7 +193,7 @@
188193
</Border>
189194
</NumericUpDown.InnerLeftContent>
190195
</NumericUpDown>
191-
</Grid>
196+
</Grid>
192197

193198
<TextBlock Grid.Row="4" Grid.Column="0"
194199
Text="{DynamicResource Text.Preference.Appearance.ThemeOverrides}"

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /