From a1be77cd3534c09b0710794a44a0aed6fd6c3e21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Sun, 7 Aug 2011 14:27:47 +0200 Subject: [PATCH] Be smarter about selecting wants MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There is no need to inspect what the local repository is like. Only check whether the objects exist locally. Signed-off-by: Carlos Martín Nieto --- include/git2/net.h | 3 +-- src/fetch.c | 30 ++---------------------------- 2 files changed, 3 insertions(+), 30 deletions(-) diff --git a/include/git2/net.h b/include/git2/net.h index 7c49f804b..d4f475527 100644 --- a/include/git2/net.h +++ b/include/git2/net.h @@ -52,8 +52,7 @@ GIT_BEGIN_DECL * Remote head description, given out on `ls` calls. */ struct git_remote_head { - int local:1, /* available locally */ - want:1; /* want to update */ + int local:1; /* available locally */ git_oid oid; git_oid loid; char *name; diff --git a/src/fetch.c b/src/fetch.c index e00b2e31e..ccc8aa03c 100644 --- a/src/fetch.c +++ b/src/fetch.c @@ -61,8 +61,6 @@ static int filter_wants(git_remote *remote) } for (i = 0; i < refs.len; ++i) { - char local[1024]; - git_reference *ref; git_remote_head *head = refs.heads[i]; /* If it doesn't match the refpec, we don't want it */ @@ -74,34 +72,10 @@ static int filter_wants(git_remote *remote) goto cleanup; } - /* If the local ref is the same, we don't want it either */ - error = git_refspec_transform(local, sizeof(local), spec, head->name); - if (error < GIT_SUCCESS) { - error = git__rethrow(error, "Error transforming ref name"); - goto cleanup; - } - - error = git_reference_lookup(&ref, repo, local); - /* If we don't have it locally, it's new, so we want it */ - if (error < GIT_SUCCESS && error != GIT_ENOTFOUND) { - error = git__rethrow(error, "Error looking up local ref"); - goto cleanup; - } - - if (ref != NULL) { - if (!git_oid_cmp(&head->oid, git_reference_oid(ref))) - continue; - + /* If we have the object, mark it so we don't ask for it */ + if (git_odb_exists(repo->db, &head->oid)) head->local = 1; - git_oid_cpy(&head->loid, git_reference_oid(ref)); - } - /* - * Now we know we want to have that ref, so add it as a "want" - * to the list, storing the local oid for that branch so we - * don't have to look for it again. - */ - head->want = 1; error = git_vector_insert(&list, head); if (error < GIT_SUCCESS) goto cleanup;