diff --git a/src/Commands/Diff.cs b/src/Commands/Diff.cs index 87fc6671..65a2a6f5 100644 --- a/src/Commands/Diff.cs +++ b/src/Commands/Diff.cs @@ -149,7 +149,8 @@ namespace SourceGit.Commands _oldLine = int.Parse(match.Groups[1].Value); _newLine = int.Parse(match.Groups[2].Value); - _result.TextDiff.Lines.Add(new Models.TextDiffLine(Models.TextDiffLineType.Indicator, line, 0, 0)); + _last = new Models.TextDiffLine(Models.TextDiffLineType.Indicator, line, 0, 0); + _result.TextDiff.Lines.Add(_last); } } else @@ -157,7 +158,8 @@ namespace SourceGit.Commands if (line.Length == 0) { ProcessInlineHighlights(); - _result.TextDiff.Lines.Add(new Models.TextDiffLine(Models.TextDiffLineType.Normal, "", _oldLine, _newLine)); + _last = new Models.TextDiffLine(Models.TextDiffLineType.Normal, "", _oldLine, _newLine); + _result.TextDiff.Lines.Add(_last); _oldLine++; _newLine++; return; @@ -173,7 +175,8 @@ namespace SourceGit.Commands return; } - _deleted.Add(new Models.TextDiffLine(Models.TextDiffLineType.Deleted, line.Substring(1), _oldLine, 0)); + _last = new Models.TextDiffLine(Models.TextDiffLineType.Deleted, line.Substring(1), _oldLine, 0); + _deleted.Add(_last); _oldLine++; } else if (ch == '+') @@ -185,7 +188,8 @@ namespace SourceGit.Commands return; } - _added.Add(new Models.TextDiffLine(Models.TextDiffLineType.Added, line.Substring(1), 0, _newLine)); + _last = new Models.TextDiffLine(Models.TextDiffLineType.Added, line.Substring(1), 0, _newLine); + _added.Add(_last); _newLine++; } else if (ch != '\\') @@ -196,7 +200,8 @@ namespace SourceGit.Commands { _oldLine = int.Parse(match.Groups[1].Value); _newLine = int.Parse(match.Groups[2].Value); - _result.TextDiff.Lines.Add(new Models.TextDiffLine(Models.TextDiffLineType.Indicator, line, 0, 0)); + _last = new Models.TextDiffLine(Models.TextDiffLineType.Indicator, line, 0, 0); + _result.TextDiff.Lines.Add(_last); } else { @@ -207,11 +212,16 @@ namespace SourceGit.Commands return; } - _result.TextDiff.Lines.Add(new Models.TextDiffLine(Models.TextDiffLineType.Normal, line.Substring(1), _oldLine, _newLine)); + _last = new Models.TextDiffLine(Models.TextDiffLineType.Normal, line.Substring(1), _oldLine, _newLine); + _result.TextDiff.Lines.Add(_last); _oldLine++; _newLine++; } } + else if (line.Equals("\\ No newline at end of file", StringComparison.Ordinal)) + { + _last.NoNewLineEndOfFile = true; + } } } @@ -262,6 +272,7 @@ namespace SourceGit.Commands private readonly Models.DiffResult _result = new Models.DiffResult(); private readonly List _deleted = new List(); private readonly List _added = new List(); + private Models.TextDiffLine _last = null; private int _oldLine = 0; private int _newLine = 0; } diff --git a/src/Models/DiffResult.cs b/src/Models/DiffResult.cs index 88992e10..e7d17994 100644 --- a/src/Models/DiffResult.cs +++ b/src/Models/DiffResult.cs @@ -30,6 +30,7 @@ namespace SourceGit.Models public int OldLineNumber { get; set; } = 0; public int NewLineNumber { get; set; } = 0; public List Highlights { get; set; } = new List(); + public bool NoNewLineEndOfFile { get; set; } = false; public string OldLine => OldLineNumber == 0 ? string.Empty : OldLineNumber.ToString(); public string NewLine => NewLineNumber == 0 ? string.Empty : NewLineNumber.ToString(); diff --git a/src/Views/TextDiffView.axaml.cs b/src/Views/TextDiffView.axaml.cs index 03e724ab..1cce96f6 100644 --- a/src/Views/TextDiffView.axaml.cs +++ b/src/Views/TextDiffView.axaml.cs @@ -1253,13 +1253,16 @@ namespace SourceGit.Views { builder.Append(line.Content.Substring(0, 1000)); builder.Append($"...({line.Content.Length - 1000} character trimmed)"); - builder.Append('\n'); } else { builder.Append(line.Content); - builder.Append('\n'); } + + if (line.NoNewLineEndOfFile) + builder.Append("\u26D4"); + + builder.Append('\n'); } Text = builder.ToString(); @@ -1493,13 +1496,16 @@ namespace SourceGit.Views { builder.Append(line.Content.Substring(0, 1000)); builder.Append($"...({line.Content.Length - 1000} characters trimmed)"); - builder.Append('\n'); } else { builder.Append(line.Content); - builder.Append('\n'); } + + if (line.NoNewLineEndOfFile) + builder.Append("\u26D4"); + + builder.Append('\n'); } Text = builder.ToString();