Skip to content

Commit ca6242c

Browse files
committed
Makes RemoteUpdater disposable to reuse remotehandle
1 parent 92b0e4e commit ca6242c

File tree

2 files changed

+24
-38
lines changed

2 files changed

+24
-38
lines changed

LibGit2Sharp/RemoteCollection.cs

+5-4
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,12 @@ internal Remote RemoteForName(string name, bool shouldThrowIfNotFound = true)
5757
/// <returns>The updated remote.</returns>
5858
public virtual Remote Update(Remote remote, params Action<RemoteUpdater>[] actions)
5959
{
60-
var updater = new RemoteUpdater(this.repository, remote);
61-
62-
foreach (Action<RemoteUpdater> action in actions)
60+
using (var updater = new RemoteUpdater(this.repository, remote))
6361
{
64-
action(updater);
62+
foreach (Action<RemoteUpdater> action in actions)
63+
{
64+
action(updater);
65+
}
6566
}
6667

6768
return this[remote.Name];

LibGit2Sharp/RemoteUpdater.cs

+19-34
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,11 @@ namespace LibGit2Sharp
88
/// <summary>
99
/// Exposes properties of a remote that can be updated.
1010
/// </summary>
11-
public class RemoteUpdater
11+
public class RemoteUpdater : IDisposable
1212
{
13-
private readonly Repository repo;
14-
private readonly Remote remote;
1513
private readonly UpdatingCollection<string> fetchRefSpecs;
1614
private readonly UpdatingCollection<string> pushRefSpecs;
15+
private readonly RemoteSafeHandle remoteHandle;
1716

1817
/// <summary>
1918
/// Needed for mocking purposes.
@@ -26,45 +25,32 @@ internal RemoteUpdater(Repository repo, Remote remote)
2625
Ensure.ArgumentNotNull(repo, "repo");
2726
Ensure.ArgumentNotNull(remote, "remote");
2827

29-
this.repo = repo;
30-
this.remote = remote;
31-
3228
fetchRefSpecs = new UpdatingCollection<string>(GetFetchRefSpecs, SetFetchRefSpecs);
3329
pushRefSpecs = new UpdatingCollection<string>(GetPushRefSpecs, SetPushRefSpecs);
30+
31+
remoteHandle = Proxy.git_remote_load(repo.Handle, remote.Name, true);
3432
}
3533

3634
private IEnumerable<string> GetFetchRefSpecs()
3735
{
38-
using (RemoteSafeHandle remoteHandle = Proxy.git_remote_load(repo.Handle, remote.Name, true))
39-
{
40-
return Proxy.git_remote_get_fetch_refspecs(remoteHandle);
41-
}
36+
return Proxy.git_remote_get_fetch_refspecs(remoteHandle);
4237
}
4338

4439
private void SetFetchRefSpecs(IEnumerable<string> value)
4540
{
46-
using (RemoteSafeHandle remoteHandle = Proxy.git_remote_load(repo.Handle, remote.Name, true))
47-
{
48-
Proxy.git_remote_set_fetch_refspecs(remoteHandle, value);
49-
Proxy.git_remote_save(remoteHandle);
50-
}
41+
Proxy.git_remote_set_fetch_refspecs(remoteHandle, value);
42+
Proxy.git_remote_save(remoteHandle);
5143
}
5244

5345
private IEnumerable<string> GetPushRefSpecs()
5446
{
55-
using (RemoteSafeHandle remoteHandle = Proxy.git_remote_load(repo.Handle, remote.Name, true))
56-
{
57-
return Proxy.git_remote_get_push_refspecs(remoteHandle);
58-
}
47+
return Proxy.git_remote_get_push_refspecs(remoteHandle);
5948
}
6049

6150
private void SetPushRefSpecs(IEnumerable<string> value)
6251
{
63-
using (RemoteSafeHandle remoteHandle = Proxy.git_remote_load(repo.Handle, remote.Name, true))
64-
{
65-
Proxy.git_remote_set_push_refspecs(remoteHandle, value);
66-
Proxy.git_remote_save(remoteHandle);
67-
}
52+
Proxy.git_remote_set_push_refspecs(remoteHandle, value);
53+
Proxy.git_remote_save(remoteHandle);
6854
}
6955

7056
/// <summary>
@@ -74,11 +60,8 @@ public virtual TagFetchMode TagFetchMode
7460
{
7561
set
7662
{
77-
using (RemoteSafeHandle remoteHandle = Proxy.git_remote_load(repo.Handle, remote.Name, true))
78-
{
79-
Proxy.git_remote_set_autotag(remoteHandle, value);
80-
Proxy.git_remote_save(remoteHandle);
81-
}
63+
Proxy.git_remote_set_autotag(remoteHandle, value);
64+
Proxy.git_remote_save(remoteHandle);
8265
}
8366
}
8467

@@ -89,11 +72,8 @@ public virtual string Url
8972
{
9073
set
9174
{
92-
using (RemoteSafeHandle remoteHandle = Proxy.git_remote_load(repo.Handle, remote.Name, true))
93-
{
94-
Proxy.git_remote_set_url(remoteHandle, value);
95-
Proxy.git_remote_save(remoteHandle);
96-
}
75+
Proxy.git_remote_set_url(remoteHandle, value);
76+
Proxy.git_remote_save(remoteHandle);
9777
}
9878
}
9979

@@ -195,5 +175,10 @@ private void Save()
195175
setter(list.Value);
196176
}
197177
}
178+
179+
public void Dispose()
180+
{
181+
remoteHandle.Dispose();
182+
}
198183
}
199184
}

0 commit comments

Comments
 (0)