feature: show uncommitted changes count for submodule (#2264)

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo
2026-04-15 17:47:34 +08:00
parent 2ed3a79e7f
commit 07b9c7a1c2
6 changed files with 25 additions and 2 deletions

View File

@@ -39,5 +39,6 @@ namespace SourceGit.Models
{
public Commit Commit { get; set; } = null;
public CommitFullMessage FullMessage { get; set; } = null;
public int UncommittedChanges { get; set; } = 0;
}
}

View File

@@ -372,6 +372,7 @@
<x:String x:Key="Text.Diff.Submodule" xml:space="preserve">SUBMODULE</x:String>
<x:String x:Key="Text.Diff.Submodule.Deleted" xml:space="preserve">DELETED</x:String>
<x:String x:Key="Text.Diff.Submodule.New" xml:space="preserve">NEW</x:String>
<x:String x:Key="Text.Diff.Submodule.UncommittedChanges" xml:space="preserve">+ {0} Uncommitted Changes</x:String>
<x:String x:Key="Text.Diff.SwapCommits" xml:space="preserve">Swap</x:String>
<x:String x:Key="Text.Diff.SyntaxHighlight" xml:space="preserve">Syntax Highlighting</x:String>
<x:String x:Key="Text.Diff.ToggleWordWrap" xml:space="preserve">Line Word Wrap</x:String>

View File

@@ -376,6 +376,7 @@
<x:String x:Key="Text.Diff.Submodule" xml:space="preserve">子模块</x:String>
<x:String x:Key="Text.Diff.Submodule.Deleted" xml:space="preserve">删除</x:String>
<x:String x:Key="Text.Diff.Submodule.New" xml:space="preserve">新增</x:String>
<x:String x:Key="Text.Diff.Submodule.UncommittedChanges" xml:space="preserve">+ {0} 项未提交变更</x:String>
<x:String x:Key="Text.Diff.SwapCommits" xml:space="preserve">交换比对双方</x:String>
<x:String x:Key="Text.Diff.SyntaxHighlight" xml:space="preserve">语法高亮</x:String>
<x:String x:Key="Text.Diff.ToggleWordWrap" xml:space="preserve">自动换行</x:String>

View File

@@ -376,6 +376,7 @@
<x:String x:Key="Text.Diff.Submodule" xml:space="preserve">子模組</x:String>
<x:String x:Key="Text.Diff.Submodule.Deleted" xml:space="preserve">已刪除</x:String>
<x:String x:Key="Text.Diff.Submodule.New" xml:space="preserve">新增</x:String>
<x:String x:Key="Text.Diff.Submodule.UncommittedChanges" xml:space="preserve">+ {0} 項未提交變更</x:String>
<x:String x:Key="Text.Diff.SwapCommits" xml:space="preserve">交換比對雙方</x:String>
<x:String x:Key="Text.Diff.SyntaxHighlight" xml:space="preserve">語法上色</x:String>
<x:String x:Key="Text.Diff.ToggleWordWrap" xml:space="preserve">自動換行</x:String>

View File

@@ -291,6 +291,16 @@ namespace SourceGit.ViewModels
private async Task<Models.RevisionSubmodule> QuerySubmoduleRevisionAsync(string repo, string sha)
{
if (!File.Exists(Path.Combine(repo, ".git")))
return new Models.RevisionSubmodule() { Commit = new Models.Commit() { SHA = sha } };
var uncommittedChangesCount = 0;
if (sha.EndsWith("-dirty", StringComparison.Ordinal))
{
sha = sha.Substring(0, sha.Length - 6);
uncommittedChangesCount = await new Commands.CountLocalChanges(repo, true).GetResultAsync().ConfigureAwait(false);
}
var commit = await new Commands.QuerySingleCommit(repo, sha).GetResultAsync().ConfigureAwait(false);
if (commit == null)
return new Models.RevisionSubmodule() { Commit = new Models.Commit() { SHA = sha } };
@@ -299,7 +309,8 @@ namespace SourceGit.ViewModels
return new Models.RevisionSubmodule()
{
Commit = commit,
FullMessage = new Models.CommitFullMessage { Message = body }
FullMessage = new Models.CommitFullMessage { Message = body },
UncommittedChanges = uncommittedChangesCount
};
}

View File

@@ -321,7 +321,15 @@
<ContentControl Content="{Binding New}">
<ContentControl.DataTemplates>
<DataTemplate DataType="m:RevisionSubmodule">
<v:CommitBaseInfo Margin="0,4,8,6" Content="{Binding Commit}" FullMessage="{Binding FullMessage}"/>
<StackPanel Orientation="Vertical">
<TextBlock Margin="0,8,0,4"
HorizontalAlignment="Center"
Foreground="OrangeRed"
FontFamily="{DynamicResource Fonts.Monospace}"
Text="{Binding UncommittedChanges, Converter={x:Static c:StringConverters.FormatByResourceKey}, ConverterParameter='Diff.Submodule.UncommittedChanges'}"
IsVisible="{Binding UncommittedChanges, Converter={x:Static c:IntConverters.IsGreaterThanZero}}"/>
<v:CommitBaseInfo Margin="0,4,8,6" Content="{Binding Commit}" FullMessage="{Binding FullMessage}"/>
</StackPanel>
</DataTemplate>
</ContentControl.DataTemplates>
</ContentControl>