8000 Introduce PatchEntryChanges · GiTechLab/libgit2sharp@4720e82 · GitHub
[go: up one dir, main page]

Skip to content

Commit 4720e82

Browse files
committed
Introduce PatchEntryChanges
Exposes same properties than TreeEntryChanges through composition
1 parent b399005 commit 4720e82

File tree

6 files changed

+117
-45
lines changed

6 files changed

+117
-45
lines changed

LibGit2Sharp.Tests/DiffTreeToTreeFixture.cs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -786,11 +786,12 @@ public void CanCompareTwoVersionsOfAFileWithATrailingNewlineDeletion(int context
786786

787787
Assert.Equal(expectedPatchLength, patch.Content.Length);
788788

789-
ContentChanges contentChanges = patch["numbers.txt"];
789+
PatchEntryChanges entryChanges = patch["numbers.txt"];
790790

791-
Assert.Equal(2, contentChanges.LinesAdded);
792-
Assert.Equal(1, contentChanges.LinesDeleted);
793-
Assert.Equal(expectedPatchLength, contentChanges.Patch.Length);
791+
Assert.Equal(2, entryChanges.LinesAdded);
792+
Assert.Equal(1, entryChanges.LinesDeleted);
793+
Assert.Equal(expectedPatchLength, entryChanges.Patch.Length);
794+
Assert.Equal("numbers.txt", entryChanges.Path);
794795
}
795796
}
796797

@@ -881,14 +882,15 @@ public void CanCompareTwoVersionsOfAFileWithADiffOfTwoHunks(int contextLines, in
881882

882883
var patch = repo.Diff.Compare<Patch>(rootCommitTree, mergedCommitTree, compareOptions: compareOptions);
883884

884-
ContentChanges contentChanges = patch["numbers.txt"];
885+
PatchEntryChanges entryChanges = patch["numbers.txt"];
885886

886-
Assert.Equal(3, contentChanges.LinesAdded);
887-
Assert.Equal(1, contentChanges.LinesDeleted);
887+
Assert.Equal(3, entryChanges.LinesAdded);
888+
Assert.Equal(1, entryChanges.LinesDeleted);
888889
Assert.Equal(Expected("f8d44d7...7252fe2/numbers.txt-{0}-{1}.diff", contextLines, interhunkLines),
889-
contentChanges.Patch);
890+
entryChanges.Patch);
890891
Assert.Equal(Expected("f8d44d7...7252fe2/full-{0}-{1}.diff", contextLines, interhunkLines),
891892
patch);
893+
Assert.Equal("numbers.txt", entryChanges.Path);
892894
}
893895
}
894896

LibGit2Sharp/LibGit2Sharp.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
<Compile Include="GlobalSettings.cs" />
9696
<Compile Include="MergeOptions.cs" />
9797
<Compile Include="MergeResult.cs" />
98+
<Compile Include="PatchEntryChanges.cs" />
9899
<Compile Include="PatchStats.cs" />
99100
<Compile Include="PullOptions.cs" />
100101
<Compile Include="RefSpec.cs" />

