diff options
author | nulltoken <emeric.fermas@gmail.com> | 2012-05-21 14:19:21 +0400 |
---|---|---|
committer | nulltoken <emeric.fermas@gmail.com> | 2012-05-21 16:08:15 +0400 |
commit | 6d1711ab61db1d67aaee27f779f86de43fed8cf2 (patch) | |
tree | 2fc1f91d70d6a7c65cbe5ff8c16d5d87788b2c32 | |
parent | bf8887551828b9ba5be6fbdbbf3ae970e568c357 (diff) |
Simplify the implementation of the Tree to Tree comparison
-rw-r--r-- | LibGit2Sharp/LibGit2Sharp.csproj | 1 | ||||
-rw-r--r-- | LibGit2Sharp/PatchPrinter.cs | 45 | ||||
-rw-r--r-- | LibGit2Sharp/TreeChanges.cs | 45 |
3 files changed, 24 insertions, 67 deletions
diff --git a/LibGit2Sharp/LibGit2Sharp.csproj b/LibGit2Sharp/LibGit2Sharp.csproj index 955bfcf6..64ef22fc 100644 --- a/LibGit2Sharp/LibGit2Sharp.csproj +++ b/LibGit2Sharp/LibGit2Sharp.csproj @@ -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" /> diff --git a/LibGit2Sharp/PatchPrinter.cs b/LibGit2Sharp/PatchPrinter.cs deleted file mode 100644 index 4e103bd0..00000000 --- a/LibGit2Sharp/PatchPrinter.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using LibGit2Sharp.Core; - -namespace LibGit2Sharp -{ - internal class PatchPrinter - { - private readonly IDictionary<string, TreeEntryChanges> filesChanges; - private readonly StringBuilder fullPatchBuilder; - private string currentFilePath; - - private static readonly Utf8Marshaler marshaler = (Utf8Marshaler)Utf8Marshaler.GetInstance(string.Empty); - - internal PatchPrinter(IDictionary<string, TreeEntryChanges> filesChanges, StringBuilder fullPatchBuilder) - { - this.filesChanges = filesChanges; - this.fullPatchBuilder = fullPatchBuilder; - } - - - private static string NativeToString(IntPtr content, IntPtr contentlen) - { - return ((Utf8Marshaler)(Utf8Marshaler.GetInstance(string.Empty))).NativeToString(content, contentlen.ToInt32()); - } - - internal int PrintCallBack(IntPtr data, GitDiffDelta delta, GitDiffRange range, GitDiffLineOrigin lineorigin, IntPtr content, IntPtr contentlen) - { - string formattedoutput = NativeToString(content, contentlen); - - switch (lineorigin) - { - case GitDiffLineOrigin.GIT_DIFF_LINE_FILE_HDR: - currentFilePath = (string)marshaler.MarshalNativeToManaged(delta.NewFile.Path); - break; - } - - filesChanges[currentFilePath].PatchBuilder.Append(formattedoutput); - fullPatchBuilder.Append(formattedoutput); - - return 0; - } - } -} diff --git a/LibGit2Sharp/TreeChanges.cs b/LibGit2Sharp/TreeChanges.cs index 3bf3a7c0..b4b3126f 100644 --- a/LibGit2Sharp/TreeChanges.cs +++ b/LibGit2Sharp/TreeChanges.cs @@ -23,7 +23,8 @@ namespace LibGit2Sharp 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() { @@ -37,30 +38,39 @@ namespace LibGit2Sharp 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) @@ -75,13 +85,6 @@ namespace LibGit2Sharp 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); @@ -175,7 +178,7 @@ namespace LibGit2Sharp /// </summary> public string Patch { - get { return patch; } + get { return fullPatchBuilder.ToString(); } } } } |