From: Johannes Schindelin <Johannes.Schindelin@xxxxxx> 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'). Signed-off-by: Johannes Schindelin <Johannes.Schindelin@xxxxxx> Signed-off-by: Sverre Rabbelier <srabbelier@xxxxxxxxx> --- We encountered this one while staring at the code and trying to figure out if our existing solution was sufficient. 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 becef85..92743c8 100644 --- a/builtin/fast-export.c +++ b/builtin/fast-export.c @@ -512,9 +512,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--) { @@ -526,9 +537,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.6.385.g91185.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html