Add git_remote_disconnect

It can be useful to separate disconnecting from actually destroying
the object.

Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
This commit is contained in:
Carlos Martín Nieto 2011-11-21 20:44:03 +01:00
parent 0ca7ca3ef7
commit 4cf01e9a1a
2 changed files with 21 additions and 6 deletions

View File

@ -123,6 +123,16 @@ GIT_EXTERN(int) git_remote_ls(git_remote *remote, git_headarray *refs);
*/ */
GIT_EXTERN(int) git_remote_download(char **filename, git_remote *remote); GIT_EXTERN(int) git_remote_download(char **filename, git_remote *remote);
/**
* Disconnect from the remote
*
* Close the connection to the remote and free the underlying
* transport.
*
* @param remote the remote to disconnect from
*/
GIT_EXTERN(void) git_remote_disconnect(git_remote *remote);
/** /**
* Free the memory associated with a remote * Free the memory associated with a remote
* *

View File

@ -267,6 +267,16 @@ int git_remote_update_tips(struct git_remote *remote)
return GIT_SUCCESS; return GIT_SUCCESS;
} }
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) void git_remote_free(git_remote *remote)
{ {
if (remote == NULL) if (remote == NULL)
@ -278,11 +288,6 @@ void git_remote_free(git_remote *remote)
git__free(remote->push.dst); git__free(remote->push.dst);
git__free(remote->url); git__free(remote->url);
git__free(remote->name); git__free(remote->name);
if (remote->transport != NULL) { git_remote_disconnect(remote);
if (remote->transport->connected)
remote->transport->close(remote->transport);
remote->transport->free(remote->transport);
}
git__free(remote); git__free(remote);
} }