From: John Keeping Date: Sun, 14 Apr 2013 10:57:08 +0000 (+0100) Subject: transport-helper: add 'signed-tags' capability X-Git-Tag: v1.8.3-rc0~18^2 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/0d957a4df5248b53c4160babdcfa0cefba848c93 transport-helper: add 'signed-tags' capability This allows a remote helper using the 'export' protocol to specify that it supports signed tags, changing the handing from 'warn-strip' to 'verbatim'. Signed-off-by: John Keeping Signed-off-by: Junio C Hamano --- diff --git a/Documentation/gitremote-helpers.txt b/Documentation/gitremote-helpers.txt index f506031ae4..da746419b3 100644 --- a/Documentation/gitremote-helpers.txt +++ b/Documentation/gitremote-helpers.txt @@ -202,6 +202,10 @@ capability then it should advertise `refspec *:*`. marks specified in before processing any input. For details, read up on '--import-marks=' in linkgit:git-fast-export[1]. +'signed-tags':: + This modifies the 'export' capability, instructing Git to pass + '--signed-tags=verbatim' to linkgit:git-fast-export[1]. In the + absence of this capability, Git will use '--signed-tags=warn-strip'. diff --git a/git-remote-testgit b/git-remote-testgit index b395c8de59..e7ed3a33e6 100755 --- a/git-remote-testgit +++ b/git-remote-testgit @@ -38,6 +38,7 @@ do echo "*import-marks $gitmarks" echo "*export-marks $gitmarks" fi + test -n "$GIT_REMOTE_TESTGIT_SIGNED_TAGS" && echo "signed-tags" echo ;; list) diff --git a/t/t5801-remote-helpers.sh b/t/t5801-remote-helpers.sh index 9b287db650..69212cdde1 100755 --- a/t/t5801-remote-helpers.sh +++ b/t/t5801-remote-helpers.sh @@ -173,7 +173,17 @@ test_expect_success GPG 'push signed tag' ' git tag -s -m signed-tag signed-tag && git push origin signed-tag ) && - compare_refs local signed-tag^{} server signed-tag^{} + compare_refs local signed-tag^{} server signed-tag^{} && + test_must_fail compare_refs local signed-tag server signed-tag +' + +test_expect_success GPG 'push signed tag with signed-tags capability' ' + (cd local && + git checkout master && + git tag -s -m signed-tag signed-tag-2 && + GIT_REMOTE_TESTGIT_SIGNED_TAGS=1 git push origin signed-tag-2 + ) && + compare_refs local signed-tag-2 server signed-tag-2 ' test_done diff --git a/transport-helper.c b/transport-helper.c index 3ce825989e..5f8d075ed8 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -25,6 +25,7 @@ struct helper_data { option : 1, push : 1, connect : 1, + signed_tags : 1, no_disconnect_req : 1; char *export_marks; char *import_marks; @@ -191,6 +192,8 @@ static struct child_process *get_helper(struct transport *transport) refspecs[refspec_nr++] = xstrdup(capname + strlen("refspec ")); } else if (!strcmp(capname, "connect")) { data->connect = 1; + } else if (!strcmp(capname, "signed-tags")) { + data->signed_tags = 1; } else if (!prefixcmp(capname, "export-marks ")) { struct strbuf arg = STRBUF_INIT; strbuf_addstr(&arg, "--export-marks="); @@ -413,7 +416,8 @@ static int get_exporter(struct transport *transport, fastexport->argv = xcalloc(6 + revlist_args->nr, sizeof(*fastexport->argv)); fastexport->argv[argc++] = "fast-export"; fastexport->argv[argc++] = "--use-done-feature"; - fastexport->argv[argc++] = "--signed-tags=warn-strip"; + fastexport->argv[argc++] = data->signed_tags ? + "--signed-tags=verbatim" : "--signed-tags=warn-strip"; if (data->export_marks) fastexport->argv[argc++] = data->export_marks; if (data->import_marks)