Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
jobily
Libgit2sharp
提交
97bee65f
L
Libgit2sharp
项目概览
jobily
/
Libgit2sharp
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
Libgit2sharp
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
97bee65f
编写于
4月 02, 2022
作者:
B
Brandon Ording
提交者:
GitHub
4月 02, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1955 from frindler/arm64native
Fixed calling into native libgit2 on osx-arm64
上级
0ff4838d
5e78b821
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
88 addition
and
10 deletion
+88
-10
LibGit2Sharp/Core/NativeMethods.cs
LibGit2Sharp/Core/NativeMethods.cs
+36
-0
LibGit2Sharp/Core/Proxy.cs
LibGit2Sharp/Core/Proxy.cs
+52
-10
未找到文件。
LibGit2Sharp/Core/NativeMethods.cs
浏览文件 @
97bee65f
...
...
@@ -764,6 +764,42 @@ private sealed class NativeShutdownObject : CriticalFinalizerObject
internal
static
extern
int
git_libgit2_opts
(
int
option
,
out
GitStrArray
extensions
);
#
endregion
#
region
git_libgit2_opts_osxarm64
// For RID osx-arm64 the calling convention is different: we need to pad out to 8 arguments before varargs
// (see discussion at https://github.com/dotnet/runtime/issues/48796)
// git_libgit2_opts(GIT_OPT_GET_SEARCH_PATH, int level, git_buf *buf)
[
DllImport
(
libgit2
,
CallingConvention
=
CallingConvention
.
Cdecl
,
EntryPoint
=
"git_libgit2_opts"
)]
internal
static
extern
int
git_libgit2_opts_osxarm64
(
int
option
,
IntPtr
nop2
,
IntPtr
nop3
,
IntPtr
nop4
,
IntPtr
nop5
,
IntPtr
nop6
,
IntPtr
nop7
,
IntPtr
nop8
,
uint
level
,
GitBuf
buf
);
// git_libgit2_opts(GIT_OPT_SET_SEARCH_PATH, int level, const char *path)
[
DllImport
(
libgit2
,
CallingConvention
=
CallingConvention
.
Cdecl
,
EntryPoint
=
"git_libgit2_opts"
)]
internal
static
extern
int
git_libgit2_opts_osxarm64
(
int
option
,
IntPtr
nop2
,
IntPtr
nop3
,
IntPtr
nop4
,
IntPtr
nop5
,
IntPtr
nop6
,
IntPtr
nop7
,
IntPtr
nop8
,
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
,
EntryPoint
=
"git_libgit2_opts"
)]
internal
static
extern
int
git_libgit2_opts_osxarm64
(
int
option
,
IntPtr
nop2
,
IntPtr
nop3
,
IntPtr
nop4
,
IntPtr
nop5
,
IntPtr
nop6
,
IntPtr
nop7
,
IntPtr
nop8
,
int
enabled
);
// git_libgit2_opts(GIT_OPT_SET_USER_AGENT, const char *path)
[
DllImport
(
libgit2
,
CallingConvention
=
CallingConvention
.
Cdecl
,
EntryPoint
=
"git_libgit2_opts"
)]
internal
static
extern
int
git_libgit2_opts_osxarm64
(
int
option
,
IntPtr
nop2
,
IntPtr
nop3
,
IntPtr
nop4
,
IntPtr
nop5
,
IntPtr
nop6
,
IntPtr
nop7
,
IntPtr
nop8
,
[
MarshalAs
(
UnmanagedType
.
CustomMarshaler
,
MarshalCookie
=
UniqueId
.
UniqueIdentifier
,
MarshalTypeRef
=
typeof
(
StrictUtf8Marshaler
))]
string
path
);
// git_libgit2_opts(GIT_OPT_GET_USER_AGENT, git_buf *buf)
[
DllImport
(
libgit2
,
CallingConvention
=
CallingConvention
.
Cdecl
,
EntryPoint
=
"git_libgit2_opts"
)]
internal
static
extern
int
git_libgit2_opts_osxarm64
(
int
option
,
IntPtr
nop2
,
IntPtr
nop3
,
IntPtr
nop4
,
IntPtr
nop5
,
IntPtr
nop6
,
IntPtr
nop7
,
IntPtr
nop8
,
GitBuf
buf
);
// git_libgit2_opts(GIT_OPT_SET_EXTENSIONS, const char **extensions, size_t len)
[
DllImport
(
libgit2
,
CallingConvention
=
CallingConvention
.
Cdecl
,
EntryPoint
=
"git_libgit2_opts"
)]
internal
static
extern
int
git_libgit2_opts_osxarm64
(
int
option
,
IntPtr
nop2
,
IntPtr
nop3
,
IntPtr
nop4
,
IntPtr
nop5
,
IntPtr
nop6
,
IntPtr
nop7
,
IntPtr
nop8
,
IntPtr
extensions
,
UIntPtr
len
);
// git_libgit2_opts(GIT_OPT_GET_EXTENSIONS, git_strarray *out)
[
DllImport
(
libgit2
,
CallingConvention
=
CallingConvention
.
Cdecl
,
EntryPoint
=
"git_libgit2_opts"
)]
internal
static
extern
int
git_libgit2_opts_osxarm64
(
int
option
,
IntPtr
nop2
,
IntPtr
nop3
,
IntPtr
nop4
,
IntPtr
nop5
,
IntPtr
nop6
,
IntPtr
nop7
,
IntPtr
nop8
,
out
GitStrArray
extensions
);
#
endregion
[
DllImport
(
libgit2
,
CallingConvention
=
CallingConvention
.
Cdecl
)]
internal
static
extern
unsafe
int
git_graph_ahead_behind
(
out
UIntPtr
ahead
,
out
UIntPtr
behind
,
git_repository
*
repo
,
ref
GitOid
one
,
ref
GitOid
two
);
...
...
LibGit2Sharp/Core/Proxy.cs
浏览文件 @
97bee65f
...
...
@@ -14,6 +14,9 @@ namespace LibGit2Sharp.Core
{
internal
class
Proxy
{
internal
static
readonly
bool
isOSXArm64
=
RuntimeInformation
.
ProcessArchitecture
==
Architecture
.
Arm64
&&
RuntimeInformation
.
IsOSPlatform
(
OSPlatform
.
OSX
);
#
region
git_blame_
public
static
unsafe
BlameHandle
git_blame_file
(
...
...
@@ -3408,7 +3411,11 @@ public static string git_libgit2_opts_get_search_path(ConfigurationLevel level)
using
(
var
buf
=
new
GitBuf
())
{
var
res
=
NativeMethods
.
git_libgit2_opts
((
int
)
LibGit2Option
.
GetSearchPath
,
(
uint
)
level
,
buf
);
int
res
;
if
(
isOSXArm64
)
res
=
NativeMethods
.
git_libgit2_opts_osxarm64
((
int
)
LibGit2Option
.
GetSearchPath
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
(
uint
)
level
,
buf
);
else
res
=
NativeMethods
.
git_libgit2_opts
((
int
)
LibGit2Option
.
GetSearchPath
,
(
uint
)
level
,
buf
);
Ensure
.
ZeroResult
(
res
);
path
=
LaxUtf8Marshaler
.
FromNative
(
buf
.
ptr
)
??
string
.
Empty
;
...
...
@@ -3419,7 +3426,10 @@ public static string git_libgit2_opts_get_search_path(ConfigurationLevel level)
public
static
void
git_libgit2_opts_enable_strict_hash_verification
(
bool
enabled
)
{
NativeMethods
.
git_libgit2_opts
((
int
)
LibGit2Option
.
EnableStrictHashVerification
,
enabled
?
1
:
0
);
if
(
isOSXArm64
)
NativeMethods
.
git_libgit2_opts_osxarm64
((
int
)
LibGit2Option
.
EnableStrictHashVerification
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
enabled
?
1
:
0
);
else
NativeMethods
.
git_libgit2_opts
((
int
)
LibGit2Option
.
EnableStrictHashVerification
,
enabled
?
1
:
0
);
}
/// <summary>
...
...
@@ -3432,7 +3442,11 @@ public static void git_libgit2_opts_enable_strict_hash_verification(bool enabled
/// </param>
public
static
void
git_libgit2_opts_set_search_path
(
ConfigurationLevel
level
,
string
path
)
{
var
res
=
NativeMethods
.
git_libgit2_opts
((
int
)
LibGit2Option
.
SetSearchPath
,
(
uint
)
level
,
path
);
int
res
;
if
(
isOSXArm64
)
res
=
NativeMethods
.
git_libgit2_opts_osxarm64
((
int
)
LibGit2Option
.
SetSearchPath
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
(
uint
)
level
,
path
);
else
res
=
NativeMethods
.
git_libgit2_opts
((
int
)
LibGit2Option
.
SetSearchPath
,
(
uint
)
level
,
path
);
Ensure
.
ZeroResult
(
res
);
}
...
...
@@ -3443,7 +3457,11 @@ public static void git_libgit2_opts_set_search_path(ConfigurationLevel level, st
public
static
void
git_libgit2_opts_set_enable_caching
(
bool
enabled
)
{
// libgit2 expects non-zero value for true
var
res
=
NativeMethods
.
git_libgit2_opts
((
int
)
LibGit2Option
.
EnableCaching
,
enabled
?
1
:
0
);
int
res
;
if
(
isOSXArm64
)
res
=
NativeMethods
.
git_libgit2_opts_osxarm64
((
int
)
LibGit2Option
.
EnableCaching
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
enabled
?
1
:
0
);
else
res
=
NativeMethods
.
git_libgit2_opts
((
int
)
LibGit2Option
.
EnableCaching
,
enabled
?
1
:
0
);
Ensure
.
ZeroResult
(
res
);
}
...
...
@@ -3454,7 +3472,11 @@ public static void git_libgit2_opts_set_enable_caching(bool enabled)
public
static
void
git_libgit2_opts_set_enable_ofsdelta
(
bool
enabled
)
{
// libgit2 expects non-zero value for true
var
res
=
NativeMethods
.
git_libgit2_opts
((
int
)
LibGit2Option
.
EnableOfsDelta
,
enabled
?
1
:
0
);
int
res
;
if
(
isOSXArm64
)
res
=
NativeMethods
.
git_libgit2_opts_osxarm64
((
int
)
LibGit2Option
.
EnableOfsDelta
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
enabled
?
1
:
0
);
else
res
=
NativeMethods
.
git_libgit2_opts
((
int
)
LibGit2Option
.
EnableOfsDelta
,
enabled
?
1
:
0
);
Ensure
.
ZeroResult
(
res
);
}
...
...
@@ -3465,7 +3487,11 @@ public static void git_libgit2_opts_set_enable_ofsdelta(bool enabled)
public
static
void
git_libgit2_opts_set_enable_strictobjectcreation
(
bool
enabled
)
{
// libgit2 expects non-zero value for true
var
res
=
NativeMethods
.
git_libgit2_opts
((
int
)
LibGit2Option
.
EnableStrictObjectCreation
,
enabled
?
1
:
0
);
int
res
;
if
(
isOSXArm64
)
res
=
NativeMethods
.
git_libgit2_opts_osxarm64
((
int
)
LibGit2Option
.
EnableStrictObjectCreation
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
enabled
?
1
:
0
);
else
res
=
NativeMethods
.
git_libgit2_opts
((
int
)
LibGit2Option
.
EnableStrictObjectCreation
,
enabled
?
1
:
0
);
Ensure
.
ZeroResult
(
res
);
}
...
...
@@ -3476,7 +3502,11 @@ public static void git_libgit2_opts_set_enable_strictobjectcreation(bool enabled
/// <param name="userAgent">The user-agent string to use</param>
public
static
void
git_libgit2_opts_set_user_agent
(
string
userAgent
)
{
var
res
=
NativeMethods
.
git_libgit2_opts
((
int
)
LibGit2Option
.
SetUserAgent
,
userAgent
);
int
res
;
if
(
isOSXArm64
)
res
=
NativeMethods
.
git_libgit2_opts_osxarm64
((
int
)
LibGit2Option
.
SetUserAgent
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
userAgent
);
else
res
=
NativeMethods
.
git_libgit2_opts
((
int
)
LibGit2Option
.
SetUserAgent
,
userAgent
);
Ensure
.
ZeroResult
(
res
);
}
...
...
@@ -3492,7 +3522,11 @@ public static string git_libgit2_opts_get_user_agent()
using
(
var
buf
=
new
GitBuf
())
{
var
res
=
NativeMethods
.
git_libgit2_opts
((
int
)
LibGit2Option
.
GetUserAgent
,
buf
);
int
res
;
if
(
isOSXArm64
)
res
=
NativeMethods
.
git_libgit2_opts_osxarm64
((
int
)
LibGit2Option
.
GetUserAgent
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
buf
);
else
res
=
NativeMethods
.
git_libgit2_opts
((
int
)
LibGit2Option
.
GetUserAgent
,
buf
);
Ensure
.
ZeroResult
(
res
);
userAgent
=
LaxUtf8Marshaler
.
FromNative
(
buf
.
ptr
)
??
string
.
Empty
;
...
...
@@ -3505,7 +3539,11 @@ public static void git_libgit2_opts_set_extensions(string[] extensions)
{
using
(
var
array
=
GitStrArrayManaged
.
BuildFrom
(
extensions
))
{
var
res
=
NativeMethods
.
git_libgit2_opts
((
int
)
LibGit2Option
.
SetExtensions
,
array
.
Array
.
Strings
,
array
.
Array
.
Count
);
int
res
;
if
(
isOSXArm64
)
res
=
NativeMethods
.
git_libgit2_opts_osxarm64
((
int
)
LibGit2Option
.
SetExtensions
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
array
.
Array
.
Strings
,
array
.
Array
.
Count
);
else
res
=
NativeMethods
.
git_libgit2_opts
((
int
)
LibGit2Option
.
SetExtensions
,
array
.
Array
.
Strings
,
array
.
Array
.
Count
);
Ensure
.
ZeroResult
(
res
);
}
}
...
...
@@ -3516,7 +3554,11 @@ public static string[] git_libgit2_opts_get_extensions()
try
{
var
res
=
NativeMethods
.
git_libgit2_opts
((
int
)
LibGit2Option
.
GetExtensions
,
out
array
.
Array
);
int
res
;
if
(
isOSXArm64
)
res
=
NativeMethods
.
git_libgit2_opts_osxarm64
((
int
)
LibGit2Option
.
GetExtensions
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
IntPtr
.
Zero
,
out
array
.
Array
);
else
res
=
NativeMethods
.
git_libgit2_opts
((
int
)
LibGit2Option
.
GetExtensions
,
out
array
.
Array
);
Ensure
.
ZeroResult
(
res
);
return
array
.
ReadStrings
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录