summaryrefslogtreecommitdiff
path: root/src/remote.c
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2011-11-28 08:40:40 +0100
committerVicent Marti <tanoku@gmail.com>2011-11-28 08:40:40 +0100
commitd88d4311c7e08ad0d38edae006b50e2a548c937d (patch)
tree1b26cee0c3d383043902c599893299fd8fdc5302 /src/remote.c
parentc94785a9f373b6604402ba6a301b828b80ab8cd8 (diff)
downloadlibgit2-repo-ownership.tar.gz
remote: Cleanup the remotes coderepo-ownership
- Hide the remaining transports code - Drop `git_headarray`, switch to using a callback to list refs. Makes the code cleaner.
Diffstat (limited to 'src/remote.c')
-rw-r--r--src/remote.c35
1 files changed, 25 insertions, 10 deletions
diff --git a/src/remote.c b/src/remote.c
index c6a9173af..75e861681 100644
--- a/src/remote.c
+++ b/src/remote.c
@@ -70,16 +70,21 @@ int git_remote_new(git_remote **out, git_repository *repo, const char *url, cons
memset(remote, 0x0, sizeof(git_remote));
remote->repo = repo;
+ if (git_vector_init(&remote->refs, 32, NULL) < 0) {
+ git_remote_free(remote);
+ return GIT_ENOMEM;
+ }
+
remote->url = git__strdup(url);
if (remote->url == NULL) {
- git__free(remote);
+ git_remote_free(remote);
return GIT_ENOMEM;
}
if (name != NULL) {
remote->name = git__strdup(name);
if (remote->name == NULL) {
- git__free(remote);
+ git_remote_free(remote);
return GIT_ENOMEM;
}
}
@@ -113,6 +118,11 @@ int git_remote_load(git_remote **out, git_repository *repo, const char *name)
goto cleanup;
}
+ if (git_vector_init(&remote->refs, 32, NULL) < 0) {
+ error = GIT_ENOMEM;
+ goto cleanup;
+ }
+
/* "fetch" is the longest var name we're interested in */
buf_len = strlen("remote.") + strlen(".fetch") + strlen(name) + 1;
buf = git__malloc(buf_len);
@@ -227,10 +237,14 @@ cleanup:
return error;
}
-int git_remote_ls(git_remote *remote, git_headarray *refs)
+int git_remote_ls(git_remote *remote, git_headlist_cb list_cb, void *payload)
{
- assert(remote && refs);
- return remote->transport->ls(remote->transport, refs);
+ assert(remote);
+
+ if (!remote->transport)
+ return git__throw(GIT_ERROR, "The remote is not connected");
+
+ return remote->transport->ls(remote->transport, list_cb, payload);
}
int git_remote_download(char **filename, git_remote *remote)
@@ -250,7 +264,7 @@ int git_remote_update_tips(git_remote *remote)
int error = GIT_SUCCESS;
unsigned int i = 0;
char refname[GIT_PATH_MAX];
- git_headarray *refs = &remote->refs;
+ git_vector *refs = &remote->refs;
git_remote_head *head;
git_reference *ref;
struct git_refspec *spec = &remote->fetch;
@@ -259,11 +273,11 @@ int git_remote_update_tips(git_remote *remote)
memset(refname, 0x0, sizeof(refname));
- if (refs->len == 0)
+ if (refs->length == 0)
return GIT_SUCCESS;
/* HEAD is only allowed to be the first in the list */
- head = refs->heads[0];
+ head = refs->contents[0];
if (!strcmp(head->name, GIT_HEAD_FILE)) {
error = git_reference_create_oid(&ref, remote->repo, GIT_FETCH_HEAD_FILE, &head->oid, 1);
i = 1;
@@ -272,8 +286,8 @@ int git_remote_update_tips(git_remote *remote)
return git__rethrow(error, "Failed to update FETCH_HEAD");
}
- for (; i < refs->len; ++i) {
- head = refs->heads[i];
+ for (; i < refs->length; ++i) {
+ head = refs->contents[i];
error = git_refspec_transform(refname, sizeof(refname), spec, head->name);
if (error < GIT_SUCCESS)
@@ -319,6 +333,7 @@ void git_remote_free(git_remote *remote)
git__free(remote->push.dst);
git__free(remote->url);
git__free(remote->name);
+ git_vector_free(&remote->refs);
git_remote_disconnect(remote);
git__free(remote);
}