@@ -52,9 +52,34 @@ public virtual IEnumerable<Reference> ListReferences(Remote remote)
5252 {
5353 Ensure . ArgumentNotNull ( remote , "remote" ) ;
5454
55- return ListReferencesInternal ( remote . Url , null , new ProxyOptions ( ) ) ;
55+ var options = new ListRemoteOptions ( )
56+ {
57+ ProxyOptions = new ProxyOptions ( )
58+ } ;
59+
60+ return ListReferencesInternal ( remote . Url , options ) ;
61+ }
62+
63+ /// <summary>
64+ /// List references in a <see cref="Remote"/> repository.
65+ /// <para>
66+ /// When the remote tips are ahead of the local ones, the retrieved
67+ /// <see cref="DirectReference"/>s may point to non existing
68+ /// <see cref="GitObject"/>s in the local repository. In that
69+ /// case, <see cref="DirectReference.Target"/> will return <c>null</c>.
70+ /// </para>
71+ /// </summary>
72+ /// <param name="remote">The <see cref="Remote"/> to list from.</param>
73+ /// <param name="options">The options for the remote request.</param>
74+ /// <returns>The references in the <see cref="Remote"/> repository.</returns>
75+ public virtual IEnumerable < Reference > ListReferences ( Remote remote , ListRemoteOptions options )
76+ {
77+ Ensure . ArgumentNotNull ( remote , "remote" ) ;
78+
79+ return ListReferencesInternal ( remote . Url , options ) ;
5680 }
5781
82+
5883 /// <summary>
5984 /// List references in a <see cref="Remote"/> repository.
6085 /// <para>
@@ -71,7 +96,12 @@ public virtual IEnumerable<Reference> ListReferences(Remote remote, ProxyOptions
7196 {
7297 Ensure . ArgumentNotNull ( remote , "remote" ) ;
7398
74- return ListReferencesInternal ( remote . Url , null , proxyOptions ) ;
99+ var options = new ListRemoteOptions ( )
100+ {
101+ ProxyOptions = proxyOptions
102+ } ;
103+
104+ return ListReferencesInternal ( remote . Url , options ) ;
75105 }
76106
77107 /// <summary>
@@ -91,7 +121,13 @@ public virtual IEnumerable<Reference> ListReferences(Remote remote, CredentialsH
91121 Ensure . ArgumentNotNull ( remote , "remote" ) ;
92122 Ensure . ArgumentNotNull ( credentialsProvider , "credentialsProvider" ) ;
93123
94- return ListReferencesInternal ( remote . Url , credentialsProvider , new ProxyOptions ( ) ) ;
124+ var options = new ListRemoteOptions ( )
125+ {
126+ ProxyOptions = new ProxyOptions ( ) ,
127+ CredentialsProvider = credentialsProvider
128+ } ;
129+
130+ return ListReferencesInternal ( remote . Url , options ) ;
95131 }
96132
97133 /// <summary>
@@ -112,7 +148,32 @@ public virtual IEnumerable<Reference> ListReferences(Remote remote, CredentialsH
112148 Ensure . ArgumentNotNull ( remote , "remote" ) ;
113149 Ensure . ArgumentNotNull ( credentialsProvider , "credentialsProvider" ) ;
114150
115- return ListReferencesInternal ( remote . Url , credentialsProvider , proxyOptions ) ;
151+ var options = new ListRemoteOptions ( )
152+ {
153+ ProxyOptions = proxyOptions ,
154+ CredentialsProvider = credentialsProvider
155+ } ;
156+
157+ return ListReferencesInternal ( remote . Url , options ) ;
158+ }
159+
160+ /// <summary>
161+ /// List references in a remote repository.
162+ /// <para>
163+ /// When the remote tips are ahead of the local ones, the retrieved
164+ /// <see cref="DirectReference"/>s may point to non existing
165+ /// <see cref="GitObject"/>s in the local repository. In that
166+ /// case, <see cref="DirectReference.Target"/> will return <c>null</c>.
167+ /// </para>
168+ /// </summary>
169+ /// <param name="url">The url to list from.</param>
170+ /// <param name="options">The options for the remote request.</param>
171+ /// <returns>The references in the remote repository.</returns>
172+ public virtual IEnumerable < Reference > ListReferences ( string url , ListRemoteOptions options )
173+ {
174+ Ensure . ArgumentNotNull ( url , "url" ) ;
175+
176+ return ListReferencesInternal ( url , options ) ;
116177 }
117178
118179 /// <summary>
@@ -130,7 +191,12 @@ public virtual IEnumerable<Reference> ListReferences(string url)
130191 {
131192 Ensure . ArgumentNotNull ( url , "url" ) ;
132193
133- return ListReferencesInternal ( url , null , new ProxyOptions ( ) ) ;
194+ var options = new ListRemoteOptions ( )
195+ {
196+ ProxyOptions = new ProxyOptions ( )
197+ } ;
198+
199+ return ListReferencesInternal ( url , options ) ;
134200 }
135201
136202 /// <summary>
@@ -148,8 +214,12 @@ public virtual IEnumerable<Reference> ListReferences(string url)
148214 public virtual IEnumerable < Reference > ListReferences ( string url , ProxyOptions proxyOptions )
149215 {
150216 Ensure . ArgumentNotNull ( url , "url" ) ;
217+ var options = new ListRemoteOptions ( )
218+ {
219+ ProxyOptions = proxyOptions
220+ } ;
151221
152- return ListReferencesInternal ( url , null , proxyOptions ) ;
222+ return ListReferencesInternal ( url , options ) ;
153223 }
154224
155225 /// <summary>
@@ -169,7 +239,13 @@ public virtual IEnumerable<Reference> ListReferences(string url, CredentialsHand
169239 Ensure . ArgumentNotNull ( url , "url" ) ;
170240 Ensure . ArgumentNotNull ( credentialsProvider , "credentialsProvider" ) ;
171241
172- return ListReferencesInternal ( url , credentialsProvider , new ProxyOptions ( ) ) ;
242+ var options = new ListRemoteOptions ( )
243+ {
244+ CredentialsProvider = credentialsProvider ,
245+ ProxyOptions = new ProxyOptions ( )
246+ } ;
247+
248+ return ListReferencesInternal ( url , options ) ;
173249 }
174250
175251 /// <summary>
@@ -190,21 +266,26 @@ public virtual IEnumerable<Reference> ListReferences(string url, CredentialsHand
190266 Ensure . ArgumentNotNull ( url , "url" ) ;
191267 Ensure . ArgumentNotNull ( credentialsProvider , "credentialsProvider" ) ;
192268
193- return ListReferencesInternal ( url , credentialsProvider , new ProxyOptions ( ) ) ;
269+ var options = new ListRemoteOptions ( )
270+ {
271+ CredentialsProvider = credentialsProvider ,
272+ ProxyOptions = new ProxyOptions ( )
273+ } ;
274+ return ListReferencesInternal ( url , options ) ;
194275 }
195276
196- private IEnumerable < Reference > ListReferencesInternal ( string url , CredentialsHandler credentialsProvider , ProxyOptions proxyOptions )
277+ private IEnumerable < Reference > ListReferencesInternal ( string url , ListRemoteOptions options )
197278 {
198- proxyOptions ??= new ( ) ;
279+ var proxyOptions = options ? . ProxyOptions ?? new ( ) ;
199280
200281 using RemoteHandle remoteHandle = BuildRemoteHandle ( repository . Handle , url ) ;
201282 using var proxyOptionsWrapper = new GitProxyOptionsWrapper ( proxyOptions . CreateGitProxyOptions ( ) ) ;
202283
203284 GitRemoteCallbacks gitCallbacks = new GitRemoteCallbacks { version = 1 } ;
204285
205- if ( credentialsProvider != null )
286+ if ( options != null )
206287 {
207- var callbacks = new RemoteCallbacks ( credentialsProvider ) ;
288+ var callbacks = new RemoteCallbacks ( options ) ;
208289 gitCallbacks = callbacks . GenerateCallbacks ( ) ;
209290 }
210291
0 commit comments