From 7508573882292d31c8cfc6f7e7effe64f7cb7004 Mon Sep 17 00:00:00 2001 From: nulltoken Date: Fri, 20 May 2011 15:26:46 +0200 Subject: [PATCH 01/15] Fix some issues pinpointed by Code Analysis --- LibGit2Sharp/CommitCollection.cs | 3 ++- LibGit2Sharp/CommitCollectionExtensions.cs | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/LibGit2Sharp/CommitCollection.cs b/LibGit2Sharp/CommitCollection.cs index 7be815047..e59337d3e 100644 --- a/LibGit2Sharp/CommitCollection.cs +++ b/LibGit2Sharp/CommitCollection.cs @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Globalization; using LibGit2Sharp.Core; namespace LibGit2Sharp @@ -116,7 +117,7 @@ public CommitCollection StartingAt(string shaOrReferenceName) if (gitObj == null) // TODO: Should we check the type? Git-log allows TagAnnotation oid as parameter. But what about Blobs and Trees? { - throw new ArgumentException(string.Format("No valid object identified as '{0}' has been found in the repository.", shaOrReferenceName), "shaOrReferenceName"); + throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "No valid object identified as '{0}' has been found in the repository.", shaOrReferenceName), "shaOrReferenceName"); } return new CommitCollection(repo, sortOptions) { pushedObjectId = gitObj.Id }; diff --git a/LibGit2Sharp/CommitCollectionExtensions.cs b/LibGit2Sharp/CommitCollectionExtensions.cs index cde489a61..c0e5a6db8 100644 --- a/LibGit2Sharp/CommitCollectionExtensions.cs +++ b/LibGit2Sharp/CommitCollectionExtensions.cs @@ -1,4 +1,5 @@ using System; +using System.Globalization; using LibGit2Sharp.Core; namespace LibGit2Sharp @@ -19,7 +20,7 @@ public static CommitCollection StartingAt(this CommitCollection commitCollection if (commit == null) { - throw new ArgumentException(string.Format("No valid object identified as '{0}' has been found in the repository.", branch.CanonicalName), "branch"); + throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "No valid object identified as '{0}' has been found in the repository.", branch.CanonicalName), "branch"); } return commitCollection.StartingAt(commit.Sha); From 2a18c09b41dd594fecf23ff5aad42cdc8fce75cf Mon Sep 17 00:00:00 2001 From: nulltoken Date: Fri, 20 May 2011 17:08:43 +0200 Subject: [PATCH 02/15] Turn NativeMethods and UnSafeNativeMethods types into static ones --- LibGit2Sharp/Core/NativeMethods.cs | 4 +--- LibGit2Sharp/Core/UnSafeNativeMethods.cs | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/LibGit2Sharp/Core/NativeMethods.cs b/LibGit2Sharp/Core/NativeMethods.cs index 5ac4ff051..4344ec974 100644 --- a/LibGit2Sharp/Core/NativeMethods.cs +++ b/LibGit2Sharp/Core/NativeMethods.cs @@ -3,12 +3,10 @@ namespace LibGit2Sharp.Core { - internal class NativeMethods + internal static class NativeMethods { const string libgit2 = "git2.dll"; - private NativeMethods() { } - [DllImport(libgit2)] public static extern IntPtr git_blob_rawcontent(IntPtr blob); diff --git a/LibGit2Sharp/Core/UnSafeNativeMethods.cs b/LibGit2Sharp/Core/UnSafeNativeMethods.cs index 22c9ccf5a..c6d6c79de 100644 --- a/LibGit2Sharp/Core/UnSafeNativeMethods.cs +++ b/LibGit2Sharp/Core/UnSafeNativeMethods.cs @@ -3,12 +3,10 @@ namespace LibGit2Sharp.Core { - internal unsafe class UnSafeNativeMethods + internal static unsafe class UnSafeNativeMethods { private const string libgit2 = "git2.dll"; - private UnSafeNativeMethods() { } - [DllImport(libgit2)] public static extern int git_reference_listall(git_strarray* array, RepositorySafeHandle repo, GitReferenceType flags); From 49410b0afecfdd963175c75104787b26f3cda59a Mon Sep 17 00:00:00 2001 From: nulltoken Date: Fri, 20 May 2011 21:36:00 +0200 Subject: [PATCH 03/15] Fix an IIS related interop issue Credit goes to @yysun for having spotted this. Special thanks to @tclem for his wizardry. --- LibGit2Sharp/Commit.cs | 4 ++-- LibGit2Sharp/Core/Ensure.cs | 2 +- LibGit2Sharp/Core/IntPtrExtensions.cs | 13 ++++++++++++ LibGit2Sharp/Core/NativeMethods.cs | 30 +++++++++------------------ LibGit2Sharp/LibGit2Sharp.csproj | 1 + LibGit2Sharp/Reference.cs | 6 +++--- LibGit2Sharp/Repository.cs | 6 +++--- LibGit2Sharp/TagAnnotation.cs | 4 ++-- LibGit2Sharp/TreeEntry.cs | 2 +- 9 files changed, 36 insertions(+), 32 deletions(-) create mode 100644 LibGit2Sharp/Core/IntPtrExtensions.cs diff --git a/LibGit2Sharp/Commit.cs b/LibGit2Sharp/Commit.cs index a67ff6efa..b9368ec69 100644 --- a/LibGit2Sharp/Commit.cs +++ b/LibGit2Sharp/Commit.cs @@ -89,8 +89,8 @@ internal static Commit BuildFromPtr(IntPtr obj, ObjectId id, Repository repo) return new Commit(id, treeId, repo) { - Message = NativeMethods.git_commit_message(obj), - MessageShort = NativeMethods.git_commit_message_short(obj), + Message = NativeMethods.git_commit_message(obj).MarshallAsString(), + MessageShort = NativeMethods.git_commit_message_short(obj).MarshallAsString(), Author = new Signature(NativeMethods.git_commit_author(obj)), Committer = new Signature(NativeMethods.git_commit_committer(obj)), }; diff --git a/LibGit2Sharp/Core/Ensure.cs b/LibGit2Sharp/Core/Ensure.cs index 4cbc60991..e0813fd4b 100644 --- a/LibGit2Sharp/Core/Ensure.cs +++ b/LibGit2Sharp/Core/Ensure.cs @@ -47,7 +47,7 @@ public static void Success(int result) return; } - string errorMessage = NativeMethods.git_lasterror(); + string errorMessage = NativeMethods.git_lasterror().MarshallAsString(); throw new ApplicationException( String.Format(CultureInfo.InvariantCulture, "An error was raised by libgit2. Error code = {0} ({1}).{2}{3}", Enum.GetName(typeof(GitErrorCode), result), result, Environment.NewLine, errorMessage)); diff --git a/LibGit2Sharp/Core/IntPtrExtensions.cs b/LibGit2Sharp/Core/IntPtrExtensions.cs new file mode 100644 index 000000000..b6378b071 --- /dev/null +++ b/LibGit2Sharp/Core/IntPtrExtensions.cs @@ -0,0 +1,13 @@ +using System; +using System.Runtime.InteropServices; + +namespace LibGit2Sharp.Core +{ + internal static class IntPtrExtensions + { + public static string MarshallAsString(this IntPtr intPtr) + { + return Marshal.PtrToStringAnsi(intPtr); + } + } +} \ No newline at end of file diff --git a/LibGit2Sharp/Core/NativeMethods.cs b/LibGit2Sharp/Core/NativeMethods.cs index 4344ec974..c51e2d465 100644 --- a/LibGit2Sharp/Core/NativeMethods.cs +++ b/LibGit2Sharp/Core/NativeMethods.cs @@ -23,12 +23,10 @@ internal static class NativeMethods public static extern int git_commit_create_o(out GitOid oid, RepositorySafeHandle repo, string updateRef, IntPtr author, IntPtr committer, string message, IntPtr tree, int parentCount, IntPtr parents); [DllImport(libgit2)] - [return: MarshalAs(UnmanagedType.AnsiBStr)] - public static extern string git_commit_message(IntPtr commit); + public static extern IntPtr git_commit_message(IntPtr commit); [DllImport(libgit2)] - [return: MarshalAs(UnmanagedType.AnsiBStr)] - public static extern string git_commit_message_short(IntPtr commit); + public static extern IntPtr git_commit_message_short(IntPtr commit); [DllImport(libgit2)] public static extern int git_commit_parent(out IntPtr parentCommit, IntPtr commit, uint n); @@ -61,8 +59,7 @@ internal static class NativeMethods public static extern int git_index_open_inrepo(out IndexSafeHandle index, RepositorySafeHandle repo); [DllImport(libgit2)] - [return: MarshalAs(UnmanagedType.AnsiBStr)] - public static extern string git_lasterror(); + public static extern IntPtr git_lasterror(); [DllImport(libgit2)] public static extern void git_object_close(IntPtr obj); @@ -111,8 +108,7 @@ internal static class NativeMethods public static extern int git_reference_lookup(out IntPtr reference, RepositorySafeHandle repo, string name); [DllImport(libgit2)] - [return: MarshalAs(UnmanagedType.AnsiBStr)] - public static extern string git_reference_name(IntPtr reference); + public static extern IntPtr git_reference_name(IntPtr reference); [DllImport(libgit2)] public static extern IntPtr git_reference_oid(IntPtr reference); @@ -133,8 +129,7 @@ internal static class NativeMethods public static extern int git_reference_set_target(IntPtr reference, string target); [DllImport(libgit2)] - [return: MarshalAs(UnmanagedType.AnsiBStr)] - public static extern string git_reference_target(IntPtr reference); + public static extern IntPtr git_reference_target(IntPtr reference); [DllImport(libgit2)] public static extern GitReferenceType git_reference_type(IntPtr reference); @@ -156,12 +151,10 @@ internal static class NativeMethods public static extern int git_repository_open(out RepositorySafeHandle repository, string path); [DllImport(libgit2)] - [return: MarshalAs(UnmanagedType.AnsiBStr)] - public static extern string git_repository_path(RepositorySafeHandle repository); + public static extern IntPtr git_repository_path(RepositorySafeHandle repository); [DllImport(libgit2)] - [return: MarshalAs(UnmanagedType.AnsiBStr)] - public static extern string git_repository_workdir(RepositorySafeHandle repository); + public static extern IntPtr git_repository_workdir(RepositorySafeHandle repository); [DllImport(libgit2)] public static extern void git_revwalk_free(IntPtr walker); @@ -197,12 +190,10 @@ internal static class NativeMethods public static extern int git_tag_delete(RepositorySafeHandle repo, string tagName); [DllImport(libgit2)] - [return: MarshalAs(UnmanagedType.AnsiBStr)] - public static extern string git_tag_message(IntPtr tag); + public static extern IntPtr git_tag_message(IntPtr tag); [DllImport(libgit2)] - [return: MarshalAs(UnmanagedType.AnsiBStr)] - public static extern string git_tag_name(IntPtr tag); + public static extern IntPtr git_tag_name(IntPtr tag); [DllImport(libgit2)] public static extern IntPtr git_tag_tagger(IntPtr tag); @@ -226,8 +217,7 @@ internal static class NativeMethods public static extern IntPtr git_tree_entry_id(IntPtr tree); [DllImport(libgit2)] - [return: MarshalAs(UnmanagedType.AnsiBStr)] - public static extern string git_tree_entry_name(IntPtr entry); + public static extern IntPtr git_tree_entry_name(IntPtr entry); [DllImport(libgit2)] public static extern int git_tree_entrycount(IntPtr tree); diff --git a/LibGit2Sharp/LibGit2Sharp.csproj b/LibGit2Sharp/LibGit2Sharp.csproj index 4579d277f..a98f3d749 100644 --- a/LibGit2Sharp/LibGit2Sharp.csproj +++ b/LibGit2Sharp/LibGit2Sharp.csproj @@ -58,6 +58,7 @@ + diff --git a/LibGit2Sharp/Reference.cs b/LibGit2Sharp/Reference.cs index 442f5367d..fd73026a3 100644 --- a/LibGit2Sharp/Reference.cs +++ b/LibGit2Sharp/Reference.cs @@ -26,8 +26,8 @@ internal static T BuildFromPtr(IntPtr ptr, Repository repo) where T : class return default(T); } - var name = NativeMethods.git_reference_name(ptr); - var type = NativeMethods.git_reference_type(ptr); + string name = NativeMethods.git_reference_name(ptr).MarshallAsString(); + GitReferenceType type = NativeMethods.git_reference_type(ptr); Reference reference; string targetIdentifier; @@ -36,7 +36,7 @@ internal static T BuildFromPtr(IntPtr ptr, Repository repo) where T : class { case GitReferenceType.Symbolic: IntPtr resolveRef; - targetIdentifier = NativeMethods.git_reference_target(ptr); + targetIdentifier = NativeMethods.git_reference_target(ptr).MarshallAsString(); int res = NativeMethods.git_reference_resolve(out resolveRef, ptr); if (res == (int) GitErrorCode.GIT_ENOTFOUND) diff --git a/LibGit2Sharp/Repository.cs b/LibGit2Sharp/Repository.cs index f1671e6f2..34131982d 100644 --- a/LibGit2Sharp/Repository.cs +++ b/LibGit2Sharp/Repository.cs @@ -27,8 +27,8 @@ public Repository(string path) var res = NativeMethods.git_repository_open(out handle, PosixPathHelper.ToPosix(path)); Ensure.Success(res); - string normalizedPath = NativeMethods.git_repository_path(handle); - string normalizedWorkDir = NativeMethods.git_repository_workdir(handle); + string normalizedPath = NativeMethods.git_repository_path(handle).MarshallAsString(); + string normalizedWorkDir = NativeMethods.git_repository_workdir(handle).MarshallAsString(); Info = new RepositoryInformation(this, normalizedPath, normalizedWorkDir, normalizedWorkDir == null); @@ -164,7 +164,7 @@ public static string Init(string path, bool bare = false) var res = NativeMethods.git_repository_init(out repo, PosixPathHelper.ToPosix(path), bare); Ensure.Success(res); - string normalizedPath = NativeMethods.git_repository_path(repo); + string normalizedPath = NativeMethods.git_repository_path(repo).MarshallAsString(); repo.Dispose(); return PosixPathHelper.ToNative(normalizedPath); diff --git a/LibGit2Sharp/TagAnnotation.cs b/LibGit2Sharp/TagAnnotation.cs index 005e7ccde..47280e3c0 100644 --- a/LibGit2Sharp/TagAnnotation.cs +++ b/LibGit2Sharp/TagAnnotation.cs @@ -41,8 +41,8 @@ internal static TagAnnotation BuildFromPtr(IntPtr obj, ObjectId id) return new TagAnnotation(id) { - Message = NativeMethods.git_tag_message(obj), - Name = NativeMethods.git_tag_name(obj), + Message = NativeMethods.git_tag_message(obj).MarshallAsString(), + Name = NativeMethods.git_tag_name(obj).MarshallAsString(), Tagger = new Signature(NativeMethods.git_tag_tagger(obj)), TargetId = new ObjectId(oid) }; diff --git a/LibGit2Sharp/TreeEntry.cs b/LibGit2Sharp/TreeEntry.cs index 72f42baaf..20eea0d67 100755 --- a/LibGit2Sharp/TreeEntry.cs +++ b/LibGit2Sharp/TreeEntry.cs @@ -22,7 +22,7 @@ public TreeEntry(IntPtr obj, ObjectId parentTreeId, Repository repo) targetOid = new ObjectId((GitOid)Marshal.PtrToStructure(gitTreeEntryId, typeof(GitOid))); Attributes = NativeMethods.git_tree_entry_attributes(obj); - Name = NativeMethods.git_tree_entry_name(obj); + Name = NativeMethods.git_tree_entry_name(obj).MarshallAsString(); } public int Attributes { get; private set; } From b283190928f8faf98ea1476acaf052ae9ea0ffc5 Mon Sep 17 00:00:00 2001 From: nulltoken Date: Sat, 21 May 2011 13:39:09 +0200 Subject: [PATCH 04/15] Minor ObjectId refactoring --- LibGit2Sharp/ObjectId.cs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/LibGit2Sharp/ObjectId.cs b/LibGit2Sharp/ObjectId.cs index d576a769a..a1368098a 100644 --- a/LibGit2Sharp/ObjectId.cs +++ b/LibGit2Sharp/ObjectId.cs @@ -31,13 +31,10 @@ internal ObjectId(GitOid oid) /// Initializes a new instance of the class. /// /// The byte array. - public ObjectId(byte[] rawId) + public ObjectId(byte[] rawId) : this(new GitOid{Id = rawId} ) { Ensure.ArgumentNotNull(rawId, "rawId"); Ensure.ArgumentConformsTo(rawId, b => b.Length == rawSize, "rawId"); - - oid = new GitOid { Id = rawId }; - Sha = Stringify(oid); } /// @@ -110,7 +107,7 @@ private static string Stringify(GitOid oid) { var hex = new byte[hexSize]; NativeMethods.git_oid_fmt(hex, ref oid); - return Encoding.UTF8.GetString(hex); + return Encoding.ASCII.GetString(hex); } /// From 4b46919bf55e60becbca4e23efc2ce6f943b1926 Mon Sep 17 00:00:00 2001 From: nulltoken Date: Sat, 21 May 2011 13:40:57 +0200 Subject: [PATCH 05/15] Improve performance of resolving of direct references --- LibGit2Sharp/DirectReference.cs | 29 ++++++++++++++++++++++++----- LibGit2Sharp/Reference.cs | 8 +++----- LibGit2Sharp/SymbolicReference.cs | 5 ----- 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/LibGit2Sharp/DirectReference.cs b/LibGit2Sharp/DirectReference.cs index cc79e5d7c..7a3feb9a7 100644 --- a/LibGit2Sharp/DirectReference.cs +++ b/LibGit2Sharp/DirectReference.cs @@ -1,18 +1,37 @@ -namespace LibGit2Sharp +using System; + +namespace LibGit2Sharp { /// /// A DirectReference points directly to a /// public class DirectReference : Reference { + private readonly Func targetResolver; + private bool resolved; + private GitObject target; + + internal DirectReference(Func targetResolver) + { + this.targetResolver = targetResolver; + } + /// /// Gets the target of this /// - public GitObject Target { get; internal set; } - - protected override object ProvideAdditionalEqualityComponent() + public GitObject Target { - return Target; + get + { + if (resolved) + { + return target; + } + + target = targetResolver(); + resolved = true; + return target; + } } /// diff --git a/LibGit2Sharp/Reference.cs b/LibGit2Sharp/Reference.cs index fd73026a3..8aad7494d 100644 --- a/LibGit2Sharp/Reference.cs +++ b/LibGit2Sharp/Reference.cs @@ -11,7 +11,7 @@ namespace LibGit2Sharp public abstract class Reference : IEquatable { private static readonly LambdaEqualityHelper equalityHelper = - new LambdaEqualityHelper(new Func[] { x => x.CanonicalName, x => x.ProvideAdditionalEqualityComponent() }); + new LambdaEqualityHelper(new Func[] { x => x.CanonicalName, x => x.TargetIdentifier }); /// /// Gets the full name of this reference. @@ -57,8 +57,8 @@ internal static T BuildFromPtr(IntPtr ptr, Repository repo) where T : class var targetId = new ObjectId(oid); targetIdentifier = targetId.Sha; - var target = repo.Lookup(targetId); - reference = new DirectReference { CanonicalName = name, Target = target, TargetIdentifier = targetIdentifier}; + var targetResolver = new Func(() => repo.Lookup(targetId)); + reference = new DirectReference(targetResolver) { CanonicalName = name, TargetIdentifier = targetIdentifier}; break; default: @@ -88,8 +88,6 @@ internal static T BuildFromPtr(IntPtr ptr, Repository repo) where T : class Enum.GetName(typeof (GitReferenceType), type))); } - protected abstract object ProvideAdditionalEqualityComponent(); - /// /// Recursively peels the target of the reference until a direct reference is encountered. /// diff --git a/LibGit2Sharp/SymbolicReference.cs b/LibGit2Sharp/SymbolicReference.cs index 0ddc5be67..e1a8290aa 100644 --- a/LibGit2Sharp/SymbolicReference.cs +++ b/LibGit2Sharp/SymbolicReference.cs @@ -10,11 +10,6 @@ public class SymbolicReference : Reference /// public Reference Target { get; internal set; } - protected override object ProvideAdditionalEqualityComponent() - { - return Target; - } - /// /// Recursively peels the target of the reference until a direct reference is encountered. /// From 187b1b369948dda5ed3691dbff25cf0803ece344 Mon Sep 17 00:00:00 2001 From: nulltoken Date: Sat, 21 May 2011 14:21:29 +0200 Subject: [PATCH 06/15] Remove duplicate test --- LibGit2Sharp.Tests/RepositoryFixture.cs | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/LibGit2Sharp.Tests/RepositoryFixture.cs b/LibGit2Sharp.Tests/RepositoryFixture.cs index 9a3c91dd3..acae761ce 100644 --- a/LibGit2Sharp.Tests/RepositoryFixture.cs +++ b/LibGit2Sharp.Tests/RepositoryFixture.cs @@ -233,22 +233,5 @@ public void CheckingForObjectExistenceWithBadParamsThrows() Assert.Throws(() => repo.HasObject(null)); } } - - [Test] - public void CheckForDetachedHeadOnNewRepo() - { - using (var scd = new SelfCleaningDirectory()) - { - var dir = Repository.Init(scd.DirectoryPath, true); - Path.IsPathRooted(dir).ShouldBeTrue(); - Directory.Exists(dir).ShouldBeTrue(); - - using (var repo = new Repository(dir)) - { - repo.Info.IsEmpty.ShouldBeTrue(); - repo.Info.IsHeadDetached.ShouldBeFalse(); - } - } - } } } \ No newline at end of file From fa2047e783d448346131ae0750b0b31a3390ef81 Mon Sep 17 00:00:00 2001 From: nulltoken Date: Sat, 21 May 2011 15:07:06 +0200 Subject: [PATCH 07/15] Prevent NullReferenceException from being thrown when accessing the CommitCollection of a newly initialized repository Should partially fix issue #30 --- LibGit2Sharp.Tests/RepositoryFixture.cs | 1 + LibGit2Sharp/CommitCollectionExtensions.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/LibGit2Sharp.Tests/RepositoryFixture.cs b/LibGit2Sharp.Tests/RepositoryFixture.cs index acae761ce..9f77ff0a2 100644 --- a/LibGit2Sharp.Tests/RepositoryFixture.cs +++ b/LibGit2Sharp.Tests/RepositoryFixture.cs @@ -57,6 +57,7 @@ private static void AssertInitializedRepository(Repository repo) repo.Info.IsHeadDetached.ShouldBeFalse(); repo.Head.TargetIdentifier.ShouldEqual("refs/heads/master"); repo.Head.ResolveToDirectReference().ShouldBeNull(); + Assert.Throws(() => { var c = repo.Commits; }); } [Test] diff --git a/LibGit2Sharp/CommitCollectionExtensions.cs b/LibGit2Sharp/CommitCollectionExtensions.cs index c0e5a6db8..55ee1efe1 100644 --- a/LibGit2Sharp/CommitCollectionExtensions.cs +++ b/LibGit2Sharp/CommitCollectionExtensions.cs @@ -36,7 +36,7 @@ public static CommitCollection StartingAt(this CommitCollection commitCollection { Ensure.ArgumentNotNull(reference, "reference"); - return commitCollection.StartingAt(reference.ResolveToDirectReference().CanonicalName); + return commitCollection.StartingAt(reference.CanonicalName); } } } From ed87a6b7d49b242d7258629a6316eafac1ad9c8c Mon Sep 17 00:00:00 2001 From: nulltoken Date: Sat, 21 May 2011 15:32:20 +0200 Subject: [PATCH 08/15] Improve the exception thrown when building a CommitCollection from an unknown sha or reference Should partially fix issue #30 --- LibGit2Sharp.Tests/CommitFixture.cs | 8 ++++---- LibGit2Sharp.Tests/RepositoryFixture.cs | 2 +- LibGit2Sharp/CommitCollection.cs | 2 +- LibGit2Sharp/CommitCollectionExtensions.cs | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/LibGit2Sharp.Tests/CommitFixture.cs b/LibGit2Sharp.Tests/CommitFixture.cs index e3effe9fc..27e566923 100644 --- a/LibGit2Sharp.Tests/CommitFixture.cs +++ b/LibGit2Sharp.Tests/CommitFixture.cs @@ -81,10 +81,10 @@ public void BuildingACommitCollectionFromUnknownShaOrInvalidReferenceThrows() { using (var repo = new Repository(Constants.TestRepoPath)) { - Assert.Throws(() => repo.Commits.StartingAt(Constants.UnknownSha)); - Assert.Throws(() => repo.Commits.StartingAt("refs/heads/deadbeef")); - Assert.Throws(() => repo.Commits.StartingAt(repo.Branches["deadbeef"])); - Assert.Throws(() => repo.Commits.StartingAt(repo.Refs["refs/heads/deadbeef"])); + Assert.Throws(() => repo.Commits.StartingAt(Constants.UnknownSha)); + Assert.Throws(() => repo.Commits.StartingAt("refs/heads/deadbeef")); + Assert.Throws(() => repo.Commits.StartingAt(repo.Branches["deadbeef"])); + Assert.Throws(() => repo.Commits.StartingAt(repo.Refs["refs/heads/deadbeef"])); } } diff --git a/LibGit2Sharp.Tests/RepositoryFixture.cs b/LibGit2Sharp.Tests/RepositoryFixture.cs index 9f77ff0a2..0b8d342de 100644 --- a/LibGit2Sharp.Tests/RepositoryFixture.cs +++ b/LibGit2Sharp.Tests/RepositoryFixture.cs @@ -57,7 +57,7 @@ private static void AssertInitializedRepository(Repository repo) repo.Info.IsHeadDetached.ShouldBeFalse(); repo.Head.TargetIdentifier.ShouldEqual("refs/heads/master"); repo.Head.ResolveToDirectReference().ShouldBeNull(); - Assert.Throws(() => { var c = repo.Commits; }); + Assert.Throws(() => { var c = repo.Commits; }); } [Test] diff --git a/LibGit2Sharp/CommitCollection.cs b/LibGit2Sharp/CommitCollection.cs index e59337d3e..54030cece 100644 --- a/LibGit2Sharp/CommitCollection.cs +++ b/LibGit2Sharp/CommitCollection.cs @@ -117,7 +117,7 @@ public CommitCollection StartingAt(string shaOrReferenceName) if (gitObj == null) // TODO: Should we check the type? Git-log allows TagAnnotation oid as parameter. But what about Blobs and Trees? { - throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "No valid object identified as '{0}' has been found in the repository.", shaOrReferenceName), "shaOrReferenceName"); + throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "No valid git object pointed at by '{0}' exists in the repository.", shaOrReferenceName)); } return new CommitCollection(repo, sortOptions) { pushedObjectId = gitObj.Id }; diff --git a/LibGit2Sharp/CommitCollectionExtensions.cs b/LibGit2Sharp/CommitCollectionExtensions.cs index 55ee1efe1..d88c219c8 100644 --- a/LibGit2Sharp/CommitCollectionExtensions.cs +++ b/LibGit2Sharp/CommitCollectionExtensions.cs @@ -20,7 +20,7 @@ public static CommitCollection StartingAt(this CommitCollection commitCollection if (commit == null) { - throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "No valid object identified as '{0}' has been found in the repository.", branch.CanonicalName), "branch"); + throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "No valid git object pointed at by '{0}' exists in the repository.", branch.CanonicalName)); } return commitCollection.StartingAt(commit.Sha); From 66bc35fa37c0e72a1bf71129dab8d0b299b43b41 Mon Sep 17 00:00:00 2001 From: nulltoken Date: Mon, 23 May 2011 16:57:10 +0200 Subject: [PATCH 09/15] Remove the Count property from the CommitCollection Commit 548b8d9 allows to rely on the Count() Linq extension without any performance penalty. --- LibGit2Sharp.Tests/CommitFixture.cs | 6 +++--- LibGit2Sharp/CommitCollection.cs | 16 ---------------- 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/LibGit2Sharp.Tests/CommitFixture.cs b/LibGit2Sharp.Tests/CommitFixture.cs index 27e566923..b396c4bec 100644 --- a/LibGit2Sharp.Tests/CommitFixture.cs +++ b/LibGit2Sharp.Tests/CommitFixture.cs @@ -18,7 +18,7 @@ public void CanCountCommits() { using (var repo = new Repository(Constants.TestRepoPath)) { - repo.Commits.Count.ShouldEqual(7); + repo.Commits.Count().ShouldEqual(7); } } @@ -28,11 +28,11 @@ public void CanCorrectlyCountCommitsWhenSwitchingToAnotherBranch() using (var repo = new Repository(Constants.TestRepoPath)) { repo.Branches.Checkout("test"); - repo.Commits.Count.ShouldEqual(2); + repo.Commits.Count().ShouldEqual(2); repo.Commits.First().Id.Sha.ShouldEqual("e90810b8df3e80c413d903f631643c716887138d"); repo.Branches.Checkout("master"); - repo.Commits.Count.ShouldEqual(7); + repo.Commits.Count().ShouldEqual(7); repo.Commits.First().Id.Sha.ShouldEqual("4c062a6361ae6959e06292c1fa5e2822d9c96345"); } } diff --git a/LibGit2Sharp/CommitCollection.cs b/LibGit2Sharp/CommitCollection.cs index 54030cece..c09688657 100644 --- a/LibGit2Sharp/CommitCollection.cs +++ b/LibGit2Sharp/CommitCollection.cs @@ -43,22 +43,6 @@ public Commit this[string sha] get { return repo.Lookup(sha); } } - /// - /// Gets the count of commits (This is a fast count that does not hydrate real commit objects) - /// - public int Count - { - get - { - var count = 0; - using (var enumerator = new CommitEnumerator(repo, pushedObjectId, sortOptions)) - { - while (enumerator.MoveNext()) count++; - } - return count; - } - } - /// /// Gets the current sorting strategy applied when enumerating the collection /// From da2a2c7b76a8dd7f4c660ba0932211d28ad372c7 Mon Sep 17 00:00:00 2001 From: nulltoken Date: Mon, 23 May 2011 21:05:24 +0200 Subject: [PATCH 10/15] Change API to query the history of commits --- LibGit2Sharp.Tests/CommitFixture.cs | 34 ++++++------------ LibGit2Sharp/Branch.cs | 13 +++++-- LibGit2Sharp/CommitCollection.cs | 37 ++++++------------- LibGit2Sharp/CommitCollectionExtensions.cs | 42 ---------------------- LibGit2Sharp/Filter.cs | 34 ++++++++++++++++++ LibGit2Sharp/ICommitCollection.cs | 12 +++++++ LibGit2Sharp/LibGit2Sharp.csproj | 3 +- LibGit2Sharp/Reference.cs | 9 +++++ LibGit2Sharp/Repository.cs | 2 +- 9 files changed, 90 insertions(+), 96 deletions(-) delete mode 100644 LibGit2Sharp/CommitCollectionExtensions.cs create mode 100644 LibGit2Sharp/Filter.cs create mode 100644 LibGit2Sharp/ICommitCollection.cs diff --git a/LibGit2Sharp.Tests/CommitFixture.cs b/LibGit2Sharp.Tests/CommitFixture.cs index b396c4bec..c85888f14 100644 --- a/LibGit2Sharp.Tests/CommitFixture.cs +++ b/LibGit2Sharp.Tests/CommitFixture.cs @@ -67,7 +67,7 @@ public void CanEnumerateCommitsFromSha() int count = 0; using (var repo = new Repository(Constants.TestRepoPath)) { - foreach (var commit in repo.Commits.StartingAt("a4a7dce85cf63874e984719f4fdd239f5145052f")) + foreach (var commit in repo.Commits.QueryBy(new Filter { Since = "a4a7dce85cf63874e984719f4fdd239f5145052f" })) { commit.ShouldNotBeNull(); count++; @@ -81,10 +81,10 @@ public void BuildingACommitCollectionFromUnknownShaOrInvalidReferenceThrows() { using (var repo = new Repository(Constants.TestRepoPath)) { - Assert.Throws(() => repo.Commits.StartingAt(Constants.UnknownSha)); - Assert.Throws(() => repo.Commits.StartingAt("refs/heads/deadbeef")); - Assert.Throws(() => repo.Commits.StartingAt(repo.Branches["deadbeef"])); - Assert.Throws(() => repo.Commits.StartingAt(repo.Refs["refs/heads/deadbeef"])); + Assert.Throws(() => repo.Commits.QueryBy(new Filter { Since = Constants.UnknownSha})); + Assert.Throws(() => repo.Commits.QueryBy(new Filter { Since = "refs/heads/deadbeef"})); + Assert.Throws(() => repo.Commits.QueryBy(new Filter { Since = repo.Branches["deadbeef"]})); + Assert.Throws(() => repo.Commits.QueryBy(new Filter { Since = repo.Refs["refs/heads/deadbeef"] })); } } @@ -95,7 +95,7 @@ public void CanEnumerateCommitsWithReverseTimeSorting() int count = 0; using (var repo = new Repository(Constants.TestRepoPath)) { - foreach (var commit in repo.Commits.StartingAt("a4a7dce85cf63874e984719f4fdd239f5145052f").SortBy(GitSortOptions.Time | GitSortOptions.Reverse)) + foreach (var commit in repo.Commits.QueryBy(new Filter { Since = "a4a7dce85cf63874e984719f4fdd239f5145052f", SortBy = GitSortOptions.Time | GitSortOptions.Reverse })) { commit.ShouldNotBeNull(); commit.Sha.StartsWith(expectedShas[count]); @@ -110,7 +110,7 @@ public void CanEnumerateCommitsWithReverseTopoSorting() { using (var repo = new Repository(Constants.TestRepoPath)) { - var commits = repo.Commits.StartingAt("a4a7dce85cf63874e984719f4fdd239f5145052f").SortBy(GitSortOptions.Topological | GitSortOptions.Reverse).ToList(); + var commits = repo.Commits.QueryBy(new Filter { Since = "a4a7dce85cf63874e984719f4fdd239f5145052f", SortBy = GitSortOptions.Time | GitSortOptions.Reverse }).ToList(); foreach (var commit in commits) { commit.ShouldNotBeNull(); @@ -129,7 +129,7 @@ public void CanEnumerateCommitsWithTimeSorting() int count = 0; using (var repo = new Repository(Constants.TestRepoPath)) { - foreach (var commit in repo.Commits.StartingAt("a4a7dce85cf63874e984719f4fdd239f5145052f").SortBy(GitSortOptions.Time)) + foreach (var commit in repo.Commits.QueryBy(new Filter { Since = "a4a7dce85cf63874e984719f4fdd239f5145052f", SortBy = GitSortOptions.Time })) { commit.ShouldNotBeNull(); commit.Sha.StartsWith(expectedShas[count]); @@ -144,7 +144,7 @@ public void CanEnumerateCommitsWithTopoSorting() { using (var repo = new Repository(Constants.TestRepoPath)) { - var commits = repo.Commits.StartingAt("a4a7dce85cf63874e984719f4fdd239f5145052f").SortBy(GitSortOptions.Topological).ToList(); + var commits = repo.Commits.QueryBy(new Filter { Since = "a4a7dce85cf63874e984719f4fdd239f5145052f", SortBy = GitSortOptions.Topological }).ToList(); foreach (var commit in commits) { commit.ShouldNotBeNull(); @@ -157,18 +157,6 @@ public void CanEnumerateCommitsWithTopoSorting() } } - [Test] - public void CanLookupCommitAlt() - { - using (var repo = new Repository(Constants.TestRepoPath)) - { - var commit = repo.Commits[sha]; - commit.Message.ShouldEqual("testing\n"); - commit.MessageShort.ShouldEqual("testing"); - commit.Sha.ShouldEqual(sha); - } - } - [Test] public void CanLookupCommitGeneric() { @@ -226,7 +214,7 @@ public void PushingEmptyShaThrows() { using (var repo = new Repository(Constants.TestRepoPath)) { - Assert.Throws(() => repo.Commits.StartingAt(string.Empty)); + Assert.Throws(() => repo.Commits.QueryBy(new Filter{Since = string.Empty})); } } @@ -235,7 +223,7 @@ public void PushingNullShaThrows() { using (var repo = new Repository(Constants.TestRepoPath)) { - Assert.Throws(() => repo.Commits.StartingAt((string) null)); + Assert.Throws(() => repo.Commits.QueryBy(new Filter { Since = null })); } } } diff --git a/LibGit2Sharp/Branch.cs b/LibGit2Sharp/Branch.cs index 3918ee6b7..9b0eb9325 100644 --- a/LibGit2Sharp/Branch.cs +++ b/LibGit2Sharp/Branch.cs @@ -70,9 +70,9 @@ public bool IsCurrentRepositoryHead /// /// Gets the commits on this branch. (Starts walking from the References's target). /// - public CommitCollection Commits + public ICommitCollection Commits { - get { return repo.Commits.StartingAt(this); } + get { return repo.Commits.QueryBy(new Filter{Since = this}); } } #region IEquatable Members @@ -149,5 +149,14 @@ private static string ShortenName(string branchName) { return !Equals(left, right); } + + /// + /// Returns the , a representation of the current . + /// + /// The that represents the current . + public override string ToString() + { + return CanonicalName; + } } } \ No newline at end of file diff --git a/LibGit2Sharp/CommitCollection.cs b/LibGit2Sharp/CommitCollection.cs index c09688657..432771547 100644 --- a/LibGit2Sharp/CommitCollection.cs +++ b/LibGit2Sharp/CommitCollection.cs @@ -9,7 +9,7 @@ namespace LibGit2Sharp /// /// A collection of commits in a /// - public class CommitCollection : IEnumerable + public class CommitCollection : ICommitCollection { private readonly Repository repo; private ObjectId pushedObjectId; @@ -35,14 +35,6 @@ internal CommitCollection(Repository repo, GitSortOptions sortingStrategy) sortOptions = sortingStrategy; } - /// - /// Gets the with the specified sha. (This is identical to calling Lookup/(sha) on the repo) - /// - public Commit this[string sha] - { - get { return repo.Lookup(sha); } - } - /// /// Gets the current sorting strategy applied when enumerating the collection /// @@ -79,32 +71,23 @@ IEnumerator IEnumerable.GetEnumerator() #endregion /// - /// Sorts according to the specified strategy. - /// - /// The sorting strategy to be applied when enumerating the commits. - /// - public CommitCollection SortBy(GitSortOptions sortingStrategy) - { - return new CommitCollection(repo, sortingStrategy) { pushedObjectId = pushedObjectId }; - } - - /// - /// Starts enumeratoring the at the specified sha. + /// Returns the list of commits of the repository matching the specified . /// - /// The sha or reference canonical name to use. - /// - public CommitCollection StartingAt(string shaOrReferenceName) + /// The options used to control which commits will be returned. + /// A collection of commits, ready to be enumerated. + public ICommitCollection QueryBy(Filter filter) { - Ensure.ArgumentNotNullOrEmptyString(shaOrReferenceName, "shaOrReferenceName"); + Ensure.ArgumentNotNull(filter, "filter"); + Ensure.ArgumentNotNull(filter.Since, "filter.Since"); - GitObject gitObj = repo.Lookup(shaOrReferenceName); + GitObject gitObj = repo.Lookup(filter.Since.ToString()); if (gitObj == null) // TODO: Should we check the type? Git-log allows TagAnnotation oid as parameter. But what about Blobs and Trees? { - throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "No valid git object pointed at by '{0}' exists in the repository.", shaOrReferenceName)); + throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "No valid git object pointed at by '{0}' exists in the repository.", filter.Since)); } - return new CommitCollection(repo, sortOptions) { pushedObjectId = gitObj.Id }; + return new CommitCollection(repo, filter.SortBy) { pushedObjectId = gitObj.Id }; } #region Nested type: CommitEnumerator diff --git a/LibGit2Sharp/CommitCollectionExtensions.cs b/LibGit2Sharp/CommitCollectionExtensions.cs deleted file mode 100644 index d88c219c8..000000000 --- a/LibGit2Sharp/CommitCollectionExtensions.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Globalization; -using LibGit2Sharp.Core; - -namespace LibGit2Sharp -{ - public static class CommitCollectionExtensions - { - /// - /// Starts enumerating the at the specified branch. - /// - /// The commit collection to enumerate. - /// The branch. - /// - public static CommitCollection StartingAt(this CommitCollection commitCollection, Branch branch) - { - Ensure.ArgumentNotNull(branch, "branch"); - - Commit commit = branch.Tip; - - if (commit == null) - { - throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "No valid git object pointed at by '{0}' exists in the repository.", branch.CanonicalName)); - } - - return commitCollection.StartingAt(commit.Sha); - } - - /// - /// Starts enumerating the at the specified reference. - /// - /// The commit collection to enumerate. - /// The reference. - /// - public static CommitCollection StartingAt(this CommitCollection commitCollection, Reference reference) - { - Ensure.ArgumentNotNull(reference, "reference"); - - return commitCollection.StartingAt(reference.CanonicalName); - } - } -} diff --git a/LibGit2Sharp/Filter.cs b/LibGit2Sharp/Filter.cs new file mode 100644 index 000000000..c1e6c5ecf --- /dev/null +++ b/LibGit2Sharp/Filter.cs @@ -0,0 +1,34 @@ +namespace LibGit2Sharp +{ + /// + /// Options used to filter out the commits of the repository when querying its history. + /// + public class Filter + { + /// + /// Initializes a new instance of . + /// + public Filter() + { + SortBy = GitSortOptions.Time; + Since = "HEAD"; + } + + /// + /// The ordering stragtegy to use. + /// + /// By default, the commits are shown in reverse chronological order. + /// + /// + public GitSortOptions SortBy { get; set; } + + /// + /// The pointer to the commit to consider as a starting point. + /// + /// Can be either a containing the sha or reference canonical name to use, a or a . + /// By default, the will be used as boundary. + /// + /// + public object Since { get; set; } + } +} \ No newline at end of file diff --git a/LibGit2Sharp/ICommitCollection.cs b/LibGit2Sharp/ICommitCollection.cs new file mode 100644 index 000000000..19f8bd7b3 --- /dev/null +++ b/LibGit2Sharp/ICommitCollection.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; + +namespace LibGit2Sharp +{ + public interface ICommitCollection : IEnumerable + { + /// + /// Gets the current sorting strategy applied when enumerating the collection + /// + GitSortOptions SortedBy { get; } + } +} \ No newline at end of file diff --git a/LibGit2Sharp/LibGit2Sharp.csproj b/LibGit2Sharp/LibGit2Sharp.csproj index a98f3d749..59c8d7a33 100644 --- a/LibGit2Sharp/LibGit2Sharp.csproj +++ b/LibGit2Sharp/LibGit2Sharp.csproj @@ -47,7 +47,6 @@ - @@ -77,10 +76,12 @@ + + diff --git a/LibGit2Sharp/Reference.cs b/LibGit2Sharp/Reference.cs index 8aad7494d..387df15e5 100644 --- a/LibGit2Sharp/Reference.cs +++ b/LibGit2Sharp/Reference.cs @@ -153,5 +153,14 @@ public override int GetHashCode() { return !Equals(left, right); } + + /// + /// Returns the , a representation of the current . + /// + /// The that represents the current . + public override string ToString() + { + return CanonicalName; + } } } \ No newline at end of file diff --git a/LibGit2Sharp/Repository.cs b/LibGit2Sharp/Repository.cs index 34131982d..1f247cfc8 100644 --- a/LibGit2Sharp/Repository.cs +++ b/LibGit2Sharp/Repository.cs @@ -77,7 +77,7 @@ public ReferenceCollection Refs /// public CommitCollection Commits { - get { return commits.StartingAt(Head); } + get { return (CommitCollection)commits.QueryBy(new Filter{Since = Head}); } } /// From 3034aa9bba50d68b21183a2cb812790e99232192 Mon Sep 17 00:00:00 2001 From: nulltoken Date: Tue, 24 May 2011 11:42:33 +0200 Subject: [PATCH 11/15] Allow to query the commit history of an empty repository Fix issue #30. --- LibGit2Sharp.Tests/CommitFixture.cs | 31 +++++-------- LibGit2Sharp.Tests/RepositoryFixture.cs | 7 ++- LibGit2Sharp/CommitCollection.cs | 16 ++++++- LibGit2Sharp/EmptyCommitCollection.cs | 53 ++++++++++++++++++++++ LibGit2Sharp/ICommitCollection.cs | 2 +- LibGit2Sharp/IQueryableCommitCollection.cs | 12 +++++ LibGit2Sharp/LibGit2Sharp.csproj | 2 + LibGit2Sharp/Repository.cs | 8 ++-- 8 files changed, 104 insertions(+), 27 deletions(-) create mode 100644 LibGit2Sharp/EmptyCommitCollection.cs create mode 100644 LibGit2Sharp/IQueryableCommitCollection.cs diff --git a/LibGit2Sharp.Tests/CommitFixture.cs b/LibGit2Sharp.Tests/CommitFixture.cs index c85888f14..4e593d47c 100644 --- a/LibGit2Sharp.Tests/CommitFixture.cs +++ b/LibGit2Sharp.Tests/CommitFixture.cs @@ -77,7 +77,7 @@ public void CanEnumerateCommitsFromSha() } [Test] - public void BuildingACommitCollectionFromUnknownShaOrInvalidReferenceThrows() + public void QueryingTheCommitHistoryWithUnknownShaOrInvalidReferenceThrows() { using (var repo = new Repository(Constants.TestRepoPath)) { @@ -88,6 +88,17 @@ public void BuildingACommitCollectionFromUnknownShaOrInvalidReferenceThrows() } } + [Test] + public void QueryingTheCommitHistoryWithBadParamsThrows() + { + using (var repo = new Repository(Constants.TestRepoPath)) + { + Assert.Throws(() => repo.Commits.QueryBy(new Filter { Since = string.Empty })); + Assert.Throws(() => repo.Commits.QueryBy(new Filter { Since = null })); + Assert.Throws(() => repo.Commits.QueryBy(null)); + } + } + [Test] public void CanEnumerateCommitsWithReverseTimeSorting() { @@ -208,23 +219,5 @@ public void CanReadCommitWithMultipleParents() commit.Parents.Count().ShouldEqual(2); } } - - [Test] - public void PushingEmptyShaThrows() - { - using (var repo = new Repository(Constants.TestRepoPath)) - { - Assert.Throws(() => repo.Commits.QueryBy(new Filter{Since = string.Empty})); - } - } - - [Test] - public void PushingNullShaThrows() - { - using (var repo = new Repository(Constants.TestRepoPath)) - { - Assert.Throws(() => repo.Commits.QueryBy(new Filter { Since = null })); - } - } } } \ No newline at end of file diff --git a/LibGit2Sharp.Tests/RepositoryFixture.cs b/LibGit2Sharp.Tests/RepositoryFixture.cs index 0b8d342de..760b02061 100644 --- a/LibGit2Sharp.Tests/RepositoryFixture.cs +++ b/LibGit2Sharp.Tests/RepositoryFixture.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Linq; using LibGit2Sharp.Tests.TestHelpers; using NUnit.Framework; @@ -57,7 +58,11 @@ private static void AssertInitializedRepository(Repository repo) repo.Info.IsHeadDetached.ShouldBeFalse(); repo.Head.TargetIdentifier.ShouldEqual("refs/heads/master"); repo.Head.ResolveToDirectReference().ShouldBeNull(); - Assert.Throws(() => { var c = repo.Commits; }); + + repo.Commits.Count().ShouldEqual(0); + repo.Commits.QueryBy(new Filter { Since = repo.Head }).Count().ShouldEqual(0); + repo.Commits.QueryBy(new Filter { Since = "HEAD" }).Count().ShouldEqual(0); + repo.Commits.QueryBy(new Filter { Since = "refs/heads/master" }).Count().ShouldEqual(0); } [Test] diff --git a/LibGit2Sharp/CommitCollection.cs b/LibGit2Sharp/CommitCollection.cs index 432771547..3beb3c6ae 100644 --- a/LibGit2Sharp/CommitCollection.cs +++ b/LibGit2Sharp/CommitCollection.cs @@ -9,7 +9,7 @@ namespace LibGit2Sharp /// /// A collection of commits in a /// - public class CommitCollection : ICommitCollection + public class CommitCollection : IQueryableCommitCollection { private readonly Repository repo; private ObjectId pushedObjectId; @@ -80,7 +80,14 @@ public ICommitCollection QueryBy(Filter filter) Ensure.ArgumentNotNull(filter, "filter"); Ensure.ArgumentNotNull(filter.Since, "filter.Since"); - GitObject gitObj = repo.Lookup(filter.Since.ToString()); + string shaOrRefName = filter.Since.ToString(); + + if ((repo.Info.IsEmpty) && PointsAtTheHead(shaOrRefName)) + { + return new EmptyCommitCollection(filter.SortBy); + } + + GitObject gitObj = repo.Lookup(shaOrRefName); if (gitObj == null) // TODO: Should we check the type? Git-log allows TagAnnotation oid as parameter. But what about Blobs and Trees? { @@ -90,6 +97,11 @@ public ICommitCollection QueryBy(Filter filter) return new CommitCollection(repo, filter.SortBy) { pushedObjectId = gitObj.Id }; } + private static bool PointsAtTheHead(string shaOrRefName) + { + return ("HEAD".Equals(shaOrRefName, StringComparison.Ordinal) || "refs/heads/master".Equals(shaOrRefName, StringComparison.Ordinal)); + } + #region Nested type: CommitEnumerator private class CommitEnumerator : IEnumerator diff --git a/LibGit2Sharp/EmptyCommitCollection.cs b/LibGit2Sharp/EmptyCommitCollection.cs new file mode 100644 index 000000000..31d5537b4 --- /dev/null +++ b/LibGit2Sharp/EmptyCommitCollection.cs @@ -0,0 +1,53 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; + +namespace LibGit2Sharp +{ + internal class EmptyCommitCollection : IQueryableCommitCollection + { + internal EmptyCommitCollection(GitSortOptions sortedBy) + { + SortedBy = sortedBy; + } + + /// + /// Returns an enumerator that iterates through the collection. + /// + /// + /// A that can be used to iterate through the collection. + /// + /// 1 + public IEnumerator GetEnumerator() + { + return Enumerable.Empty().GetEnumerator(); + } + + /// + /// Returns the list of commits of the repository matching the specified . + /// + /// The options used to control which commits will be returned. + /// A collection of commits, ready to be enumerated. + public ICommitCollection QueryBy(Filter filter) + { + return new EmptyCommitCollection(filter.SortBy); + } + + /// + /// Returns an enumerator that iterates through a collection. + /// + /// + /// An object that can be used to iterate through the collection. + /// + /// 2 + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + /// + /// Gets the current sorting strategy applied when enumerating the collection. + /// + public GitSortOptions SortedBy { get; private set; } + } +} \ No newline at end of file diff --git a/LibGit2Sharp/ICommitCollection.cs b/LibGit2Sharp/ICommitCollection.cs index 19f8bd7b3..2d8633a07 100644 --- a/LibGit2Sharp/ICommitCollection.cs +++ b/LibGit2Sharp/ICommitCollection.cs @@ -5,7 +5,7 @@ namespace LibGit2Sharp public interface ICommitCollection : IEnumerable { /// - /// Gets the current sorting strategy applied when enumerating the collection + /// Gets the current sorting strategy applied when enumerating the collection. /// GitSortOptions SortedBy { get; } } diff --git a/LibGit2Sharp/IQueryableCommitCollection.cs b/LibGit2Sharp/IQueryableCommitCollection.cs new file mode 100644 index 000000000..e4329b285 --- /dev/null +++ b/LibGit2Sharp/IQueryableCommitCollection.cs @@ -0,0 +1,12 @@ +namespace LibGit2Sharp +{ + public interface IQueryableCommitCollection : ICommitCollection + { + /// + /// Returns the list of commits of the repository matching the specified . + /// + /// The options used to control which commits will be returned. + /// A collection of commits, ready to be enumerated. + ICommitCollection QueryBy(Filter filter); + } +} \ No newline at end of file diff --git a/LibGit2Sharp/LibGit2Sharp.csproj b/LibGit2Sharp/LibGit2Sharp.csproj index 59c8d7a33..07eb65fa8 100644 --- a/LibGit2Sharp/LibGit2Sharp.csproj +++ b/LibGit2Sharp/LibGit2Sharp.csproj @@ -71,6 +71,7 @@ + @@ -82,6 +83,7 @@ + diff --git a/LibGit2Sharp/Repository.cs b/LibGit2Sharp/Repository.cs index 1f247cfc8..bd6f88496 100644 --- a/LibGit2Sharp/Repository.cs +++ b/LibGit2Sharp/Repository.cs @@ -49,7 +49,7 @@ internal RepositorySafeHandle Handle /// Shortcut to return the reference to HEAD /// /// - + public Reference Head { get { return Refs["HEAD"]; } @@ -75,9 +75,9 @@ public ReferenceCollection Refs /// Lookup and enumerate commits in the repository. /// Iterating this collection directly starts walking from the HEAD. /// - public CommitCollection Commits + public IQueryableCommitCollection Commits { - get { return (CommitCollection)commits.QueryBy(new Filter{Since = Head}); } + get { return (IQueryableCommitCollection)commits.QueryBy(new Filter { Since = Head }); } } /// @@ -219,7 +219,7 @@ public GitObject Lookup(string shaOrReferenceName, GitObjectType type = GitObjec private static bool IsReferencePeelable(Reference reference) { - return reference != null && ((reference is DirectReference) ||(reference is SymbolicReference && ((SymbolicReference)reference).Target != null)); + return reference != null && ((reference is DirectReference) || (reference is SymbolicReference && ((SymbolicReference)reference).Target != null)); } } } \ No newline at end of file From 1125c041af786ed133b886ba7ffb0a82b63c3203 Mon Sep 17 00:00:00 2001 From: nulltoken Date: Tue, 24 May 2011 15:13:49 +0200 Subject: [PATCH 12/15] Allow to query the commit history by specifying two named commits as boundaries --- LibGit2Sharp.Tests/CommitFixture.cs | 12 ++++++++ LibGit2Sharp/CommitCollection.cs | 48 +++++++++++++++++++++++------ LibGit2Sharp/Core/NativeMethods.cs | 3 ++ LibGit2Sharp/Filter.cs | 9 ++++++ 4 files changed, 62 insertions(+), 10 deletions(-) diff --git a/LibGit2Sharp.Tests/CommitFixture.cs b/LibGit2Sharp.Tests/CommitFixture.cs index 4e593d47c..b275cc275 100644 --- a/LibGit2Sharp.Tests/CommitFixture.cs +++ b/LibGit2Sharp.Tests/CommitFixture.cs @@ -168,6 +168,18 @@ public void CanEnumerateCommitsWithTopoSorting() } } + [Test] + public void CanEnumerateUsingTwoCommitsAsBoundaries() + { + using (var repo = new Repository(Constants.TestRepoPath)) + { + var commits = repo.Commits.QueryBy(new Filter { Since = "refs/heads/br2", Until = "refs/heads/packed-test" }); + + IEnumerable abbrevShas = commits.Select(c => c.Id.Sha.Substring(0, 7)).ToArray(); + CollectionAssert.AreEquivalent(new[] { "a4a7dce", "c47800c", "9fd738e" }, abbrevShas); + } + } + [Test] public void CanLookupCommitGeneric() { diff --git a/LibGit2Sharp/CommitCollection.cs b/LibGit2Sharp/CommitCollection.cs index 3beb3c6ae..35d3be7a4 100644 --- a/LibGit2Sharp/CommitCollection.cs +++ b/LibGit2Sharp/CommitCollection.cs @@ -13,6 +13,7 @@ public class CommitCollection : IQueryableCommitCollection { private readonly Repository repo; private ObjectId pushedObjectId; + private ObjectId hiddenObjectId; private readonly GitSortOptions sortOptions; /// @@ -53,10 +54,10 @@ public IEnumerator GetEnumerator() { if (pushedObjectId == null) { - throw new NotImplementedException(); + throw new InvalidOperationException(); } - return new CommitEnumerator(repo, pushedObjectId, sortOptions); + return new CommitEnumerator(repo, pushedObjectId, hiddenObjectId, sortOptions); } /// @@ -80,21 +81,35 @@ public ICommitCollection QueryBy(Filter filter) Ensure.ArgumentNotNull(filter, "filter"); Ensure.ArgumentNotNull(filter.Since, "filter.Since"); - string shaOrRefName = filter.Since.ToString(); + string sinceIdentifier = filter.Since.ToString(); - if ((repo.Info.IsEmpty) && PointsAtTheHead(shaOrRefName)) + if ((repo.Info.IsEmpty) && PointsAtTheHead(sinceIdentifier)) { return new EmptyCommitCollection(filter.SortBy); - } + } + + ObjectId sinceObjectId = RetrieveCommitId(sinceIdentifier); + ObjectId untilObjectId = null; + + if (filter.Until != null) + { + untilObjectId = RetrieveCommitId(filter.Until.ToString()); + } + + return new CommitCollection(repo, filter.SortBy) { pushedObjectId = sinceObjectId, hiddenObjectId = untilObjectId}; + } - GitObject gitObj = repo.Lookup(shaOrRefName); + private ObjectId RetrieveCommitId(string shaOrReferenceName) + { + GitObject gitObj = repo.Lookup(shaOrReferenceName); - if (gitObj == null) // TODO: Should we check the type? Git-log allows TagAnnotation oid as parameter. But what about Blobs and Trees? + // TODO: Should we check the type? Git-log allows TagAnnotation oid as parameter. But what about Blobs and Trees? + if (gitObj == null) { - throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "No valid git object pointed at by '{0}' exists in the repository.", filter.Since)); + throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "No valid git object pointed at by '{0}' exists in the repository.", shaOrReferenceName)); } - return new CommitCollection(repo, filter.SortBy) { pushedObjectId = gitObj.Id }; + return gitObj.Id; } private static bool PointsAtTheHead(string shaOrRefName) @@ -110,7 +125,7 @@ private class CommitEnumerator : IEnumerator private readonly RevWalkerSafeHandle handle; private ObjectId currentOid; - public CommitEnumerator(Repository repo, ObjectId pushedOid, GitSortOptions sortingStrategy) + public CommitEnumerator(Repository repo, ObjectId pushedOid, ObjectId hiddenOid, GitSortOptions sortingStrategy) { this.repo = repo; int res = NativeMethods.git_revwalk_new(out handle, repo.Handle); @@ -118,6 +133,7 @@ public CommitEnumerator(Repository repo, ObjectId pushedOid, GitSortOptions sort Sort(sortingStrategy); Push(pushedOid); + Hide(hiddenOid); } #region IEnumerator Members @@ -187,6 +203,18 @@ private void Push(ObjectId pushedOid) Ensure.Success(res); } + private void Hide(ObjectId hiddenOid) + { + if (hiddenOid == null) + { + return; + } + + var oid = hiddenOid.Oid; + int res = NativeMethods.git_revwalk_hide(handle, ref oid); + Ensure.Success(res); + } + private void Sort(GitSortOptions options) { NativeMethods.git_revwalk_sorting(handle, options); diff --git a/LibGit2Sharp/Core/NativeMethods.cs b/LibGit2Sharp/Core/NativeMethods.cs index c51e2d465..794406c95 100644 --- a/LibGit2Sharp/Core/NativeMethods.cs +++ b/LibGit2Sharp/Core/NativeMethods.cs @@ -159,6 +159,9 @@ internal static class NativeMethods [DllImport(libgit2)] public static extern void git_revwalk_free(IntPtr walker); + [DllImport(libgit2)] + public static extern int git_revwalk_hide(RevWalkerSafeHandle walker, ref GitOid oid); + [DllImport(libgit2)] public static extern int git_revwalk_new(out RevWalkerSafeHandle walker, RepositorySafeHandle repo); diff --git a/LibGit2Sharp/Filter.cs b/LibGit2Sharp/Filter.cs index c1e6c5ecf..5985ddf30 100644 --- a/LibGit2Sharp/Filter.cs +++ b/LibGit2Sharp/Filter.cs @@ -30,5 +30,14 @@ public Filter() /// /// public object Since { get; set; } + + + /// + /// The pointer to the commit which will be excluded (along with its ancestors) from the enumeration. + /// + /// Can be either a containing the sha or reference canonical name to use, a or a . + /// + /// + public object Until { get; set; } } } \ No newline at end of file From 8fb8bfb5833ad02f419bf451430e6a9c26453572 Mon Sep 17 00:00:00 2001 From: nulltoken Date: Tue, 24 May 2011 17:17:17 +0200 Subject: [PATCH 13/15] Update backlog --- backlog.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/backlog.md b/backlog.md index 2f6074ce8..40f9479dd 100644 --- a/backlog.md +++ b/backlog.md @@ -4,8 +4,6 @@ - Build a LibGit2Sharp.Sample NuGet package - Publish source and PDBs at symbolsource.org (cf. http://blog.davidebbo.com/2011/04/easy-way-to-publish-nuget-packages-with.html and http://nuget.codeplex.com/discussions/257709) - - Bind git_revwalk_hide() as CommitCollection.Until() - - Fix FluentInterface .StartingAt() and .Until() in order to prevent .StartIngAt().StartingAt(), .Until().Until() and .Until().StartingAt() - Add to Epoch a DateTimeOffset extension method ToRelativeFormat() in order to show dates relative to the current time, e.g. "2 hours ago". (cf. https://github.com/git/git/blob/master/date.c#L89) - Add branch renaming (public Branch Move(string oldName, string newName, bool allowOverwrite = false)) - Turn duplicated strings "refs/xxx" into properties of a generic Constants helper type From 46ef68b9f89f8c6910435bbe02c8262907cdfe4a Mon Sep 17 00:00:00 2001 From: nulltoken Date: Tue, 24 May 2011 19:58:13 +0200 Subject: [PATCH 14/15] Update libgit2 binaries to 4191d52 --- Lib/git2-0.dll | Bin 0 -> 138752 bytes Lib/git2.dll | Bin 149504 -> 0 bytes LibGit2Sharp/Core/GitErrorCode.cs | 62 +++++++++++------------ LibGit2Sharp/Core/NativeMethods.cs | 2 +- LibGit2Sharp/Core/UnSafeNativeMethods.cs | 2 +- LibGit2Sharp/LibGit2Sharp.csproj | 8 +-- 6 files changed, 38 insertions(+), 36 deletions(-) create mode 100644 Lib/git2-0.dll delete mode 100644 Lib/git2.dll diff --git a/Lib/git2-0.dll b/Lib/git2-0.dll new file mode 100644 index 0000000000000000000000000000000000000000..82a3754bfa1612ad4d3d048750049da122850660 GIT binary patch literal 138752 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

