diff options
author | Carlos Martín Nieto <carlos@cmartin.tk> | 2011-08-07 14:27:47 +0200 |
---|---|---|
committer | Vicent Marti <tanoku@gmail.com> | 2011-08-18 02:34:09 +0200 |
commit | a1be77cd3534c09b0710794a44a0aed6fd6c3e21 (patch) | |
tree | 5ae5b3e822032983cbb729a1708ab1b49af05820 /src/fetch.c | |
parent | 1564db11fe291eb21b5f57a063deb482cedf323d (diff) | |
download | libgit2-a1be77cd3534c09b0710794a44a0aed6fd6c3e21.tar.gz |
Be smarter about selecting wants
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 <carlos@cmartin.tk>
Diffstat (limited to 'src/fetch.c')
-rw-r--r-- | src/fetch.c | 30 |
1 files changed, 2 insertions, 28 deletions
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; |