From: mhagger@alum.mit.edu
To: Junio C Hamano <gitster@pobox.com>
Cc: Jeff King <peff@peff.net>, Philip Oakley <philipoakley@iee.org>,
git@vger.kernel.org, Michael Haggerty <mhagger@alum.mit.edu>
Subject: [PATCH v2 11/17] filter_refs(): do not leave gaps in return_refs
Date: Sat, 25 Aug 2012 08:44:21 +0200 [thread overview]
Message-ID: <1345877067-11841-12-git-send-email-mhagger@alum.mit.edu> (raw)
In-Reply-To: <1345877067-11841-1-git-send-email-mhagger@alum.mit.edu>
From: Michael Haggerty <mhagger@alum.mit.edu>
It used to be that this function processed refnames in some arbitrary
order but wanted to return them in the order that they were requested,
not the order that they were processed. Now, the refnames are
processed in sorted order, so there is no reason to go to the extra
effort.
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
---
builtin/fetch-pack.c | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c
index ca1ddd9..a995357 100644
--- a/builtin/fetch-pack.c
+++ b/builtin/fetch-pack.c
@@ -527,14 +527,13 @@ static void filter_refs(struct ref **refs, int *nr_heads, char **heads)
struct ref *newlist = NULL;
struct ref **newtail = &newlist;
struct ref *ref, *next;
- int head_pos;
+ int head_pos = 0, matched = 0;
if (*nr_heads && !args.fetch_all)
return_refs = xcalloc(*nr_heads, sizeof(struct ref *));
else
return_refs = NULL;
- head_pos = 0;
for (ref = *refs; ref; ref = next) {
next = ref->next;
if (!memcmp(ref->name, "refs/", 5) &&
@@ -554,7 +553,7 @@ static void filter_refs(struct ref **refs, int *nr_heads, char **heads)
if (cmp < 0) /* definitely do not have it */
break;
else if (cmp == 0) { /* definitely have it */
- return_refs[head_pos] = ref;
+ return_refs[matched++] = ref;
heads[head_pos++][0] = '\0';
break;
}
@@ -569,13 +568,11 @@ static void filter_refs(struct ref **refs, int *nr_heads, char **heads)
if (!args.fetch_all) {
int i;
- for (i = 0; i < *nr_heads; i++) {
+ for (i = 0; i < matched; i++) {
ref = return_refs[i];
- if (ref) {
- *newtail = ref;
- ref->next = NULL;
- newtail = &ref->next;
- }
+ *newtail = ref;
+ ref->next = NULL;
+ newtail = &ref->next;
}
free(return_refs);
}
--
1.7.11.3
next prev parent reply other threads:[~2012-08-25 6:54 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-25 6:44 [PATCH v2 00/17] Clean up how fetch_pack() handles the heads list mhagger
2012-08-25 6:44 ` [PATCH v2 01/17] t5500: add tests of error output for missing refs mhagger
2012-08-25 6:44 ` [PATCH v2 02/17] Rename static function fetch_pack() to http_fetch_pack() mhagger
2012-08-25 6:44 ` [PATCH v2 03/17] Fix formatting mhagger
2012-08-25 6:44 ` [PATCH v2 04/17] Name local variables more consistently mhagger
2012-08-25 6:44 ` [PATCH v2 05/17] Do not check the same head_pos twice mhagger
2012-08-25 6:44 ` [PATCH v2 06/17] Let fetch_pack() inform caller about number of unique heads mhagger
2012-08-25 6:44 ` [PATCH v2 07/17] Pass nr_heads to do_pack_ref() by reference mhagger
2012-08-25 6:44 ` [PATCH v2 08/17] Pass nr_heads to everything_local() " mhagger
2012-08-25 6:44 ` [PATCH v2 09/17] Pass nr_heads to filter_refs() " mhagger
2012-08-25 6:44 ` [PATCH v2 10/17] Remove ineffective optimization mhagger
2012-08-25 6:44 ` mhagger [this message]
2012-08-25 6:44 ` [PATCH v2 12/17] filter_refs(): compress unmatched refs in heads array mhagger
2012-08-25 6:44 ` [PATCH v2 13/17] cmd_fetch_pack: return early if finish_connect() returns an error mhagger
2012-08-25 6:44 ` [PATCH v2 14/17] Report missing refs even if no existing refs were received mhagger
2012-08-25 6:44 ` [PATCH v2 15/17] cmd_fetch_pack(): simplify computation of return value mhagger
2012-08-25 6:44 ` [PATCH v2 16/17] fetch_pack(): free matching heads mhagger
2012-08-25 6:44 ` [PATCH v2 17/17] filter_refs(): simplify logic mhagger
2012-08-26 17:20 ` [PATCH v2 00/17] Clean up how fetch_pack() handles the heads list Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1345877067-11841-12-git-send-email-mhagger@alum.mit.edu \
--to=mhagger@alum.mit.edu \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
--cc=philipoakley@iee.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).