8000 Set / get supported extensions · libgit2/libgit2sharp@38af05a · GitHub
[go: up one dir, main page]

Skip to content

Commit 38af05a

Browse files
committed
Set / get supported extensions
- C# wrapper for libgit2/libgit2#6031 (I'm not sure at all for the P/Invoke code)
1 parent 6329bea commit 38af05a

File tree

5 files changed

+88
-2
lines changed

5 files changed

+88
-2
lines changed

LibGit2Sharp.Tests/GlobalSettingsFixture.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,5 +80,24 @@ public void LoadFromSpecifiedPath(string architecture)
8080
DirectoryHelper.DeleteDirectory(tempDir);
8181
}
8282
}
83+
84+
[Fact]
85+
public void SetExtensions()
86+
{
87+
var extensions = GlobalSettings.GetExtensions();
88+
89+
// Assert that "noop" is supported by default
90+
Assert.Equal(new[] { "noop" }, extensions);
91+
92+
// Disable "noop" extensions
93+
GlobalSettings.SetExtensions(new[] { "!noop" });
94+
extensions = GlobalSettings.GetExtensions();
95+
Assert.Empty(extensions);
96+
97+
// Enable two new extensions (it will reset the configuration and "noop" will be enabled)
98+
GlobalSettings.SetExtensions(new[] { "partialclone", "newext" });
99+
extensions = GlobalSettings.GetExtensions();
100+
Assert.Equal(new[] { "noop", "partialclone", "newext" }, extensions);
101+
}
83102
}
84103
}

LibGit2Sharp/Core/NativeMethods.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,14 @@ internal static extern int git_libgit2_opts(int option,
812812
// git_libgit2_opts(GIT_OPT_GET_USER_AGENT, git_buf *buf)
813813
[DllImport(libgit2, CallingConvention = CallingConvention.Cdecl)]
814814
internal static extern int git_libgit2_opts(int option, GitBuf buf);
815+
816+
// git_libgit2_opts(GIT_OPT_SET_EXTENSIONS, const char **extensions, size_t len)
817+
[DllImport(libgit2, CallingConvention = CallingConvention.Cdecl)]
818+
internal static extern int git_libgit2_opts(int option, string[] extensions, int len);
819+
820+
// git_libgit2_opts(GIT_OPT_GET_EXTENSIONS, git_strarray *out)
821+
[DllImport(libgit2, CallingConvention = CallingConvention.Cdecl)]
822+
internal static extern int git_libgit2_opts(int option, out GitStrArray extensions);
815823
#endregion
816824

817825
[DllImport(libgit2, CallingConvention = CallingConvention.Cdecl)]

LibGit2Sharp/Core/Proxy.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3381,6 +3381,18 @@ private enum LibGit2Option
33813381
GetWindowsSharemode, // GIT_OPT_GET_WINDOWS_SHAREMODE
33823382
SetWindowsSharemode, // GIT_OPT_SET_WINDOWS_SHAREMODE
33833383
EnableStrictHashVerification, // GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION
3384+
SetAllocator, // GIT_OPT_SET_ALLOCATOR,
3385+
EnableUnsavedIndexSafety, // GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY,
3386+
GetPackMaxObject, // GIT_OPT_GET_PACK_MAX_OBJECTS,
3387+
SetPackMaxObjects, // GIT_OPT_SET_PACK_MAX_OBJECTS,
3388+
DisabledPackKeepFileChecks, // GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS,
3389+
EnableHttpExpectContinue, // GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE,
3390+
GetMWindowFileLimit, // GIT_OPT_GET_MWINDOW_FILE_LIMIT,
3391+
SetMWindowFileLimit, // GIT_OPT_SET_MWINDOW_FILE_LIMIT,
3392+
SetOdbPackedPriority, // GIT_OPT_SET_ODB_PACKED_PRIORITY,
3393+
SetOdbLoosePriority, // GIT_OPT_SET_ODB_LOOSE_PRIORITY,
3394+
GetExtensions, // GIT_OPT_GET_EXTENSIONS,
3395+
SetExtensions, // GIT_OPT_SET_EXTENSIONS
33843396
}
33853397

33863398
/// <summary>
@@ -3489,6 +3501,29 @@ public static string git_libgit2_opts_get_user_agent()
34893501
return userAgent;
34903502
}
34913503

3504+
public static void git_libgit2_opts_set_extensions(string[] extensions)
3505+
{
3506+
var res = NativeMethods.git_libgit2_opts((int)LibGit2Option.SetExtensions, extensions, extensions.Length);
3507+
Ensure.ZeroResult(res);
3508+
}
3509+
3510+
public static string[] git_libgit2_opts_get_extensions()
3511+
{
3512+
var array = new GitStrArrayNative();
3513+
3514+
try
3515+
{
3516+
var res = NativeMethods.git_libgit2_opts((int)LibGit2Option.GetExtensions, out array.Array);
3517+
Ensure.ZeroResult(res);
3518+
3519+
return array.ReadStrings();
3520+
}
3521+
finally
3522+
{
3523+
array.Dispose();
3524+
}
3525+
}
3526+
34923527
#endregion
34933528

34943529
#region git_worktree_

LibGit2Sharp/GlobalSettings.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,30 @@ public static void SetUserAgent(string userAgent)
525525
Proxy.git_libgit2_opts_set_user_agent(userAgent);
526526
}
527527

528+
/// <summary>
529+
/// Set that the given git extensions are supported by the caller.
530+
/// </summary>
531+
/// <remarks>
532+
/// Extensions supported by libgit2 may be negated by prefixing them with a `!`. For example: setting extensions to { "!noop", "newext" } indicates that the caller does not want
533+
/// to support repositories with the `noop` extension but does want to support repositories with the `newext` extension.
534+
/// </remarks>
535+
/// <param name="extensions">Supported extensions</param>
536+
public static void SetExtensions(params string[] extensions)
537+
{
538+
Proxy.git_libgit2_opts_set_extensions(extensions);
539+
}
540+
541+
/// <summary>
542+
/// Returns the list of git extensions that are supported.
543+
/// </summary>
544+
/// <remarks>
545+
/// This is the list of built-in extensions supported by libgit2 and custom extensions that have been added with `SetExtensions`. Extensions that have been negated will not be returned.
546+
/// </remarks>
547+
public static string[] GetExtensions()
548+
{
549+
return Proxy.git_libgit2_opts_get_extensions();
550+
}
551+
528552
/// <summary>
529553
/// Gets the user-agent string used by libgit2.
530554
/// <returns>

LibGit2Sharp/LibGit2Sharp.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<TargetFrameworks>netstandard2.0;netcoreapp2.1</TargetFrameworks>
@@ -32,7 +32,7 @@
3232
</ItemGroup>
3333

3434
<ItemGroup>
35-
<PackageReference Include="LibGit2Sharp.NativeBinaries" Version="[2.0.315-alpha.0.1]" PrivateAssets="none" />
35+
<PackageReference Include="LibGit2Sharp.NativeBinaries" Version="[2.0.315-alpha.0.4]" PrivateAssets="none" />
3636
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="all" />
3737
<PackageReference Include="Nerdbank.GitVersioning" Version="3.4.220" PrivateAssets="all" />
3838
</ItemGroup>

0 commit comments

Comments
 (0)
0