fast-export: add --signed-tags=warn-strip mode

This issues a warning while stripping signatures from signed tags, which
allows us to use it as default behaviour for remote helpers which cannot
specify how to handle signed tags.

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:06 +01:00 committed by Junio C Hamano
parent 85e7e81ccf
commit cd16c59bfa
3 changed files with 19 additions and 5 deletions

View File

@ -27,15 +27,17 @@ OPTIONS
Insert 'progress' statements every <n> objects, to be shown by Insert 'progress' statements every <n> objects, to be shown by
'git fast-import' during import. 'git fast-import' during import.
--signed-tags=(verbatim|warn|strip|abort):: --signed-tags=(verbatim|warn|warn-strip|strip|abort)::
Specify how to handle signed tags. Since any transformation Specify how to handle signed tags. Since any transformation
after the export can change the tag names (which can also happen after the export can change the tag names (which can also happen
when excluding revisions) the signatures will not match. when excluding revisions) the signatures will not match.
+ +
When asking to 'abort' (which is the default), this program will die When asking to 'abort' (which is the default), this program will die
when encountering a signed tag. With 'strip', the tags will be made when encountering a signed tag. With 'strip', the tags will silently
unsigned, with 'verbatim', they will be silently exported be made unsigned, with 'warn-strip' they will be made unsigned but a
and with 'warn', they will be exported, but you will see a warning. warning will be displayed, with 'verbatim', they will be silently
exported and with 'warn', they will be exported, but you will see a
warning.
--tag-of-filtered-object=(abort|drop|rewrite):: --tag-of-filtered-object=(abort|drop|rewrite)::
Specify how to handle tags whose tagged object is filtered out. Specify how to handle tags whose tagged object is filtered out.

View File

@ -24,7 +24,7 @@ static const char *fast_export_usage[] = {
}; };
static int progress; static int progress;
static enum { ABORT, VERBATIM, WARN, STRIP } signed_tag_mode = ABORT; static enum { ABORT, VERBATIM, WARN, WARN_STRIP, STRIP } signed_tag_mode = ABORT;
static enum { ERROR, DROP, REWRITE } tag_of_filtered_mode = ERROR; static enum { ERROR, DROP, REWRITE } tag_of_filtered_mode = ERROR;
static int fake_missing_tagger; static int fake_missing_tagger;
static int use_done_feature; static int use_done_feature;
@ -40,6 +40,8 @@ static int parse_opt_signed_tag_mode(const struct option *opt,
signed_tag_mode = VERBATIM; signed_tag_mode = VERBATIM;
else if (!strcmp(arg, "warn")) else if (!strcmp(arg, "warn"))
signed_tag_mode = WARN; signed_tag_mode = WARN;
else if (!strcmp(arg, "warn-strip"))
signed_tag_mode = WARN_STRIP;
else if (!strcmp(arg, "strip")) else if (!strcmp(arg, "strip"))
signed_tag_mode = STRIP; signed_tag_mode = STRIP;
else else
@ -428,6 +430,10 @@ static void handle_tag(const char *name, struct tag *tag)
/* fallthru */ /* fallthru */
case VERBATIM: case VERBATIM:
break; break;
case WARN_STRIP:
warning ("Stripping signature from tag %s",
sha1_to_hex(tag->object.sha1));
/* fallthru */
case STRIP: case STRIP:
message_size = signature + 1 - message; message_size = signature + 1 - message;
break; break;

View File

@ -146,6 +146,12 @@ test_expect_success 'signed-tags=strip' '
' '
test_expect_success 'signed-tags=warn-strip' '
git fast-export --signed-tags=warn-strip sign-your-name >output 2>err &&
! grep PGP output &&
test -s err
'
test_expect_success 'setup submodule' ' test_expect_success 'setup submodule' '
git checkout -f master && git checkout -f master &&