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

github.com/mono/libgit2sharp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2018-03-05 19:20:13 +0300
committerEdward Thomson <ethomson@edwardthomson.com>2018-03-05 19:20:13 +0300
commitff2d847e3a9e53d21eee6b5c1af6fc3050e476ea (patch)
tree37eed39e9ac808efbc54aaed45104052a324ab96
parent70229b085e66430892659a6106deca0a158ce8cc (diff)
Configuration: now backed by a repository
Configurations are now (optionally) backed by a repository. Provide one whenever possible.
-rw-r--r--LibGit2Sharp/Configuration.cs17
-rw-r--r--LibGit2Sharp/Core/NativeMethods.cs1
-rw-r--r--LibGit2Sharp/Core/Proxy.cs6
3 files changed, 14 insertions, 10 deletions
diff --git a/LibGit2Sharp/Configuration.cs b/LibGit2Sharp/Configuration.cs
index 5a0aa03f..9297a5c3 100644
--- a/LibGit2Sharp/Configuration.cs
+++ b/LibGit2Sharp/Configuration.cs
@@ -52,41 +52,42 @@ namespace LibGit2Sharp
private void Init(Repository repository)
{
configHandle = Proxy.git_config_new();
+ RepositoryHandle repoHandle = (repository != null) ? repository.Handle : null;
- if (repository != null)
+ if (repoHandle != null)
{
//TODO: push back this logic into libgit2.
// As stated by @carlosmn "having a helper function to load the defaults and then allowing you
// to modify it before giving it to git_repository_open_ext() would be a good addition, I think."
// -- Agreed :)
string repoConfigLocation = Path.Combine(repository.Info.Path, "config");
- Proxy.git_config_add_file_ondisk(configHandle, repoConfigLocation, ConfigurationLevel.Local);
+ Proxy.git_config_add_file_ondisk(configHandle, repoConfigLocation, ConfigurationLevel.Local, repoHandle);
- Proxy.git_repository_set_config(repository.Handle, configHandle);
+ Proxy.git_repository_set_config(repoHandle, configHandle);
}
else if (repoConfigPath != null)
{
- Proxy.git_config_add_file_ondisk(configHandle, repoConfigPath, ConfigurationLevel.Local);
+ Proxy.git_config_add_file_ondisk(configHandle, repoConfigPath, ConfigurationLevel.Local, repoHandle);
}
if (globalConfigPath != null)
{
- Proxy.git_config_add_file_ondisk(configHandle, globalConfigPath, ConfigurationLevel.Global);
+ Proxy.git_config_add_file_ondisk(configHandle, globalConfigPath, ConfigurationLevel.Global, repoHandle);
}
if (xdgConfigPath != null)
{
- Proxy.git_config_add_file_ondisk(configHandle, xdgConfigPath, ConfigurationLevel.Xdg);
+ Proxy.git_config_add_file_ondisk(configHandle, xdgConfigPath, ConfigurationLevel.Xdg, repoHandle);
}
if (systemConfigPath != null)
{
- Proxy.git_config_add_file_ondisk(configHandle, systemConfigPath, ConfigurationLevel.System);
+ Proxy.git_config_add_file_ondisk(configHandle, systemConfigPath, ConfigurationLevel.System, repoHandle);
}
if (programDataConfigPath != null)
{
- Proxy.git_config_add_file_ondisk(configHandle, programDataConfigPath, ConfigurationLevel.ProgramData);
+ Proxy.git_config_add_file_ondisk(configHandle, programDataConfigPath, ConfigurationLevel.ProgramData, repoHandle);
}
}
diff --git a/LibGit2Sharp/Core/NativeMethods.cs b/LibGit2Sharp/Core/NativeMethods.cs
index d28a7ace..ddcb0cdd 100644
--- a/LibGit2Sharp/Core/NativeMethods.cs
+++ b/LibGit2Sharp/Core/NativeMethods.cs
@@ -373,6 +373,7 @@ namespace LibGit2Sharp.Core
git_config* cfg,
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalCookie = UniqueId.UniqueIdentifier, MarshalTypeRef = typeof(StrictFilePathMarshaler))] FilePath path,
uint level,
+ git_repository* repo,
[MarshalAs(UnmanagedType.Bool)] bool force);
[DllImport(libgit2)]
diff --git a/LibGit2Sharp/Core/Proxy.cs b/LibGit2Sharp/Core/Proxy.cs
index 6bef3b6b..9c1d1218 100644
--- a/LibGit2Sharp/Core/Proxy.cs
+++ b/LibGit2Sharp/Core/Proxy.cs
@@ -517,9 +517,11 @@ namespace LibGit2Sharp.Core
#region git_config_
- public static unsafe void git_config_add_file_ondisk(ConfigurationHandle config, FilePath path, ConfigurationLevel level)
+ public static unsafe void git_config_add_file_ondisk(ConfigurationHandle config, FilePath path, ConfigurationLevel level, RepositoryHandle repo)
{
- int res = NativeMethods.git_config_add_file_ondisk(config, path, (uint)level, true);
+ // RepositoryHandle does implicit cast voodoo that is not null-safe, thus this explicit check
+ git_repository* repoHandle = (repo != null) ? (git_repository*)repo : null;
+ int res = NativeMethods.git_config_add_file_ondisk(config, path, (uint)level, repoHandle, true);
Ensure.ZeroResult(res);
}