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 <john@keeping.me.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
John Keeping 2013-04-14 11:57:08 +01:00 committed by Junio C Hamano
parent b8bd826f3a
commit 0d957a4df5
4 changed files with 21 additions and 2 deletions

View File

@ -202,6 +202,10 @@ capability then it should advertise `refspec *:*`.
marks specified in <file> before processing any input. For details, marks specified in <file> before processing any input. For details,
read up on '--import-marks=<file>' in linkgit:git-fast-export[1]. read up on '--import-marks=<file>' 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'.

View File

@ -38,6 +38,7 @@ do
echo "*import-marks $gitmarks" echo "*import-marks $gitmarks"
echo "*export-marks $gitmarks" echo "*export-marks $gitmarks"
fi fi
test -n "$GIT_REMOTE_TESTGIT_SIGNED_TAGS" && echo "signed-tags"
echo echo
;; ;;
list) list)

View File

@ -173,7 +173,17 @@ test_expect_success GPG 'push signed tag' '
git tag -s -m signed-tag signed-tag && git tag -s -m signed-tag signed-tag &&
git push origin 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 test_done

View File

@ -25,6 +25,7 @@ struct helper_data {
option : 1, option : 1,
push : 1, push : 1,
connect : 1, connect : 1,
signed_tags : 1,
no_disconnect_req : 1; no_disconnect_req : 1;
char *export_marks; char *export_marks;
char *import_marks; char *import_marks;
@ -191,6 +192,8 @@ static struct child_process *get_helper(struct transport *transport)
refspecs[refspec_nr++] = xstrdup(capname + strlen("refspec ")); refspecs[refspec_nr++] = xstrdup(capname + strlen("refspec "));
} else if (!strcmp(capname, "connect")) { } else if (!strcmp(capname, "connect")) {
data->connect = 1; data->connect = 1;
} else if (!strcmp(capname, "signed-tags")) {
data->signed_tags = 1;
} else if (!prefixcmp(capname, "export-marks ")) { } else if (!prefixcmp(capname, "export-marks ")) {
struct strbuf arg = STRBUF_INIT; struct strbuf arg = STRBUF_INIT;
strbuf_addstr(&arg, "--export-marks="); 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 = xcalloc(6 + revlist_args->nr, sizeof(*fastexport->argv));
fastexport->argv[argc++] = "fast-export"; fastexport->argv[argc++] = "fast-export";
fastexport->argv[argc++] = "--use-done-feature"; 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) if (data->export_marks)
fastexport->argv[argc++] = data->export_marks; fastexport->argv[argc++] = data->export_marks;
if (data->import_marks) if (data->import_marks)