Re: [PATCH 3/8] bundle: give list_prerequisites() loop body its own function
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:49:02
Jonathan Nieder [off-list ref] writes:
quoted hunk
No functional change intended. Signed-off-by: Jonathan Nieder <redacted> --- bundle.c | 57 +++++++++++++++++++++++++++++++-------------------------- 1 files changed, 31 insertions(+), 26 deletions(-)diff --git a/bundle.c b/bundle.c index 0dd2acb..e90b5c5 100644 --- a/bundle.c +++ b/bundle.c@@ -193,6 +193,33 @@ static int is_tag_in_date_range(struct object *tag, struct rev_info *revs) (revs->min_age == -1 || revs->min_age > date); } +static void list_prerequisite(int bundle_fd, struct rev_info *revs, + struct commit *rev) +{ + struct strbuf buf = STRBUF_INIT; + struct pretty_print_context ctx = {0}; + enum object_type type; + unsigned long size; + + /* + * The commit buffer is needed + * to pretty-print boundary commits. + */ + rev->buffer = read_sha1_file(rev->object.sha1, &type, &size); + + strbuf_addch(&buf, '-'); + strbuf_add(&buf, sha1_to_hex(rev->object.sha1), 40); + strbuf_addch(&buf, ' '); + pretty_print_commit(CMIT_FMT_ONELINE, rev, &buf, &ctx); + strbuf_addch(&buf, '\n'); + + write_or_die(bundle_fd, buf.buf, buf.len); + + rev->object.flags |= UNINTERESTING; + add_pending_object(revs, &rev->object, buf.buf); + strbuf_release(&buf); +} + static int list_prerequisites(int bundle_fd, struct rev_info *revs, int argc, const char * const *argv) {@@ -209,33 +236,11 @@ static int list_prerequisites(int bundle_fd, struct rev_info *revs, if (prepare_revision_walk(&boundary_revs)) return error("revision walk setup failed"); - while ((rev = get_revision(&boundary_revs))) { - if (rev->object.flags & BOUNDARY) { -... - } else { + while ((rev = get_revision(revs))) { + if (rev->object.flags & BOUNDARY) + list_prerequisite(bundle_fd, revs, rev); + else rev->object.flags |= SHOWN; - }
You used to walk boundary_revs but now you walk revs that is given by the caller, exhausting the revs.pending the caller wanted to use later to feed pack_objects with? Confused...