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:
authornulltoken <emeric.fermas@gmail.com>2015-06-18 21:09:01 +0300
committernulltoken <emeric.fermas@gmail.com>2015-06-18 21:09:01 +0300
commit0e3af9bff93901e409d28f4ba0b61c2a458afa2c (patch)
treed47e53bc694e0cbd723bd4f5f7d794c7ccb9540d
parent87067b503ef7c36e1f4045c8fcca1d34593ed11b (diff)
parent0ef4390d8811b5de91464faf43dd0b1c5fc3561b (diff)
Merge pull request #1099 from libgit2/ntk/remote_list
Add a new overload to list remote references accepting both an url and a CredentialsHandler
-rw-r--r--LibGit2Sharp/Network.cs51
1 files changed, 37 insertions, 14 deletions
diff --git a/LibGit2Sharp/Network.cs b/LibGit2Sharp/Network.cs
index 73c680ef..2329dee4 100644
--- a/LibGit2Sharp/Network.cs
+++ b/LibGit2Sharp/Network.cs
@@ -50,7 +50,9 @@ namespace LibGit2Sharp
/// <returns>The references in the <see cref="Remote"/> repository.</returns>
public virtual IEnumerable<DirectReference> ListReferences(Remote remote)
{
- return ListReferences(remote, null);
+ Ensure.ArgumentNotNull(remote, "remote");
+
+ return ListReferencesInternal(remote.Url, null);
}
/// <summary>
@@ -68,20 +70,27 @@ namespace LibGit2Sharp
public virtual IEnumerable<DirectReference> ListReferences(Remote remote, CredentialsHandler credentialsProvider)
{
Ensure.ArgumentNotNull(remote, "remote");
+ Ensure.ArgumentNotNull(credentialsProvider, "credentialsProvider");
- using (RemoteSafeHandle remoteHandle = Proxy.git_remote_lookup(repository.Handle, remote.Name, true))
- {
- var gitCallbacks = new GitRemoteCallbacks { version = 1 };
+ return ListReferencesInternal(remote.Url, credentialsProvider);
+ }
- if (credentialsProvider != null)
- {
- var callbacks = new RemoteCallbacks(credentialsProvider);
- gitCallbacks = callbacks.GenerateCallbacks();
- }
+ /// <summary>
+ /// List references in a remote repository.
+ /// <para>
+ /// When the remote tips are ahead of the local ones, the retrieved
+ /// <see cref="DirectReference"/>s may point to non existing
+ /// <see cref="GitObject"/>s in the local repository. In that
+ /// case, <see cref="DirectReference.Target"/> will return <c>null</c>.
+ /// </para>
+ /// </summary>
+ /// <param name="url">The url to list from.</param>
+ /// <returns>The references in the remote repository.</returns>
+ public virtual IEnumerable<DirectReference> ListReferences(string url)
+ {
+ Ensure.ArgumentNotNull(url, "url");
- Proxy.git_remote_connect(remoteHandle, GitDirection.Fetch, ref gitCallbacks);
- return Proxy.git_remote_ls(repository, remoteHandle);
- }
+ return ListReferencesInternal(url, null);
}
/// <summary>
@@ -94,14 +103,28 @@ namespace LibGit2Sharp
/// </para>
/// </summary>
/// <param name="url">The url to list from.</param>
+ /// <param name="credentialsProvider">The <see cref="Func{Credentials}"/> used to connect to remote repository.</param>
/// <returns>The references in the remote repository.</returns>
- public virtual IEnumerable<DirectReference> ListReferences(string url)
+ public virtual IEnumerable<DirectReference> ListReferences(string url, CredentialsHandler credentialsProvider)
{
Ensure.ArgumentNotNull(url, "url");
+ Ensure.ArgumentNotNull(credentialsProvider, "credentialsProvider");
- using (RemoteSafeHandle remoteHandle = Proxy.git_remote_create_anonymous(repository.Handle, url))
+ return ListReferencesInternal(url, credentialsProvider);
+ }
+
+ private IEnumerable<DirectReference> ListReferencesInternal(string url, CredentialsHandler credentialsProvider)
+ {
+ using (RemoteSafeHandle remoteHandle = BuildRemoteSafeHandle(repository.Handle, url))
{
GitRemoteCallbacks gitCallbacks = new GitRemoteCallbacks { version = 1 };
+
+ if (credentialsProvider != null)
+ {
+ var callbacks = new RemoteCallbacks(credentialsProvider);
+ gitCallbacks = callbacks.GenerateCallbacks();
+ }
+
Proxy.git_remote_connect(remoteHandle, GitDirection.Fetch, ref gitCallbacks);
return Proxy.git_remote_ls(repository, remoteHandle);
}