git-push --mirror was incorrectly mirroring refs/remotes/ previously. This patch fixes it to follow the documentation which is to mirror only refs/heads/ and refs/tags/. Signed-off-by: Bryan Drewery <bryan@xxxxxxxxxx> --- remote.c | 4 +++- t/t5517-push-mirror.sh | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletions(-) diff --git a/remote.c b/remote.c index d66e2f3..70cfab8 100644 --- a/remote.c +++ b/remote.c @@ -1123,8 +1123,10 @@ int match_refs(struct ref *src, struct ref *dst, struct ref ***dst_tail, * "matching refs"; traditionally we pushed everything * including refs outside refs/heads/ hierarchy, but * that does not make much sense these days. + * Push only refs/heads/ and refs/tags/ when mirroring + * otherwise only matching refs/heads/ */ - if (!send_mirror && prefixcmp(src->name, "refs/heads/")) + if ((!send_mirror || prefixcmp(src->name, "refs/tags/")) && prefixcmp(src->name, "refs/heads/")) continue; dst_name = xstrdup(src->name); diff --git a/t/t5517-push-mirror.sh b/t/t5517-push-mirror.sh index ea49ded..3fc7dc2 100755 --- a/t/t5517-push-mirror.sh +++ b/t/t5517-push-mirror.sh @@ -264,4 +264,25 @@ test_expect_success 'remote.foo.mirror=no has no effect' ' ' +# REMOTES test +test_expect_success 'push mirror does not push remotes' ' + + mk_repo_pair && + ( + cd master && + echo one >foo && git add foo && git commit -m one && + git push --mirror up && + git remote update && + git push --mirror up + ) && + master_master=$(cd master && git show-ref -s --verify refs/heads/master) && + mirror_master=$(cd mirror && git show-ref -s --verify refs/heads/master) && + test "$master_master" = "$mirror_master" && + ( + cd mirror && + invert git show-ref -s --verify refs/remotes/up/master + ) +' + + test_done -- 1.6.2.5 -- 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