diff options
author | Elijah Newren <newren@gmail.com> | 2018-11-15 23:59:51 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-11-17 18:43:51 +0900 |
commit | f129c4275c81e908c1d14d1ac1e72f720e2aebb7 (patch) | |
tree | 3ef5fe6c93f03ddf129de99e1d394a85ac372d34 /builtin/fast-export.c | |
parent | fast-export: avoid dying when filtering by paths and old tags exist (diff) | |
download | tgif-f129c4275c81e908c1d14d1ac1e72f720e2aebb7.tar.xz |
fast-export: move commit rewriting logic into a function for reuse
Logic to replace a filtered commit with an unfiltered ancestor is useful
elsewhere; put it into a function we can call.
Signed-off-by: Elijah Newren <newren@gmail.com>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/fast-export.c')
-rw-r--r-- | builtin/fast-export.c | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/builtin/fast-export.c b/builtin/fast-export.c index 7d50f5414e..43e98a38a8 100644 --- a/builtin/fast-export.c +++ b/builtin/fast-export.c @@ -187,6 +187,22 @@ static int get_object_mark(struct object *object) return ptr_to_mark(decoration); } +static struct commit *rewrite_commit(struct commit *p) +{ + for (;;) { + if (p->parents && p->parents->next) + break; + if (p->object.flags & UNINTERESTING) + break; + if (!(p->object.flags & TREESAME)) + break; + if (!p->parents) + return NULL; + p = p->parents->item; + } + return p; +} + static void show_progress(void) { static int counter = 0; @@ -767,21 +783,12 @@ static void handle_tag(const char *name, struct tag *tag) oid_to_hex(&tag->object.oid), type_name(tagged->type)); } - p = (struct commit *)tagged; - for (;;) { - if (p->parents && p->parents->next) - break; - if (p->object.flags & UNINTERESTING) - break; - if (!(p->object.flags & TREESAME)) - break; - if (!p->parents) { - printf("reset %s\nfrom %s\n\n", - name, oid_to_hex(&null_oid)); - free(buf); - return; - } - p = p->parents->item; + p = rewrite_commit((struct commit *)tagged); + if (!p) { + printf("reset %s\nfrom %s\n\n", + name, oid_to_hex(&null_oid)); + free(buf); + return; } tagged_mark = get_object_mark(&p->object); } |