gn8dlTeUr-MJ_iVLCUs9o<9I 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

0=4x_fWk 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 literal 0 HcmV?d00001 diff --git a/Lib/git2.dll b/Lib/git2.dll deleted file mode 100644 index 3b2f252ea0937f4964be959df5a939f34905448e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149504 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 /// Input was not a properly formatted Git object id. ///

- GIT_ENOTOID = (GIT_ERROR - 1), + GIT_ENOTOID = -2, /// /// Input does not exist in the scope searched. /// - GIT_ENOTFOUND = (GIT_ERROR - 2), + GIT_ENOTFOUND = -3, /// /// Not enough space available. /// - GIT_ENOMEM = (GIT_ERROR - 3), + GIT_ENOMEM = -4, /// /// Consult the OS error information. /// - GIT_EOSERR = (GIT_ERROR - 4), + GIT_EOSERR = -5, /// /// The specified object is of invalid type /// - GIT_EOBJTYPE = (GIT_ERROR - 5), - - /// - /// The specified object has its data corrupted - /// - GIT_EOBJCORRUPTED = (GIT_ERROR - 6), + GIT_EOBJTYPE = -6, /// /// The specified repository is invalid /// - GIT_ENOTAREPO = (GIT_ERROR - 7), + GIT_ENOTAREPO = -7, /// /// The object type is invalid or doesn't match /// - GIT_EINVALIDTYPE = (GIT_ERROR - 8), + GIT_EINVALIDTYPE = -8, /// /// The object cannot be written that because it's missing internal data /// - GIT_EMISSINGOBJDATA = (GIT_ERROR - 9), + GIT_EMISSINGOBJDATA = -9, /// /// The packfile for the ODB is corrupted /// - GIT_EPACKCORRUPTED = (GIT_ERROR - 10), + GIT_EPACKCORRUPTED = -10, /// /// Failed to adquire or release a file lock /// - GIT_EFLOCKFAIL = (GIT_ERROR - 11), + GIT_EFLOCKFAIL = -11, /// /// The Z library failed to inflate/deflate an object's data /// - GIT_EZLIB = (GIT_ERROR - 12), + GIT_EZLIB = -12, /// /// The queried object is currently busy /// - GIT_EBUSY = (GIT_ERROR - 13), + GIT_EBUSY = -13, /// /// The index file is not backed up by an existing repository /// - GIT_EBAREINDEX = (GIT_ERROR - 14), + GIT_EBAREINDEX = -14, /// /// The name of the reference is not valid /// - GIT_EINVALIDREFNAME = (GIT_ERROR - 15), + GIT_EINVALIDREFNAME = -15, /// /// The specified reference has its data corrupted /// - GIT_EREFCORRUPTED = (GIT_ERROR - 16), + GIT_EREFCORRUPTED = -16, /// /// The specified symbolic reference is too deeply nested /// - GIT_ETOONESTEDSYMREF = (GIT_ERROR - 17), + GIT_ETOONESTEDSYMREF = -17, /// /// The pack-refs file is either corrupted of its format is not currently supported /// - GIT_EPACKEDREFSCORRUPTED = (GIT_ERROR - 18), + GIT_EPACKEDREFSCORRUPTED = -18, /// /// The path is invalid /// - GIT_EINVALIDPATH = (GIT_ERROR - 19), + GIT_EINVALIDPATH = -19, /// /// The revision walker is empty; there are no more commits left to iterate /// - GIT_EREVWALKOVER = (GIT_ERROR - 20), + GIT_EREVWALKOVER = -20, /// /// The state of the reference is not valid /// - GIT_EINVALIDREFSTATE = (GIT_ERROR - 21), + GIT_EINVALIDREFSTATE = -21, /// /// This feature has not been implemented yet /// - GIT_ENOTIMPLEMENTED = (GIT_ERROR - 22), + GIT_ENOTIMPLEMENTED = -22, /// /// A reference with this name already exists /// - GIT_EEXISTS = (GIT_ERROR - 23), + GIT_EEXISTS = -23, /// /// The given integer literal is too large to be parsed /// - GIT_EOVERFLOW = (GIT_ERROR - 24), + GIT_EOVERFLOW = -24, /// /// The given literal is not a valid number /// - GIT_ENOTNUM = (GIT_ERROR - 25), + GIT_ENOTNUM = -25, /// /// Streaming error /// - GIT_ESTREAM = (GIT_ERROR - 26), + GIT_ESTREAM = -26, /// /// invalid arguments to function /// - GIT_EINVALIDARGS = (GIT_ERROR - 27), + GIT_EINVALIDARGS = -27, + + /// + /// The specified object has its data corrupted + /// + GIT_EOBJCORRUPTED = -28, } } \ No newline at end of file diff --git a/LibGit2Sharp/Core/NativeMethods.cs b/LibGit2Sharp/Core/NativeMethods.cs index 794406c95..7cddc630e 100644 --- a/LibGit2Sharp/Core/NativeMethods.cs +++ b/LibGit2Sharp/Core/NativeMethods.cs @@ -5,7 +5,7 @@ namespace LibGit2Sharp.Core { internal static class NativeMethods { - const string libgit2 = "git2.dll"; + const string libgit2 = "git2-0.dll"; [DllImport(libgit2)] public static extern IntPtr git_blob_rawcontent(IntPtr blob); diff --git a/LibGit2Sharp/Core/UnSafeNativeMethods.cs b/LibGit2Sharp/Core/UnSafeNativeMethods.cs index c6d6c79de..6c5b85753 100644 --- a/LibGit2Sharp/Core/UnSafeNativeMethods.cs +++ b/LibGit2Sharp/Core/UnSafeNativeMethods.cs @@ -5,7 +5,7 @@ namespace LibGit2Sharp.Core { internal static unsafe class UnSafeNativeMethods { - private const string libgit2 = "git2.dll"; + private const string libgit2 = "git2-0.dll"; [DllImport(libgit2)] public static extern int git_reference_listall(git_strarray* array, RepositorySafeHandle repo, GitReferenceType flags); diff --git a/LibGit2Sharp/LibGit2Sharp.csproj b/LibGit2Sharp/LibGit2Sharp.csproj index 07eb65fa8..66db0fbeb 100644 --- a/LibGit2Sharp/LibGit2Sharp.csproj +++ b/LibGit2Sharp/LibGit2Sharp.csproj @@ -103,11 +103,13 @@ - - git2.dll + + + + + git2-0.dll PreserveNewest - From 50ea96515538a952f869b6e913a5d6c45de477ee Mon Sep 17 00:00:00 2001 From: nulltoken Date: Tue, 24 May 2011 20:21:33 +0200 Subject: [PATCH 15/15] Release LibGit2Sharp v0.2.0 --- CHANGELOG.md | 10 +++++ CI-build.msbuild | 52 ++++++++++++------------- LibGit2Sharp/Properties/AssemblyInfo.cs | 4 +- nuget.package/LibGit2Sharp.nuspec | 4 +- 4 files changed, 40 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f8766572a..9f0ef9a82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # LibGit2Sharp releases +## v0.2.0 + + - [Fix] Fix Repository.Info.IsEmpty + - [Fix] Fix default CommitCollection sorting behavior + - [Fix] Fix creation of reference to prevent it from choking on corrupted ones + - [Fix] Fix interop issue in a IIS hosted application + - [Upd] Update CommitCollection API to query commits + - [Upd] Update CommitCollection API to query commits + - [Upd] Update libgit2 binaries to 4191d52 + ## v0.1.1 - [Fix] Fix NuGet packaging diff --git a/CI-build.msbuild b/CI-build.msbuild index db091172a..81be16c6d 100644 --- a/CI-build.msbuild +++ b/CI-build.msbuild @@ -1,35 +1,35 @@ - - - - - Release + + - $(MSBuildProjectDirectory)\LibGit2Sharp\obj\ - $(MSBuildProjectDirectory)\LibGit2Sharp.Tests\obj\ - $(MSBuildProjectDirectory)\build\ - - - - - - + + Release - - - - - - - $(MSBuildProjectDirectory)\LibGit2Sharp\obj\ + $(MSBuildProjectDirectory)\LibGit2Sharp.Tests\obj\ + $(MSBuildProjectDirectory)\build\ + + + + + + + + + + + + + + - - - - + + + - + \ No newline at end of file diff --git a/LibGit2Sharp/Properties/AssemblyInfo.cs b/LibGit2Sharp/Properties/AssemblyInfo.cs index 691ebf24d..3ef680950 100644 --- a/LibGit2Sharp/Properties/AssemblyInfo.cs +++ b/LibGit2Sharp/Properties/AssemblyInfo.cs @@ -41,5 +41,5 @@ // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.1.1")] -[assembly: AssemblyFileVersion("0.1.1")] \ No newline at end of file +[assembly: AssemblyVersion("0.2.0")] +[assembly: AssemblyFileVersion("0.2.0")] \ No newline at end of file diff --git a/nuget.package/LibGit2Sharp.nuspec b/nuget.package/LibGit2Sharp.nuspec index 49a6c85cb..1dc2dc502 100644 --- a/nuget.package/LibGit2Sharp.nuspec +++ b/nuget.package/LibGit2Sharp.nuspec @@ -2,7 +2,7 @@ LibGit2Sharp - 0.1.1 + 0.2.0 LibGit2Sharp contributors nulltoken https://github.com/libgit2/libgit2sharp/raw/master/LICENSE.md @@ -15,7 +15,7 @@ - +