summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar John Keeping <john@keeping.me.uk>2013-04-14 11:57:08 +0100
committerLibravatar Junio C Hamano <gitster@pobox.com>2013-04-15 09:04:43 -0700
commit0d957a4df5248b53c4160babdcfa0cefba848c93 (patch)
treee73c718b78bbac9f1aad749c7ff9d5fe2e29bd14
parenttransport-helper: pass --signed-tags=warn-strip to fast-export (diff)
downloadtgif-0d957a4df5248b53c4160babdcfa0cefba848c93.tar.xz
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>
-rw-r--r--Documentation/gitremote-helpers.txt4
-rwxr-xr-xgit-remote-testgit1
-rwxr-xr-xt/t5801-remote-helpers.sh12
-rw-r--r--transport-helper.c6
4 files changed, 21 insertions, 2 deletions
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 <file> before processing any input. For details,
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'.
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)