LibGit2Sharp/Patch.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ namespace LibGit2Sharp
1616
/// deleted, modified, ..., then consider using a simpler <see cref="TreeChanges"/>.</para>
1717
/// </summary>
1818
[DebuggerDisplay("{DebuggerDisplay,nq}")]
19-
public class Patch : IEnumerable<ContentChanges>
19+
public class Patch : IEnumerable<PatchEntryChanges>
2020
{
2121
private readonly StringBuilder fullPatchBuilder = new StringBuilder();
2222

23-
private readonly IDictionary<FilePath, ContentChanges> changes = new Dictionary<FilePath, ContentChanges>();
23+
private readonly IDictionary<FilePath, PatchEntryChanges> changes = new Dictionary<FilePath, PatchEntryChanges>();
2424
private int linesAdded;
2525
private int linesDeleted;
2626

@@ -47,9 +47,9 @@ internal Patch(DiffSafeHandle diff)
4747

4848
private void AddFileChange(GitDiffDelta delta)
4949
{
50-
var pathPtr = delta.NewFile.Path != IntPtr.Zero ? delta.NewFile.Path : delta.OldFile.Path;
51-
var newFilePath = LaxFilePathMarshaler.FromNative(pathPtr);
52-
changes.Add(newFilePath, new ContentChanges(delta.IsBinary()));
50+
var treeEntryChanges = new TreeEntryChanges(delta);
51+
52+
changes.Add(treeEntryChanges.Path, new PatchEntryChanges(delta.IsBinary(), treeEntryChanges));
5353
}
5454

5555
private int PrintCallBack(GitDiffDelta delta, GitDiffHunk hunk, GitDiffLine line, IntPtr payload)
@@ -61,7 +61,7 @@ private int PrintCallBack(GitDiffDelta delta, GitDiffHunk hunk, GitDiffLine line
6161
var pathPtr = delta.NewFile.Path != IntPtr.Zero ? delta.NewFile.Path : delta.OldFile.Path;
6262
var filePath = LaxFilePathMarshaler.FromNative(pathPtr);
6363

64-
ContentChanges currentChange = this[filePath];
64+
PatchEntryChanges currentChange = this[filePath];
6565
string prefix = string.Empty;
6666

6767
switch (line.lineOrigin)
@@ -91,13 +91,13 @@ private int PrintCallBack(GitDiffDelta delta, GitDiffHunk hunk, GitDiffLine line
9191
return 0;
9292
}
9393

94-
#region IEnumerable<ContentChanges> Members
94+
#region IEnumerable<PatchEntryChanges> Members
9595

9696
/// <summary>
9797
/// Returns an enumerator that iterates through the collection.
9898
/// </summary>
9999
/// <returns>An <see cref="IEnumerator{T}"/> object that can be used to iterate through the collection.</returns>
100-
public virtual IEnumerator<ContentChanges> GetEnumerator()
100+
public virtual IEnumerator<PatchEntryChanges> GetEnumerator()
101101
{
102102
return changes.Values.GetEnumerator();
103103
}
@@ -116,19 +116,19 @@ IEnumerator IEnumerable.GetEnumerator()
116116
/// <summary>
117117
/// Gets the <see cref="ContentChanges"/> corresponding to the specified <paramref name="path"/>.
118118
/// </summary>
119-
public virtual ContentChanges this[string path]
119+
public virtual PatchEntryChanges this[string path]
120120
{
121121
get { return this[(FilePath)path]; }
122122
}
123123

124-
private ContentChanges this[FilePath path]
124+
private PatchEntryChanges this[FilePath path]
125125
{
126126
get
127127
{
128-
ContentChanges contentChanges;
129-
if (changes.TryGetValue(path, out contentChanges))
128+
PatchEntryChanges entryChanges;
129+
if (changes.TryGetValue(path, out entryChanges))
130130
{
131-
return contentChanges;
131+
return entryChanges;
132132
}
133133

134134
return null;

LibGit2Sharp/PatchEntryChanges.cs

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
namespace LibGit2Sharp
2+
{
3+
/// <summary>
4+
/// Holds the changes between two versions of a file.
5+
/// </summary>
6+
public class PatchEntryChanges : ContentChanges
7+
{
8+
private readonly TreeEntryChanges treeEntryChanges;
9+
10+
/// <summary>
11+
/// Needed for mocking purposes.
12+
/// </summary>
13+
protected PatchEntryChanges()
14+
{ }
15+
16+
internal PatchEntryChanges(bool isBinaryComparison, TreeEntryChanges treeEntryChanges)
17+
: base(isBinaryComparison)
18+
{
19+
this.treeEntryChanges = treeEntryChanges;
20+
}
21+
22+
/// <summary>
23+
/// The new path.
24+
/// </summary>
25+
public virtual string Path
26+
{
27+
get { return treeEntryChanges.Path; }
28+
}
29+
30+
/// <summary>
31+
/// The new <see cref="Mode"/>.
32+
/// </summary>
33+
public virtual Mode Mode
34+
{
35+
get { return treeEntryChanges.Mode; }
36+
}
37+
38+
/// <summary>
39+
/// The new content hash.
40+
/// </summary>
41+
public virtual ObjectId Oid
42+
{
43+
get { return treeEntryChanges.Oid; }
44+
}
45+
46+
/// <summary>
47+
/// The kind of change that has been done (added, deleted, modified ...).
48+
/// </summary>
49+
public virtual ChangeKind Status
50+
{
51+
get { return treeEntryChanges.Status; }
52+
}
53+
54+
/// <summary>
55+
/// The old path.
56+
/// </summary>
57+
public virtual string OldPath
58+
{
59+
get { return treeEntryChanges.OldPath; }
60+
}
61+
62+
/// <summary>
63+
/// The old <see cref="Mode"/>.
64+
/// </summary>
65+
public virtual Mode OldMode
66+
{
67+
get { return treeEntryChanges.OldMode; }
68+
}
69+
70+
/// <summary>
71+
/// The old content hash.
72+
/// </summary>
73+
public virtual ObjectId OldOid
74+
{
75+
get { return treeEntryChanges.OldOid; }
76+
}
77+
}
78+
}

LibGit2Sharp/TreeChanges.cs

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -61,23 +61,10 @@ private int FileCallback(GitDiffDelta delta, float progress, IntPtr payload)
6161

6262
private void AddFileChange(GitDiffDelta delta)
6363
{
64-
var newFilePath = LaxFilePathMarshaler.FromNative(delta.NewFile.Path);
64+
var treeEntryChanges = new TreeEntryChanges(delta);
6565

66-
var oldFilePath = LaxFilePathMarshaler.FromNative(delta.OldFile.Path);
67-
var newMode = (Mode)delta.NewFile.Mode;
68-
var oldMode = (Mode)delta.OldFile.Mode;
69-
var newOid = delta.NewFile.Id;
70-
var oldOid = delta.OldFile.Id;
71-
72-
if (delta.Status == ChangeKind.Untracked || delta.Status == ChangeKind.Ignored)
73-
{
74-
delta.Status = ChangeKind.Added;
75-
}
76-
77-
var diffFile = new TreeEntryChanges(newFilePath, newMode, newOid, delta.Status, oldFilePath, oldMode, oldOid);
78-
79-
fileDispatcher[delta.Status](this, diffFile);
80-
changes.Add(newFilePath, diffFile);
66+
fileDispatcher[treeEntryChanges.Status](this, treeEntryChanges);
67+
changes.Add(treeEntryChanges.Path, treeEntryChanges);
8168
}
8269

8370
#region IEnumerable<TreeEntryChanges> Members

LibGit2Sharp/TreeEntryChanges.cs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,19 @@ public class TreeEntryChanges
1616
protected TreeEntryChanges()
1717
{ }
1818

19-
internal TreeEntryChanges(FilePath path, Mode mode, ObjectId oid, ChangeKind status, FilePath oldPath, Mode oldMode, ObjectId oldOid)
19+
internal TreeEntryChanges(GitDiffDelta delta)
2020
{
21-
Path = path.Native;
22-
Mode = mode;
23-
Oid = oid;
24-
Status = status;
25-
OldPath = oldPath.Native;
26-
OldMode = oldMode;
27-
OldOid = oldOid;
21+
Path = LaxFilePathMarshaler.FromNative(delta.NewFile.Path).Native;
22+
OldPath = LaxFilePathMarshaler.FromNative(delta.OldFile.Path).Native;
23+
24+
Mode = (Mode)delta.NewFile.Mode;
25+
OldMode = (Mode)delta.OldFile.Mode;
26+
Oid = delta.NewFile.Id;
27+
OldOid = delta.OldFile.Id;
28+
29+
Status = (delta.Status == ChangeKind.Untracked || delta.Status == ChangeKind.Ignored)
30+
? ChangeKind.Added
31+
: delta.Status;
2832
}
2933

3034
/// <summary>

0 commit comments

Comments
 (0)
0