diff options
| -rw-r--r-- | Documentation/git-mktag.txt | 5 | ||||
| -rw-r--r-- | builtin/mktag.c | 11 | ||||
| -rwxr-xr-x | t/t3800-mktag.sh | 14 |
3 files changed, 28 insertions, 2 deletions
diff --git a/Documentation/git-mktag.txt b/Documentation/git-mktag.txt index fa070e21a0..79813ff8df 100644 --- a/Documentation/git-mktag.txt +++ b/Documentation/git-mktag.txt @@ -32,7 +32,10 @@ would run by default in that all `fsck.<msg-id>` messages are promoted from warnings to errors (so e.g. a missing "tagger" line is an error). Extra headers in the object are also an error under mktag, but ignored -by linkgit:git-fsck[1] +by linkgit:git-fsck[1]. This extra check can be turned off by setting +the appropriate `fsck.<msg-id>` varible: + + git -c fsck.extraHeaderEntry=ignore mktag <my-tag-with-headers Tag Format ---------- diff --git a/builtin/mktag.c b/builtin/mktag.c index 4dd35bc79e..373926d7e0 100644 --- a/builtin/mktag.c +++ b/builtin/mktag.c @@ -3,6 +3,14 @@ #include "replace-object.h" #include "object-store.h" #include "fsck.h" +#include "config.h" + +static struct fsck_options fsck_options = FSCK_OPTIONS_STRICT; + +static int mktag_config(const char *var, const char *value, void *cb) +{ + return fsck_config_internal(var, value, cb, &fsck_options); +} static int mktag_fsck_error_func(struct fsck_options *o, const struct object_id *oid, @@ -53,7 +61,6 @@ static int verify_object_in_tag(struct object_id *tagged_oid, int *tagged_type) int cmd_mktag(int argc, const char **argv, const char *prefix) { struct strbuf buf = STRBUF_INIT; - struct fsck_options fsck_options = FSCK_OPTIONS_STRICT; struct object_id tagged_oid; int tagged_type; struct object_id result; @@ -66,6 +73,8 @@ int cmd_mktag(int argc, const char **argv, const char *prefix) fsck_options.error_func = mktag_fsck_error_func; fsck_set_msg_type(&fsck_options, "extraheaderentry", "warn"); + /* config might set fsck.extraHeaderEntry=* again */ + git_config(mktag_config, NULL); if (fsck_tag_standalone(NULL, buf.buf, buf.len, &fsck_options, &tagged_oid, &tagged_type)) die("tag on stdin did not pass our strict fsck check"); diff --git a/t/t3800-mktag.sh b/t/t3800-mktag.sh index 5e96f69e69..929bb9f492 100755 --- a/t/t3800-mktag.sh +++ b/t/t3800-mktag.sh @@ -412,6 +412,20 @@ EOF check_verify_failure 'detect invalid header entry' \ '^error:.* extraHeaderEntry:' +test_expect_success 'invalid header entry config & fsck' ' + test_must_fail git mktag <tag.sig && + test_must_fail git -c fsck.extraHeaderEntry=error mktag <tag.sig && + test_must_fail git -c fsck.extraHeaderEntry=warn mktag <tag.sig && + git -c fsck.extraHeaderEntry=ignore mktag <tag.sig && + git fsck && + env GIT_TEST_GETTEXT_POISON=false \ + git -c fsck.extraHeaderEntry=warn fsck 2>err && + grep "warning .*extraHeaderEntry:" err && + test_must_fail env GIT_TEST_GETTEXT_POISON=false \ + git -c fsck.extraHeaderEntry=error 2>err fsck && + grep "error .* extraHeaderEntry:" err +' + cat >tag.sig <<EOF object $head type commit |
