diff options
| author | Carlos Martín Nieto <carlos@cmartin.tk> | 2011-06-23 03:04:23 +0200 |
|---|---|---|
| committer | Carlos Martín Nieto <carlos@cmartin.tk> | 2011-06-27 02:12:40 +0200 |
| commit | 9ba49bb5c861651c5136ad6678fc1570801ddec1 (patch) | |
| tree | fbe1d71384587a1be506cca4219a1bff129f3ff8 /src/remote.c | |
| parent | c7c787ce0cd944c0e904d47c5ef1088de2fcf85a (diff) | |
| download | libgit2-9ba49bb5c861651c5136ad6678fc1570801ddec1.tar.gz | |
Add git_remote_connect and git_remote_ls
These allow you to implement git-ls-remote when given a reference name
and a repository.
Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
Diffstat (limited to 'src/remote.c')
| -rw-r--r-- | src/remote.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/remote.c b/src/remote.c index aa22debce..59ea6a797 100644 --- a/src/remote.c +++ b/src/remote.c @@ -172,6 +172,35 @@ const git_refspec *git_remote_pushspec(struct git_remote *remote) return &remote->push; } +int git_remote_connect(git_remote *remote, git_net_direction dir) +{ + int error; + git_transport *t; + + error = git_transport_new(&t, remote->url); + if (error < GIT_SUCCESS) + return git__rethrow(error, "Failed to create transport"); + + error = git_transport_connect(t, dir); + if (error < GIT_SUCCESS) { + error = git__rethrow(error, "Failed to connect the transport"); + goto cleanup; + } + + remote->transport = t; + +cleanup: + if (error < GIT_SUCCESS) + git_transport_free(t); + + return error; +} + +int git_remote_ls(git_remote *remote, git_headarray *refs) +{ + return git_transport_ls(remote->transport, refs); +} + void git_remote_free(git_remote *remote) { free(remote->fetch.src); @@ -180,5 +209,10 @@ void git_remote_free(git_remote *remote) free(remote->push.dst); free(remote->url); free(remote->name); + if (remote->transport != NULL) { + if (remote->transport->connected) + git_transport_close(remote->transport); + git_transport_free(remote->transport); + } free(remote); } |
