diff --git a/src/Commands/QueryCommitChildren.cs b/src/Commands/QueryCommitChildren.cs
new file mode 100644
index 00000000..22a44563
--- /dev/null
+++ b/src/Commands/QueryCommitChildren.cs
@@ -0,0 +1,34 @@
+namespace SourceGit.Commands
+{
+ public class QueryCommitChildren : Command
+ {
+ public QueryCommitChildren(string repo, string sha)
+ {
+ WorkingDirectory = repo;
+ Context = repo;
+ _sha = sha;
+ Args = $"rev-list --children --all {sha}^..";
+ }
+
+ public string[] Result()
+ {
+ var rs = ReadToEnd();
+ if (!rs.IsSuccess)
+ return [];
+
+ int start = rs.StdOut.IndexOf($"\n{_sha}");
+ if (start != -1)
+ {
+ int end = rs.StdOut.IndexOf('\n', start + 1);
+ if (end == -1)
+ end = rs.StdOut.Length;
+ start = rs.StdOut.IndexOf(' ', start);
+ if (start != -1 && start < end)
+ return rs.StdOut.Substring(start + 1, end - start - 1).Split(' ', System.StringSplitOptions.RemoveEmptyEntries);
+ }
+ return [];
+ }
+
+ private string _sha;
+ }
+}
diff --git a/src/Resources/Locales/en_US.axaml b/src/Resources/Locales/en_US.axaml
index 3803bd39..302f7cba 100644
--- a/src/Resources/Locales/en_US.axaml
+++ b/src/Resources/Locales/en_US.axaml
@@ -125,6 +125,7 @@
INFORMATION
AUTHOR
CHANGED
+ CHILDREN
COMMITTER
Check refs that contains this commit
COMMIT IS CONTAINED BY
diff --git a/src/Resources/Locales/fr_FR.axaml b/src/Resources/Locales/fr_FR.axaml
index 043e8f97..88e2a661 100644
--- a/src/Resources/Locales/fr_FR.axaml
+++ b/src/Resources/Locales/fr_FR.axaml
@@ -118,6 +118,7 @@
INFORMATIONS
AUTEUR
CHANGÉ
+ ENFANTS
COMMITTER
Vérifier les références contenant ce commit
LE COMMIT EST CONTENU PAR
diff --git a/src/ViewModels/CommitDetail.cs b/src/ViewModels/CommitDetail.cs
index cf677c34..349dc56d 100644
--- a/src/ViewModels/CommitDetail.cs
+++ b/src/ViewModels/CommitDetail.cs
@@ -78,6 +78,12 @@ namespace SourceGit.ViewModels
}
}
+ public AvaloniaList Children
+ {
+ get;
+ private set;
+ } = new AvaloniaList();
+
public string SearchChangeFilter
{
get => _searchChangeFilter;
@@ -496,6 +502,7 @@ namespace SourceGit.ViewModels
VisibleChanges = null;
SelectedChanges = null;
ViewRevisionFileContent = null;
+ Children.Clear();
if (_commit == null)
return;
@@ -512,6 +519,12 @@ namespace SourceGit.ViewModels
Dispatcher.UIThread.Invoke(() => SignInfo = signInfo);
});
+ Task.Run(() =>
+ {
+ var children = new Commands.QueryCommitChildren(_repo.FullPath, _commit.SHA).Result();
+ Dispatcher.UIThread.Invoke(() => Children.AddRange(children));
+ });
+
if (_cancelToken != null)
_cancelToken.Requested = true;
diff --git a/src/Views/CommitBaseInfo.axaml b/src/Views/CommitBaseInfo.axaml
index a16143ae..a886cd9e 100644
--- a/src/Views/CommitBaseInfo.axaml
+++ b/src/Views/CommitBaseInfo.axaml
@@ -51,7 +51,7 @@
-
+
@@ -117,14 +117,36 @@
TextDecorations="Underline"
Cursor="Hand"
Margin="0,0,16,0"
- PointerPressed="OnParentSHAPressed"/>
+ PointerPressed="OnSHAPressed"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
+ SetValue(IssueTrackerRulesProperty, value);
}
+ public static readonly StyledProperty> ChildrenProperty =
+ AvaloniaProperty.Register>(nameof(Children));
+
+ public AvaloniaList Children
+ {
+ get => GetValue(ChildrenProperty);
+ set => SetValue(ChildrenProperty, value);
+ }
+
public CommitBaseInfo()
{
InitializeComponent();
@@ -113,7 +122,7 @@ namespace SourceGit.Views
e.Handled = true;
}
- private void OnParentSHAPressed(object sender, PointerPressedEventArgs e)
+ private void OnSHAPressed(object sender, PointerPressedEventArgs e)
{
if (DataContext is ViewModels.CommitDetail detail && sender is Control { DataContext: string sha })
{
diff --git a/src/Views/CommitDetail.axaml b/src/Views/CommitDetail.axaml
index cb99b3d9..4c6fd5dc 100644
--- a/src/Views/CommitDetail.axaml
+++ b/src/Views/CommitDetail.axaml
@@ -24,6 +24,7 @@
SignInfo="{Binding SignInfo}"
SupportsContainsIn="True"
WebLinks="{Binding WebLinks}"
+ Children="{Binding Children}"
IssueTrackerRules="{Binding IssueTrackerRules}"/>