Skip to content

Commit 5e36970

Browse files
committed
enumerate diff lines in patch changeset.
1 parent 4de700f commit 5e36970

File tree

4 files changed

+52
-12
lines changed

4 files changed

+52
-12
lines changed

LibGit2Sharp/ContentChangeLine.cs

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using LibGit2Sharp.Core;
2+
3+
namespace LibGit2Sharp
4+
{
5+
public class ContentChangeLine
6+
{
7+
public int OldLineNo;
8+
public int NewLineNo;
9+
public int NumLines;
10+
11+
internal ContentChangeLine(GitDiffLine line)
12+
{
13+
OldLineNo = line.OldLineNo;
14+
NewLineNo = line.NewLineNo;
15+
NumLines = line.NumLines;
16+
}
17+
}
18+
}

LibGit2Sharp/ContentChanges.cs

+31-9
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using System;
2+
using System.Collections;
3+
using System.Collections.Generic;
24
using System.Diagnostics;
35
using System.Globalization;
46
using System.Text;
@@ -10,9 +12,10 @@ namespace LibGit2Sharp
1012
/// Holds the changes between two <see cref="Blob"/>s.
1113
/// </summary>
1214
[DebuggerDisplay("{DebuggerDisplay,nq}")]
13-
public class ContentChanges
15+
public class ContentChanges : IEnumerable<ContentChangeLine>
1416
{
1517
private readonly StringBuilder patchBuilder = new StringBuilder();
18+
private readonly List<ContentChangeLine> lines = new List<ContentChangeLine>();
1619

1720
/// <summary>
1821
/// Needed for mocking purposes.
@@ -95,15 +98,7 @@ private unsafe int LineCallback(git_diff_delta* delta, GitDiffHunk hunk, GitDiff
9598
switch (line.lineOrigin)
9699
{
97100
case GitDiffLineOrigin.GIT_DIFF_LINE_ADDITION:
98-
LinesAdded++;
99-
prefix = Encoding.ASCII.GetString(new[] { (byte)line.lineOrigin });
100-
break;
101-
102101
case GitDiffLineOrigin.GIT_DIFF_LINE_DELETION:
103-
LinesDeleted++;
104-
prefix = Encoding.ASCII.GetString(new[] { (byte)line.lineOrigin });
105-
break;
106-
107102
case GitDiffLineOrigin.GIT_DIFF_LINE_CONTEXT:
108103
prefix = Encoding.ASCII.GetString(new[] { (byte)line.lineOrigin });
109104
break;
@@ -113,11 +108,38 @@ private unsafe int LineCallback(git_diff_delta* delta, GitDiffHunk hunk, GitDiff
113108
break;
114109
}
115110

111+
AppendGitDiffLine(line);
116112
AppendToPatch(prefix);
117113
AppendToPatch(decodedContent);
118114
return 0;
119115
}
120116

117+
internal void AppendGitDiffLine(GitDiffLine line)
118+
{
119+
switch (line.lineOrigin)
120+
{
121+
case GitDiffLineOrigin.GIT_DIFF_LINE_ADDITION:
122+
LinesAdded++;
123+
lines.Add(new ContentChangeLine(line));
124+
break;
125+
126+
case GitDiffLineOrigin.GIT_DIFF_LINE_DELETION:
127+
LinesDeleted++;
128+
lines.Add(new ContentChangeLine(line));
129+
break;
130+
}
131+
}
132+
133+
public IEnumerator<ContentChangeLine> GetEnumerator()
134+
{
135+
return lines.GetEnumerator();
136+
}
137+
138+
IEnumerator IEnumerable.GetEnumerator()
139+
{
140+
return lines.GetEnumerator();
141+
}
142+
121143
private string DebuggerDisplay
122144
{
123145
get

LibGit2Sharp/LibGit2Sharp.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
</ItemGroup>
3333

3434
<ItemGroup>
35-
<PackageReference Include="LibGit2Sharp.NativeBinaries" Version="[2.0.305]" PrivateAssets="none" />
35+
<PackageReference Include="LibGit2Sharp.NativeBinaries" Version="2.0.306" PrivateAssets="none" />
3636
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="all" />
3737
<PackageReference Include="Nerdbank.GitVersioning" Version="3.0.50" PrivateAssets="all" />
3838
</ItemGroup>

LibGit2Sharp/Patch.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -76,17 +76,17 @@ private unsafe int PrintCallBack(git_diff_delta* delta, GitDiffHunk hunk, GitDif
7676

7777
case GitDiffLineOrigin.GIT_DIFF_LINE_ADDITION:
7878
linesAdded++;
79-
currentChange.LinesAdded++;
8079
prefix = "+";
8180
break;
8281

8382
case GitDiffLineOrigin.GIT_DIFF_LINE_DELETION:
8483
linesDeleted++;
85-
currentChange.LinesDeleted++;
8684
prefix = "-";
8785
break;
8886
}
8987

88+
currentChange.AppendGitDiffLine(line);
89+
9090
string formattedOutput = string.Concat(prefix, patchPart);
9191

9292
fullPatchBuilder.Append(formattedOutput);

0 commit comments

Comments
 (0)