They have been marked as UNINTERESTING for a reason, lets respect that. Currently the first ref is handled properly, but not the rest, so: % git fast-export master ^master Would currently throw a reset for master (2nd ref), which is not what we want. % git fast-export master ^foo ^bar ^roo % git fast-export master salsa..tacos Even if all these refs point to the same object; foo, bar, roo, salsa, and tacos would all get a reset, and to a non-existing object (invalid mark :0). And even more, it would only happen if the ref is pointing to exactly the same commit, but not otherwise: % git fast-export ^next next reset refs/heads/next from :0 % git fast-export ^next next^{commit} # nothing % git fast-export ^next next~0 # nothing % git fast-export ^next next~1 # nothing % git fast-export ^next next~2 # nothing The reason this happens is that before traversing the commits, fast-export checks if any of the refs point to the same object, and any duplicated ref gets added to a list in order to issue 'reset' commands after the traversing. Unfortunately, it's not even checking if the commit is flagged as UNINTERESTING. The fix of course, is to do precisely that. The current behavior is most certainly not what we want. After this patch, nothing gets exported, because nothing was selected (everything is UNINTERESTING). Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> --- builtin/fast-export.c | 4 +++- t/t9350-fast-export.sh | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/builtin/fast-export.c b/builtin/fast-export.c index 26f6d1c..7a310e4 100644 --- a/builtin/fast-export.c +++ b/builtin/fast-export.c @@ -529,7 +529,9 @@ static void get_tags_and_duplicates(struct object_array *pending, * sure it gets properly upddated eventually. */ if (commit->util || commit->object.flags & SHOWN) - string_list_append(extra_refs, full_name)->util = commit; + if (!(commit->object.flags & UNINTERESTING)) + string_list_append(extra_refs, full_name)->util = commit; + if (!commit->util) commit->util = full_name; } diff --git a/t/t9350-fast-export.sh b/t/t9350-fast-export.sh index 67a7372..9b53ba7 100755 --- a/t/t9350-fast-export.sh +++ b/t/t9350-fast-export.sh @@ -469,4 +469,10 @@ test_expect_success 'refs are updated even if no commits need to be exported' ' test_cmp expected actual ' +test_expect_success 'proper extra refs handling' ' + git fast-export master ^master master..master > actual && + echo -n > expected && + test_cmp expected actual +' + test_done -- 1.8.0 -- 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