Skip to content

Commit

Permalink
Simplify the implementation of the Tree to Tree comparison
Browse files Browse the repository at this point in the history
  • Loading branch information
nulltoken committed May 21, 2012
1 parent bf88875 commit 6d1711a
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 67 deletions.
1 change: 0 additions & 1 deletion LibGit2Sharp/LibGit2Sharp.csproj
Expand Up @@ -77,7 +77,6 @@
<Compile Include="Core\Handles\TreeEntrySafeHandle.cs" />
<Compile Include="DetachedHead.cs" />
<Compile Include="Diff.cs" />
<Compile Include="PatchPrinter.cs" />
<Compile Include="TreeChanges.cs" />
<Compile Include="TreeEntryChanges.cs" />
<Compile Include="LibGit2Exception.cs" />
Expand Down
45 changes: 0 additions & 45 deletions LibGit2Sharp/PatchPrinter.cs

This file was deleted.

45 changes: 24 additions & 21 deletions LibGit2Sharp/TreeChanges.cs
Expand Up @@ -23,7 +23,8 @@ public class TreeChanges : IEnumerable<TreeEntryChanges>
private int linesDeleted;

private readonly IDictionary<ChangeKind, Action<TreeChanges, TreeEntryChanges>> fileDispatcher = Build();
private readonly string patch;

private readonly StringBuilder fullPatchBuilder = new StringBuilder();

private static IDictionary<ChangeKind, Action<TreeChanges, TreeEntryChanges>> Build()
{
Expand All @@ -37,30 +38,39 @@ public class TreeChanges : IEnumerable<TreeEntryChanges>

internal TreeChanges(DiffListSafeHandle diff)
{
var fullPatchBuilder = new StringBuilder();
Ensure.Success(NativeMethods.git_diff_print_patch(diff, IntPtr.Zero, PrintCallBack));
}

Ensure.Success(NativeMethods.git_diff_foreach(diff, IntPtr.Zero, FileCallback, null, LineCallback));
Ensure.Success(NativeMethods.git_diff_print_patch(diff, IntPtr.Zero, new PatchPrinter(changes, fullPatchBuilder).PrintCallBack));
private int PrintCallBack(IntPtr data, GitDiffDelta delta, GitDiffRange range, GitDiffLineOrigin lineorigin, IntPtr content, IntPtr contentlen)
{
string formattedoutput = marshaler.NativeToString(content, contentlen.ToInt32());
var currentFilePath = (string)marshaler.MarshalNativeToManaged(delta.NewFile.Path);

patch = fullPatchBuilder.ToString();
AddLineChange(currentFilePath, lineorigin);

if (lineorigin == GitDiffLineOrigin.GIT_DIFF_LINE_FILE_HDR)
{
AddFileChange(delta);
}

changes[currentFilePath].PatchBuilder.Append(formattedoutput);
fullPatchBuilder.Append(formattedoutput);

return 0;
}

private int LineCallback(IntPtr data, GitDiffDelta delta, GitDiffRange range, GitDiffLineOrigin lineorigin, IntPtr content, IntPtr contentlen)
private void AddLineChange(string currentFilePath, GitDiffLineOrigin lineOrigin)
{
var newFilePath = (string)marshaler.MarshalNativeToManaged(delta.NewFile.Path);

switch (lineorigin)
switch (lineOrigin)
{
case GitDiffLineOrigin.GIT_DIFF_LINE_ADDITION:
IncrementLinesAdded(newFilePath);
IncrementLinesAdded(currentFilePath);
break;

case GitDiffLineOrigin.GIT_DIFF_LINE_DELETION:
IncrementLinesDeleted(newFilePath);
IncrementLinesDeleted(currentFilePath);
break;
}

return 0;
}

private void IncrementLinesDeleted(string filePath)
Expand All @@ -75,13 +85,6 @@ private void IncrementLinesAdded(string filePath)
this[filePath].LinesAdded++;
}

private int FileCallback(IntPtr data, GitDiffDelta delta, float progress)
{
AddFileChange(delta);

return 0;
}

private void AddFileChange(GitDiffDelta delta)
{
var newFilePath = (string)marshaler.MarshalNativeToManaged(delta.NewFile.Path);
Expand Down Expand Up @@ -175,7 +178,7 @@ public int LinesDeleted
/// </summary>
public string Patch
{
get { return patch; }
get { return fullPatchBuilder.ToString(); }
}
}
}

0 comments on commit 6d1711a

Please sign in to comment.