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:
Diffstat (limited to 'LibGit2Sharp/RemoteUpdater.cs')
-rw-r--r--LibGit2Sharp/RemoteUpdater.cs56
1 files changed, 31 insertions, 25 deletions
diff --git a/LibGit2Sharp/RemoteUpdater.cs b/LibGit2Sharp/RemoteUpdater.cs
index 1c419727..07c823bc 100644
--- a/LibGit2Sharp/RemoteUpdater.cs
+++ b/LibGit2Sharp/RemoteUpdater.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
+using System.Linq;
using LibGit2Sharp.Core;
using LibGit2Sharp.Core.Handles;
@@ -9,11 +10,12 @@ namespace LibGit2Sharp
/// <summary>
/// Exposes properties of a remote that can be updated.
/// </summary>
- public class RemoteUpdater : IDisposable
+ public class RemoteUpdater
{
private readonly UpdatingCollection<string> fetchRefSpecs;
private readonly UpdatingCollection<string> pushRefSpecs;
- private readonly RemoteSafeHandle remoteHandle;
+ private readonly Repository repo;
+ private readonly Remote remote;
/// <summary>
/// Needed for mocking purposes.
@@ -26,32 +28,47 @@ namespace LibGit2Sharp
Ensure.ArgumentNotNull(repo, "repo");
Ensure.ArgumentNotNull(remote, "remote");
+ this.repo = repo;
+ this.remote = remote;
+
fetchRefSpecs = new UpdatingCollection<string>(GetFetchRefSpecs, SetFetchRefSpecs);
pushRefSpecs = new UpdatingCollection<string>(GetPushRefSpecs, SetPushRefSpecs);
-
- remoteHandle = Proxy.git_remote_lookup(repo.Handle, remote.Name, true);
}
private IEnumerable<string> GetFetchRefSpecs()
{
- return Proxy.git_remote_get_fetch_refspecs(remoteHandle);
+ using (RemoteSafeHandle remoteHandle = Proxy.git_remote_lookup(repo.Handle, remote.Name, true))
+ {
+ return Proxy.git_remote_get_fetch_refspecs(remoteHandle);
+ }
}
private void SetFetchRefSpecs(IEnumerable<string> value)
{
- Proxy.git_remote_set_fetch_refspecs(remoteHandle, value);
- Proxy.git_remote_save(remoteHandle);
+ repo.Config.UnsetMultivar(string.Format("remote.{0}.fetch", remote.Name), ConfigurationLevel.Local);
+
+ foreach (var url in value)
+ {
+ Proxy.git_remote_add_fetch(repo.Handle, remote.Name, url);
+ }
}
private IEnumerable<string> GetPushRefSpecs()
{
- return Proxy.git_remote_get_push_refspecs(remoteHandle);
+ using (RemoteSafeHandle remoteHandle = Proxy.git_remote_lookup(repo.Handle, remote.Name, true))
+ {
+ return Proxy.git_remote_get_push_refspecs(remoteHandle);
+ }
}
private void SetPushRefSpecs(IEnumerable<string> value)
{
- Proxy.git_remote_set_push_refspecs(remoteHandle, value);
- Proxy.git_remote_save(remoteHandle);
+ repo.Config.UnsetMultivar(string.Format("remote.{0}.push", remote.Name), ConfigurationLevel.Local);
+
+ foreach (var url in value)
+ {
+ Proxy.git_remote_add_push(repo.Handle, remote.Name, url);
+ }
}
/// <summary>
@@ -61,8 +78,7 @@ namespace LibGit2Sharp
{
set
{
- Proxy.git_remote_set_autotag(remoteHandle, value);
- Proxy.git_remote_save(remoteHandle);
+ Proxy.git_remote_set_autotag(repo.Handle, remote.Name, value);
}
}
@@ -73,11 +89,10 @@ namespace LibGit2Sharp
{
set
{
- Proxy.git_remote_set_url(remoteHandle, value);
- Proxy.git_remote_save(remoteHandle);
+ Proxy.git_remote_set_url(repo.Handle, remote.Name, value);
}
}
-
+
/// <summary>
/// Sets the push url defined for this <see cref="Remote"/>
/// </summary>
@@ -85,8 +100,7 @@ namespace LibGit2Sharp
{
set
{
- Proxy.git_remote_set_pushurl(remoteHandle, value);
- Proxy.git_remote_save(remoteHandle);
+ Proxy.git_remote_set_pushurl(repo.Handle, remote.Name, value);
}
}
@@ -188,13 +202,5 @@ namespace LibGit2Sharp
setter(list.Value);
}
}
-
- /// <summary>
- /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
- /// </summary>
- public void Dispose()
- {
- remoteHandle.Dispose();
- }
}
}