From: Sverre Rabbelier Date: Sat, 05 Nov 2011 23:23:26 GMT Subject: [PATCH 2/3] fast-export: do not refer to non-existing marks Message-ID: <1320535407-4933-3-git-send-email-srabbelier@gmail.com> In-Reply-To: <1320535407-4933-1-git-send-email-srabbelier@gmail.com> From: Johannes Schindelin When calling `git fast-export a..a b` when a and b refer to the same commit, nothing would be exported, and an incorrect reset line would be printed for b ('from :0'). Extract a handle_reset function that deals with this, which can then be re-used in a later commit. Signed-off-by: Johannes Schindelin Signed-off-by: Sverre Rabbelier --- builtin/fast-export.c | 17 +++++++++++++---- 1 files changed, 13 insertions(+), 4 deletions(-) diff --git a/builtin/fast-export.c b/builtin/fast-export.c index 9836e6b..c4c4391 100644 --- a/builtin/fast-export.c +++ b/builtin/fast-export.c @@ -529,9 +529,20 @@ static void get_tags_and_duplicates(struct object_array *pending, } } +static void handle_reset(const char *name, struct object *object) +{ + int mark = get_object_mark(object); + + if (mark) + printf("reset %s\nfrom :%d\n\n", name, + get_object_mark(object)); + else + printf("reset %s\nfrom %s\n\n", name, + sha1_to_hex(object->sha1)); +} + static void handle_tags_and_duplicates(struct string_list *extra_refs) { - struct commit *commit; int i; for (i = extra_refs->nr - 1; i >= 0; i--) { @@ -543,9 +554,7 @@ static void handle_tags_and_duplicates(struct string_list *extra_refs) break; case OBJ_COMMIT: /* create refs pointing to already seen commits */ - commit = (struct commit *)object; - printf("reset %s\nfrom :%d\n\n", name, - get_object_mark(&commit->object)); + handle_reset(name, object); show_progress(); break; } -- 1.7.8.rc0.36.g67522.dirty