Skip to content

Commit ef2854b

Browse files
committed
feature: show EMPTY FILE instead of NO CHANGES OR ONLY EOL CHANGES when added/deleted file is an empty file (#2434)
Signed-off-by: leo <longshuang@msn.cn>
1 parent df97818 commit ef2854b

7 files changed

Lines changed: 41 additions & 2 deletions

File tree

src/Commands/Diff.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public Diff(string repo, Models.DiffOption opt, int unified, bool ignoreWhitespa
2828
Context = repo;
2929

3030
var builder = new StringBuilder(256);
31-
builder.Append("diff --no-color --no-ext-diff --patch ");
31+
builder.Append("diff --no-color --no-ext-diff --full-index --patch ");
3232
if (ignoreWhitespace)
3333
builder.Append("--ignore-space-change ");
3434
if (ignoreCRAtEOL)

src/Models/DiffResult.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,12 @@ public class ImageDiff
7979
public string NewImageSize => New != null ? $"{New.PixelSize.Width} x {New.PixelSize.Height}" : "0 x 0";
8080
}
8181

82+
public class EmptyFile
83+
{
84+
public const string SHA1 = "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391";
85+
public const string SHA256 = "473a0f4c3be8a93681a267e3b1e9a7dcda1185436fe141f7749120a303721813";
86+
}
87+
8288
public class NoOrEOLChange;
8389

8490
public class SubmoduleDiff

src/Resources/Locales/en_US.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,7 @@
365365
<x:String x:Key="Text.DeleteTag.Tag" xml:space="preserve">Tag:</x:String>
366366
<x:String x:Key="Text.DeleteTag.WithRemote" xml:space="preserve">Delete from remote repositories</x:String>
367367
<x:String x:Key="Text.Diff.Binary" xml:space="preserve">BINARY DIFF</x:String>
368+
<x:String x:Key="Text.Diff.EmptyFile" xml:space="preserve">EMPTY FILE</x:String>
368369
<x:String x:Key="Text.Diff.FileModeChanged" xml:space="preserve">File Mode Changed</x:String>
369370
<x:String x:Key="Text.Diff.First" xml:space="preserve">First Difference</x:String>
370371
<x:String x:Key="Text.Diff.IgnoreWhitespace" xml:space="preserve">Ignore Whitespace Changes</x:String>

src/Resources/Locales/zh_CN.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,7 @@
369369
<x:String x:Key="Text.DeleteTag.Tag" xml:space="preserve">标签名 :</x:String>
370370
<x:String x:Key="Text.DeleteTag.WithRemote" xml:space="preserve">同时删除远程仓库中的此标签</x:String>
371371
<x:String x:Key="Text.Diff.Binary" xml:space="preserve">二进制文件</x:String>
372+
<x:String x:Key="Text.Diff.EmptyFile" xml:space="preserve">空文件</x:String>
372373
<x:String x:Key="Text.Diff.FileModeChanged" xml:space="preserve">文件权限已变化</x:String>
373374
<x:String x:Key="Text.Diff.First" xml:space="preserve">首个差异</x:String>
374375
<x:String x:Key="Text.Diff.IgnoreWhitespace" xml:space="preserve">忽略空白符号变化</x:String>

src/Resources/Locales/zh_TW.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,7 @@
369369
<x:String x:Key="Text.DeleteTag.Tag" xml:space="preserve">標籤名稱:</x:String>
370370
<x:String x:Key="Text.DeleteTag.WithRemote" xml:space="preserve">同時刪除遠端存放庫中的此標籤</x:String>
371371
<x:String x:Key="Text.Diff.Binary" xml:space="preserve">二進位檔案</x:String>
372+
<x:String x:Key="Text.Diff.EmptyFile" xml:space="preserve">空檔案</x:String>
372373
<x:String x:Key="Text.Diff.FileModeChanged" xml:space="preserve">檔案權限已變更</x:String>
373374
<x:String x:Key="Text.Diff.First" xml:space="preserve">第一個差異</x:String>
374375
<x:String x:Key="Text.Diff.IgnoreWhitespace" xml:space="preserve">忽略空白符號變化</x:String>

src/ViewModels/DiffContext.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,10 @@ private void LoadContent()
220220
else
221221
rs = latest.LFSDiff;
222222
}
223+
else if (IsEmptyFileHash(latest.OldHash) || IsEmptyFileHash(latest.NewHash))
224+
{
225+
rs = new Models.EmptyFile();
226+
}
223227
else
224228
{
225229
rs = new Models.NoOrEOLChange();
@@ -272,6 +276,20 @@ private void LoadContent()
272276
};
273277
}
274278

279+
private bool IsEmptyFileHash(string hash)
280+
{
281+
if (string.IsNullOrEmpty(hash))
282+
return false;
283+
284+
if (hash.Length == 40)
285+
return hash.Equals(Models.EmptyFile.SHA1, StringComparison.Ordinal);
286+
287+
if (hash.Length == 64)
288+
return hash.Equals(Models.EmptyFile.SHA256, StringComparison.Ordinal);
289+
290+
return false;
291+
}
292+
275293
private class Info
276294
{
277295
public string Argument { get; }

src/Views/DiffView.axaml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,19 @@
387387
<v:TextDiffView SelectedChunk="{Binding SelectedChunk, Mode=OneWay}"/>
388388
</DataTemplate>
389389

390-
<!-- Empty or only EOL changes -->
390+
<!-- New Empty File -->
391+
<DataTemplate DataType="m:EmptyFile">
392+
<StackPanel Orientation="Vertical" VerticalAlignment="Center">
393+
<Path Width="64" Height="64" Data="{StaticResource Icons.Empty}" Fill="{DynamicResource Brush.FG2}"/>
394+
<TextBlock Margin="0,16,0,0"
395+
Text="{DynamicResource Text.Diff.EmptyFile}"
396+
FontSize="18" FontWeight="Bold"
397+
Foreground="{DynamicResource Brush.FG2}"
398+
HorizontalAlignment="Center"/>
399+
</StackPanel>
400+
</DataTemplate>
401+
402+
<!-- Only EOL changes -->
391403
<DataTemplate DataType="m:NoOrEOLChange">
392404
<StackPanel Orientation="Vertical" VerticalAlignment="Center">
393405
<Path Width="64" Height="64" Data="{StaticResource Icons.Check}" Fill="{DynamicResource Brush.FG2}"/>

0 commit comments

Comments
 (0)