-
Notifications
You must be signed in to change notification settings - Fork 914
Description
I've noticed when calling Repository.ListRemoteReferences with a URL that doesn't point to a valid git repo, I get a fairly unhelpful error:
LibGit2Sharp.LibGit2SharpException: this remote has never connected
at LibGit2Sharp.Core.Ensure.HandleError(Int32 result)
at LibGit2Sharp.Core.Proxy.git_remote_ls(Repository repository, RemoteHandle remote)
at LibGit2Sharp.Repository.ListRemoteReferences(String url, CredentialsHandler credentialsProvider)
at LibGit2Sharp.Repository.ListRemoteReferences(String url)
at LibGit2SharpScratchpad.Program.Main(String[] args)
I did some digging and noticed in Repository.ListRemoteReferences(string, CredentialsHandler), there is a call to git_remote_connect, then git_remote_ls. In git_remote_connect, if an exception is thrown (E.g: from the call to Ensure.ZeroResult(res)), it's caught and then ignored:
libgit2sharp/LibGit2Sharp/Core/Proxy.cs
Lines 2163 to 2176 in 6329bea
| public static unsafe void git_remote_connect(RemoteHandle remote, GitDirection direction, ref GitRemoteCallbacks remoteCallbacks, ref GitProxyOptions proxyOptions) | |
| { | |
| GitStrArrayManaged customHeaders = new GitStrArrayManaged(); | |
| try | |
| { | |
| int res = NativeMethods.git_remote_connect(remote, direction, ref remoteCallbacks, ref proxyOptions, ref customHeaders.Array); | |
| Ensure.ZeroResult(res); | |
| } | |
| catch (Exception) | |
| { | |
| customHeaders.Dispose(); | |
| } | |
| } |
It looks like this was introduced in this commit: 6bc517f
Because this doesn't re-throw the exception, git_remote_ls gets given a null transport, and thus throws the this remote has never connected error.
I would've expected this to re-throw the exception after disposing of the custom headers.
Seems like an easy fix and I'm happy to send through a PR, just wondering if this was intentional or a legitimate bug.