diff options
| author | Vicent Martà <tanoku@gmail.com> | 2011-11-21 17:12:23 -0800 |
|---|---|---|
| committer | Vicent Martà <tanoku@gmail.com> | 2011-11-21 17:12:23 -0800 |
| commit | bec92f78bf169d3cb2c058263ddff699b5055dca (patch) | |
| tree | 3ec1b406fa85a4604ddd598badc7340e2009a28d /src/remote.c | |
| parent | 2744806f32c895feb2ec241320d2b64ae58e992c (diff) | |
| parent | 6ac3b707b14217602152c032a11304757c88612c (diff) | |
| download | libgit2-bec92f78bf169d3cb2c058263ddff699b5055dca.tar.gz | |
Merge pull request #492 from carlosmn/networking
Networking improvements
Diffstat (limited to 'src/remote.c')
| -rw-r--r-- | src/remote.c | 46 |
1 files changed, 34 insertions, 12 deletions
diff --git a/src/remote.c b/src/remote.c index 3ff08a21e..e0c127bd3 100644 --- a/src/remote.c +++ b/src/remote.c @@ -56,22 +56,34 @@ static int parse_remote_refspec(git_config *cfg, git_refspec *refspec, const cha return refspec_parse(refspec, val); } -int git_remote_new(git_remote **out, git_repository *repo, const char *url) +int git_remote_new(git_remote **out, git_repository *repo, const char *url, const char *name) { git_remote *remote; + if (url == NULL) + return git__throw(GIT_EINVALIDARGS, "No URL was given"); + remote = git__malloc(sizeof(git_remote)); if (remote == NULL) return GIT_ENOMEM; memset(remote, 0x0, sizeof(git_remote)); remote->repo = repo; + remote->url = git__strdup(url); if (remote->url == NULL) { git__free(remote); return GIT_ENOMEM; } + if (name != NULL) { + remote->name = git__strdup(name); + if (remote->name == NULL) { + git__free(remote); + return GIT_ENOMEM; + } + } + *out = remote; return GIT_SUCCESS; } @@ -206,13 +218,13 @@ int git_remote_ls(git_remote *remote, git_headarray *refs) return remote->transport->ls(remote->transport, refs); } -int git_remote_negotiate(git_remote *remote) -{ - return git_fetch_negotiate(remote); -} - int git_remote_download(char **filename, git_remote *remote) { + int error; + + if ((error = git_fetch_negotiate(remote)) < 0) + return git__rethrow(error, "Error negotiating"); + return git_fetch_download_pack(filename, remote); } @@ -255,6 +267,21 @@ int git_remote_update_tips(struct git_remote *remote) return GIT_SUCCESS; } +int git_remote_connected(git_remote *remote) +{ + return remote->transport == NULL ? 0 : remote->transport->connected; +} + +void git_remote_disconnect(git_remote *remote) +{ + if (remote->transport != NULL) { + if (remote->transport->connected) + remote->transport->close(remote->transport); + + remote->transport->free(remote->transport); + } +} + void git_remote_free(git_remote *remote) { if (remote == NULL) @@ -266,11 +293,6 @@ void git_remote_free(git_remote *remote) git__free(remote->push.dst); git__free(remote->url); git__free(remote->name); - if (remote->transport != NULL) { - if (remote->transport->connected) - remote->transport->close(remote->transport); - - remote->transport->free(remote->transport); - } + git_remote_disconnect(remote); git__free(remote); } |
