Skip to content

Update libgit2 to 2ca088b #1456

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jun 14, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

language: csharp
mono:
- latest
- 4.8.0

os:
- osx
Expand Down
4 changes: 2 additions & 2 deletions LibGit2Sharp.Tests/CheckoutFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ public void CanCheckoutAnExistingBranchByName(string branchName)

[Theory]
[InlineData("6dcf9bf", true, "6dcf9bf")]
[InlineData("refs/tags/lw", true, "refs/tags/lw")]
[InlineData("refs/tags/lw", true, "lw")]
[InlineData("HEAD~2", true, "HEAD~2")]
[InlineData("6dcf9bf", false, "6dcf9bf7541ee10456529833502442f385010c3d")]
[InlineData("refs/tags/lw", false, "e90810b8df3e80c413d903f631643c716887138d")]
Expand Down Expand Up @@ -748,7 +748,7 @@ public void CheckingOutABranchDoesNotAlterBinaryFiles()

[Theory]
[InlineData("a447ba2ca8")]
[InlineData("refs/tags/lw")]
[InlineData("lw")]
[InlineData("e90810^{}")]
public void CheckoutFromDetachedHead(string commitPointer)
{
Expand Down
53 changes: 31 additions & 22 deletions LibGit2Sharp.Tests/OdbBackendFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -90,37 +90,46 @@ public void CanGeneratePredictableObjectShasWithAProvidedBackend()
[Fact]
public void CanRetrieveObjectsThroughOddSizedShortShas()
{
string repoPath = InitNewRepository();

using (var repo = new Repository(repoPath))
try
{
var backend = new MockOdbBackend();
repo.ObjectDatabase.AddBackend(backend, priority: 5);
GlobalSettings.SetStrictHashVerification(false);

AddCommitToRepo(repo);
string repoPath = InitNewRepository();

var blob1 = repo.Lookup<Blob>("9daeaf");
Assert.NotNull(blob1);
using (var repo = new Repository(repoPath))
{
var backend = new MockOdbBackend();
repo.ObjectDatabase.AddBackend(backend, priority: 5);

const string dummy = "dummy\n";
AddCommitToRepo(repo);

// Inserts a fake blob with a similarly prefixed sha
var fakeId = new ObjectId("9daeaf0000000000000000000000000000000000");
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(dummy)))
{
Assert.Equal(0, backend.Write(fakeId, ms, dummy.Length, ObjectType.Blob));
}
var blob1 = repo.Lookup<Blob>("9daeaf");
Assert.NotNull(blob1);

const string dummy = "dummy\n";

// Inserts a fake blob with a similarly prefixed sha
var fakeId = new ObjectId("9daeaf0000000000000000000000000000000000");
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(dummy)))
{
Assert.Equal(0, backend.Write(fakeId, ms, dummy.Length, ObjectType.Blob));
}

var blob2 = repo.Lookup<Blob>(fakeId);
Assert.NotNull(blob2);
var blob2 = repo.Lookup<Blob>(fakeId);
Assert.NotNull(blob2);

Assert.Throws<AmbiguousSpecificationException>(() => repo.Lookup<Blob>("9daeaf"));
Assert.Throws<AmbiguousSpecificationException>(() => repo.Lookup<Blob>("9daeaf"));

var newBlob1 = repo.Lookup("9daeafb");
var newBlob2 = repo.Lookup("9daeaf0");
var newBlob1 = repo.Lookup("9daeafb");
var newBlob2 = repo.Lookup("9daeaf0");

Assert.Equal(blob1, newBlob1);
Assert.Equal(blob2, newBlob2);
Assert.Equal(blob1, newBlob1);
Assert.Equal(blob2, newBlob2);
}
}
finally
{
GlobalSettings.SetStrictHashVerification(true);
}
}

Expand Down
4 changes: 3 additions & 1 deletion LibGit2Sharp/Core/GitErrorCategory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ internal enum GitErrorCategory
Describe,
Rebase,
Filesystem,
Patch
Patch,
Worktree,
Sha1
}
}
10 changes: 10 additions & 0 deletions LibGit2Sharp/Core/GitErrorCode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -125,5 +125,15 @@ internal enum GitErrorCode
/// There are no more entries left to iterate.
/// </summary>
IterOver = -31,

