@@ -50,7 +50,9 @@ public virtual RemoteCollection Remotes
50
50
/// <returns>The references in the <see cref="Remote"/> repository.</returns>
51
51
public virtual IEnumerable < DirectReference > ListReferences ( Remote remote )
52
52
{
53
- return ListReferences ( remote , null ) ;
53
+ Ensure . ArgumentNotNull ( remote , "remote" ) ;
54
+
55
+ return ListReferencesInternal ( remote . Url , null ) ;
54
56
}
55
57
56
58
/// <summary>
@@ -68,20 +70,27 @@ public virtual IEnumerable<DirectReference> ListReferences(Remote remote)
68
70
public virtual IEnumerable < DirectReference > ListReferences ( Remote remote , CredentialsHandler credentialsProvider )
69
71
{
70
72
Ensure . ArgumentNotNull ( remote , "remote" ) ;
73
+ Ensure . ArgumentNotNull ( credentialsProvider , "credentialsProvider" ) ;
71
74
72
- using ( RemoteSafeHandle remoteHandle = Proxy . git_remote_lookup ( repository . Handle , remote . Name , true ) )
73
- {
74
- var gitCallbacks = new GitRemoteCallbacks { version = 1 } ;
75
+ return ListReferencesInternal ( remote . Url , credentialsProvider ) ;
76
+ }
75
77
76
- if ( credentialsProvider != null )
77
- {
78
- var callbacks = new RemoteCallbacks ( credentialsProvider ) ;
79
- gitCallbacks = callbacks . GenerateCallbacks ( ) ;
80
- }
78
+ /// <summary>
79
+ /// List references in a remote repository.
80
+ /// <para>
81
+ /// When the remote tips are ahead of the local ones, the retrieved
82
+ /// <see cref="DirectReference"/>s may point to non existing
83
+ /// <see cref="GitObject"/>s in the local repository. In that
84
+ /// case, <see cref="DirectReference.Target"/> will return <c>null</c>.
85
+ /// </para>
86
+ /// </summary>
87
+ /// <param name="url">The url to list from.</param>
88
+ /// <returns>The references in the remote repository.</returns>
89
+ public virtual IEnumerable < DirectReference > ListReferences ( string url )
90
+ {
91
+ Ensure . ArgumentNotNull ( url , "url" ) ;
81
92
82
- Proxy . git_remote_connect ( remoteHandle , GitDirection . Fetch , ref gitCallbacks ) ;
83
- return Proxy . git_remote_ls ( repository , remoteHandle ) ;
84
- }
93
+ return ListReferencesInternal ( url , null ) ;
85
94
}
86
95
87
96
/// <summary>
@@ -94,14 +103,28 @@ public virtual IEnumerable<DirectReference> ListReferences(Remote remote, Creden
94
103
/// </para>
95
104
/// </summary>
96
105
/// <param name="url">The url to list from.</param>
106
+ /// <param name="credentialsProvider">The <see cref="Func{Credentials}"/> used to connect to remote repository.</param>
97
107
/// <returns>The references in the remote repository.</returns>
98
- public virtual IEnumerable < DirectReference > ListReferences ( string url )
108
+ public virtual IEnumerable < DirectReference > ListReferences ( string url , CredentialsHandler credentialsProvider )
99
109
{
100
110
Ensure . ArgumentNotNull ( url , "url" ) ;
111
+ Ensure . ArgumentNotNull ( credentialsProvider , "credentialsProvider" ) ;
101
112
102
- using ( RemoteSafeHandle remoteHandle = Proxy . git_remote_create_anonymous ( repository . Handle , url ) )
113
+ return ListReferencesInternal ( url , credentialsProvider ) ;
114
+ }
115
+
116
+ private IEnumerable < DirectReference > ListReferencesInternal ( string url , CredentialsHandler credentialsProvider )
117
+ {
118
+ using ( RemoteSafeHandle remoteHandle = BuildRemoteSafeHandle ( repository . Handle , url ) )
103
119
{
104
120
GitRemoteCallbacks gitCallbacks = new GitRemoteCallbacks { version = 1 } ;
121
+
122
+ if ( credentialsProvider != null )
123
+ {
124
+ var callbacks = new RemoteCallbacks ( credentialsProvider ) ;
125
+ gitCallbacks = callbacks . GenerateCallbacks ( ) ;
126
+ }
127
+
105
128
Proxy . git_remote_connect ( remoteHandle , GitDirection . Fetch , ref gitCallbacks ) ;
106
129
return Proxy . git_remote_ls ( repository , remoteHandle ) ;
107
130
}
0 commit comments