When an object has already been exported (and thus is in the marks) it's flagged as SHOWN, so it will not be exported again, even if in a later time it's exported through a different ref. We don't need the object to be exported again, but we want the ref updated, which doesn't happen. Since we can't know if a ref was exported or not, let's just assume that if the commit was marked (flags & SHOWN), the user still wants the ref updated. IOW: If it's specified in the command line, it will get updated, regardless of wihether or not the object was marked. So: % git branch test master % git fast-export $mark_flags master % git fast-export $mark_flags test Would export 'test' properly. Additionally, this fixes issues with remote helpers; now they can push refs wich objects have already been exported, and a few other issues as well. So update the tests accordingly. Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> --- builtin/fast-export.c | 10 +++++++--- t/t5801-remote-helpers.sh | 24 ++++++++++-------------- t/t9350-fast-export.sh | 15 +++++++++++++++ 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/builtin/fast-export.c b/builtin/fast-export.c index 4f3c35f..26f6d1c 100644 --- a/builtin/fast-export.c +++ b/builtin/fast-export.c @@ -523,10 +523,14 @@ static void get_tags_and_duplicates(struct object_array *pending, typename(e->item->type)); continue; } - if (commit->util) - /* more than one name for the same object */ + + /* + * This ref will not be updated through a commit, lets make + * sure it gets properly upddated eventually. + */ + if (commit->util || commit->object.flags & SHOWN) string_list_append(extra_refs, full_name)->util = commit; - else + if (!commit->util) commit->util = full_name; } } diff --git a/t/t5801-remote-helpers.sh b/t/t5801-remote-helpers.sh index 31940c9..b6cc5c0 100644 --- a/t/t5801-remote-helpers.sh +++ b/t/t5801-remote-helpers.sh @@ -63,18 +63,6 @@ test_expect_success 'fetch new branch' ' compare_refs server HEAD local FETCH_HEAD ' -# -# This is only needed because of a bug not detected by this script. It will be -# fixed shortly, but for now lets not cause regressions. -# -test_expect_success 'bump commit in server' ' - (cd server && - git checkout master && - echo content >>file && - git commit -a -m four) && - compare_refs server HEAD server HEAD -' - test_expect_success 'fetch multiple branches' ' (cd local && git fetch @@ -110,13 +98,13 @@ test_expect_failure 'push new branch with old:new refspec' ' compare_refs local HEAD server refs/heads/new-refspec ' -test_expect_failure 'cloning without refspec' ' +test_expect_success 'cloning without refspec' ' GIT_REMOTE_TESTGIT_REFSPEC="" \ git clone "testgit::${PWD}/server" local2 && compare_refs local2 HEAD server HEAD ' -test_expect_failure 'pulling without refspecs' ' +test_expect_success 'pulling without refspecs' ' (cd local2 && git reset --hard && GIT_REMOTE_TESTGIT_REFSPEC="" git pull) && @@ -159,4 +147,12 @@ test_expect_failure 'pushing without marks' ' compare_refs local2 HEAD server HEAD ' +test_expect_success 'push ref with existing object' ' + (cd local && + git branch dup master && + git push origin dup + ) && + compare_refs local dup server dup +' + test_done diff --git a/t/t9350-fast-export.sh b/t/t9350-fast-export.sh index b7d3009..67a7372 100755 --- a/t/t9350-fast-export.sh +++ b/t/t9350-fast-export.sh @@ -454,4 +454,19 @@ test_expect_success 'test biridectionality' ' git fast-import --export-marks=marks-cur --import-marks=marks-cur ' +cat > expected << EOF +reset refs/heads/master +from :12 + +EOF + +test_expect_success 'refs are updated even if no commits need to be exported' ' + echo -n > tmp-marks && + git fast-export --import-marks=tmp-marks \ + --export-marks=tmp-marks master > /dev/null && + git fast-export --import-marks=tmp-marks \ + --export-marks=tmp-marks master > actual && + 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