/// <summary>
/// Internal-only.
/// </summary>
Retry = -32,

/// <summary>
/// A retrieved object did not match its expected ID.
/// </summary>
Mismatch = -33,
}
}
3 changes: 3 additions & 0 deletions LibGit2Sharp/Core/NativeMethods.cs
Original file line number Diff line number Diff line change
Expand Up @@ -636,6 +636,9 @@ internal static extern int git_filter_unregister(
internal static extern int git_libgit2_opts(int option, uint level,
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalCookie = UniqueId.UniqueIdentifier, MarshalTypeRef = typeof(StrictUtf8Marshaler))]string path);

// git_libgit2_opts(GIT_OPT_ENABLE_*, int enabled)
[DllImport(libgit2, CallingConvention = CallingConvention.Cdecl)]
internal static extern int git_libgit2_opts(int option, int enabled);
#endregion

[DllImport(libgit2)]
Expand Down
53 changes: 32 additions & 21 deletions LibGit2Sharp/Core/Proxy.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3345,25 +3345,31 @@ public static BuiltInFeatures git_libgit2_features()
}

// C# equivalent of libgit2's git_libgit2_opt_t
private enum LibGitOption
{
GetMWindowSize, // GIT_OPT_GET_MWINDOW_SIZE
SetMWindowSize, // GIT_OPT_SET_MWINDOW_SIZE
GetMWindowMappedLimit, // GIT_OPT_GET_MWINDOW_MAPPED_LIMIT
SetMWindowMappedLimit, // GIT_OPT_SET_MWINDOW_MAPPED_LIMIT
GetSearchPath, // GIT_OPT_GET_SEARCH_PATH
SetSearchPath, // GIT_OPT_SET_SEARCH_PATH
SetCacheObjectLimit, // GIT_OPT_SET_CACHE_OBJECT_LIMIT
SetCacheMaxSize, // GIT_OPT_SET_CACHE_MAX_SIZE
EnableCaching, // GIT_OPT_ENABLE_CACHING
GetCachedMemory, // GIT_OPT_GET_CACHED_MEMORY
GetTemplatePath, // GIT_OPT_GET_TEMPLATE_PATH
SetTemplatePath, // GIT_OPT_SET_TEMPLATE_PATH
SetSslCertLocations, // GIT_OPT_SET_SSL_CERT_LOCATIONS
SetUserAgent, // GIT_OPT_SET_USER_AGENT
EnableStrictObjectCreation, // GIT_OPT_ENABLE_STRICT_OBJECT_CREATION
SetSslCiphers, // GIT_OPT_SET_SSL_CIPHERS
GetUserAgent, // GIT_OPT_GET_USER_AGENT
private enum LibGit2Option
{
GetMWindowSize, // GIT_OPT_GET_MWINDOW_SIZE
SetMWindowSize, // GIT_OPT_SET_MWINDOW_SIZE
GetMWindowMappedLimit, // GIT_OPT_GET_MWINDOW_MAPPED_LIMIT
SetMWindowMappedLimit, // GIT_OPT_SET_MWINDOW_MAPPED_LIMIT
GetSearchPath, // GIT_OPT_GET_SEARCH_PATH
SetSearchPath, // GIT_OPT_SET_SEARCH_PATH
SetCacheObjectLimit, // GIT_OPT_SET_CACHE_OBJECT_LIMIT
SetCacheMaxSize, // GIT_OPT_SET_CACHE_MAX_SIZE
EnableCaching, // GIT_OPT_ENABLE_CACHING
GetCachedMemory, // GIT_OPT_GET_CACHED_MEMORY
GetTemplatePath, // GIT_OPT_GET_TEMPLATE_PATH
SetTemplatePath, // GIT_OPT_SET_TEMPLATE_PATH
SetSslCertLocations, // GIT_OPT_SET_SSL_CERT_LOCATIONS
SetUserAgent, // GIT_OPT_SET_USER_AGENT
EnableStrictObjectCreation, // GIT_OPT_ENABLE_STRICT_OBJECT_CREATION
EnableStrictSymbolicRefCreation, // GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION
SetSslCiphers, // GIT_OPT_SET_SSL_CIPHERS
GetUserAgent, // GIT_OPT_GET_USER_AGENT
EnableOfsDelta, // GIT_OPT_ENABLE_OFS_DELTA
EnableFsyncGitdir, // GIT_OPT_ENABLE_FSYNC_GITDIR
GetWindowsSharemode, // GIT_OPT_GET_WINDOWS_SHAREMODE
SetWindowsSharemode, // GIT_OPT_SET_WINDOWS_SHAREMODE
EnableStrictHashVerification, // GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION
}

/// <summary>
Expand All @@ -3379,7 +3385,7 @@ public static string git_libgit2_opts_get_search_path(ConfigurationLevel level)

using (var buf = new GitBuf())
{
var res = NativeMethods.git_libgit2_opts((int)LibGitOption.GetSearchPath, (uint)level, buf);
var res = NativeMethods.git_libgit2_opts((int)LibGit2Option.GetSearchPath, (uint)level, buf);
Ensure.ZeroResult(res);

path = LaxUtf8Marshaler.FromNative(buf.ptr) ?? string.Empty;
Expand All @@ -3388,6 +3394,11 @@ public static string git_libgit2_opts_get_search_path(ConfigurationLevel level)
return path;
}

public static void git_libgit2_opts_enable_strict_hash_verification(bool enabled)
{
NativeMethods.git_libgit2_opts((int)LibGit2Option.EnableStrictHashVerification, enabled ? 1 : 0);
}

/// <summary>
/// Set the path(s) under which libgit2 searches for the configuration file of a given level.
/// </summary>
Expand All @@ -3398,7 +3409,7 @@ public static string git_libgit2_opts_get_search_path(ConfigurationLevel level)
/// </param>
public static void git_libgit2_opts_set_search_path(ConfigurationLevel level, string path)
{
var res = NativeMethods.git_libgit2_opts((int)LibGitOption.SetSearchPath, (uint)level, path);
var res = NativeMethods.git_libgit2_opts((int)LibGit2Option.SetSearchPath, (uint)level, path);
Ensure.ZeroResult(res);
}

Expand Down
5 changes: 5 additions & 0 deletions LibGit2Sharp/GlobalSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -318,5 +318,10 @@ public static void SetConfigSearchPaths(ConfigurationLevel level, params string[
var pathString = (paths == null) ? null : string.Join(Path.PathSeparator.ToString(), paths);
Proxy.git_libgit2_opts_set_search_path(level, pathString);
}

public static void SetStrictHashVerification(bool enabled)
{
Proxy.git_libgit2_opts_enable_strict_hash_verification(enabled);
}
}
}
6 changes: 3 additions & 3 deletions LibGit2Sharp/LibGit2Sharp.csproj
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\LibGit2Sharp.NativeBinaries.1.0.165\build\LibGit2Sharp.NativeBinaries.props" Condition="Exists('..\packages\LibGit2Sharp.NativeBinaries.1.0.165\build\LibGit2Sharp.NativeBinaries.props')" />
<Import Project="..\packages\LibGit2Sharp.NativeBinaries.1.0.183\build\LibGit2Sharp.NativeBinaries.props" Condition="Exists('..\packages\LibGit2Sharp.NativeBinaries.1.0.183\build\LibGit2Sharp.NativeBinaries.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
Expand Down Expand Up @@ -392,6 +392,6 @@
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\LibGit2Sharp.NativeBinaries.1.0.165\build\LibGit2Sharp.NativeBinaries.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\LibGit2Sharp.NativeBinaries.1.0.165\build\LibGit2Sharp.NativeBinaries.props'))" />
<Error Condition="!Exists('..\packages\LibGit2Sharp.NativeBinaries.1.0.183\build\LibGit2Sharp.NativeBinaries.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\LibGit2Sharp.NativeBinaries.1.0.183\build\LibGit2Sharp.NativeBinaries.props'))" />
</Target>
</Project>
</Project>
2 changes: 1 addition & 1 deletion LibGit2Sharp/packages.config
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="LibGit2Sharp.NativeBinaries" version="1.0.165" targetFramework="net40" allowedVersions="[1.0.165]" />
<package id="LibGit2Sharp.NativeBinaries" version="1.0.183" targetFramework="net40" allowedVersions="[1.0.183]" />
</packages>