Skip to content

Proxy.git_remote_connect() hides exceptions #1912

Closed
@YuKitsune

Description

@YuKitsune

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:

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions