[PATCH 2/3] transport-helper: pass --signed-tags=warn-strip to fast-export
- From
John Keeping <john@keeping.me.uk>
- Date
- Apr 14, 2013, 10:57 UTC
- Message-ID
- <1d7cbf61d07f1f0490806f7516c622087ebed05d.1365936811.git.john@keeping.me.uk>
- In-Reply-To
- <cover.1365936811.git.john@keeping.me.uk>
Currently, attempting to push a signed tag to a remote helper which uses fast-export results in the remote helper failing because the default fast-export action for signed tags is "abort". This is not helpful for users because there is no way to pass additional arguments to fast-export here, either from the remote helper or from the command line.
In general, the signature will be invalidated by whatever transformation a remote helper performs on a tag to push it to a repository in a different format so the correct behaviour is to strip the tag. Doing this silently may surprise people, so use "warn-strip" to issue a warning when a signed tag is encountered.
Signed-off-by: John Keeping <john@keeping.me.uk> --- t/t5801-remote-helpers.sh | 10 ++++++++++ transport-helper.c | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/t/t5801-remote-helpers.sh b/t/t5801-remote-helpers.sh index f387027..9b287db 100755 --- a/t/t5801-remote-helpers.sh +++ b/t/t5801-remote-helpers.sh @@ -6,6 +6,7 @@ test_description='Test remote-helper import and export commands' . ./test-lib.sh +. "$TEST_DIRECTORY"/lib-gpg.sh if ! type "${BASH-bash}" >/dev/null 2>&1; then skip_all='skipping remote-testgit tests, bash not available' @@ -166,4 +167,13 @@ test_expect_success 'push ref with existing object' ' compare_refs local dup server dup ' +test_expect_success GPG 'push signed tag' ' + (cd local && + git checkout master && + git tag -s -m signed-tag signed-tag && + git push origin signed-tag + ) && + compare_refs local signed-tag^{} server signed-tag^{} +' + test_done diff --git a/transport-helper.c b/transport-helper.c index dcd8d97..3ce8259 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -410,9 +410,10 @@ static int get_exporter(struct transport *transport, /* we need to duplicate helper->in because we want to use it after * fastexport is done with it. */ fastexport->out = dup(helper->in); - fastexport->argv = xcalloc(5 + revlist_args->nr, sizeof(*fastexport->argv)); + 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"; if (data->export_marks) fastexport->argv[argc++] = data->export_marks; if (data->import_marks)
-- 1.8.2.694.ga76e9c3.dirty