Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2sharp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornulltoken <emeric.fermas@gmail.com>2012-05-21 14:19:21 +0400
committernulltoken <emeric.fermas@gmail.com>2012-05-21 16:08:15 +0400
commit6d1711ab61db1d67aaee27f779f86de43fed8cf2 (patch)
tree2fc1f91d70d6a7c65cbe5ff8c16d5d87788b2c32
parentbf8887551828b9ba5be6fbdbbf3ae970e568c357 (diff)
Simplify the implementation of the Tree to Tree comparison
-rw-r--r--LibGit2Sharp/LibGit2Sharp.csproj1
-rw-r--r--LibGit2Sharp/PatchPrinter.cs45
-rw-r--r--LibGit2Sharp/TreeChanges.cs45
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(); }
}
}
}