Browse Source

Merge branch 'mg/gpg-richer-status'

The GPG verification status shown in "%G?" pretty format specifier
was not rich enough to differentiate a signature made by an expired
key, a signature made by a revoked key, etc.  New output letters
have been assigned to express them.

* mg/gpg-richer-status:
  gpg-interface: use more status letters
maint
Junio C Hamano 8 years ago
parent
commit
56d268baff
  1. 10
      Documentation/pretty-formats.txt
  2. 13
      gpg-interface.c
  3. 4
      pretty.c
  4. 13
      t/t7510-signed-commit.sh

10
Documentation/pretty-formats.txt

@ -143,8 +143,14 @@ ifndef::git-rev-list[] @@ -143,8 +143,14 @@ ifndef::git-rev-list[]
- '%N': commit notes
endif::git-rev-list[]
- '%GG': raw verification message from GPG for a signed commit
- '%G?': show "G" for a good (valid) signature, "B" for a bad signature,
"U" for a good signature with unknown validity and "N" for no signature
- '%G?': show "G" for a good (valid) signature,
"B" for a bad signature,
"U" for a good signature with unknown validity,
"X" for a good signature that has expired,
"Y" for a good signature made by an expired key,
"R" for a good signature made by a revoked key,
"E" if the signature cannot be checked (e.g. missing key)
and "N" for no signature
- '%GS': show the name of the signer for a signed commit
- '%GK': show the key used to sign a signed commit
- '%gD': reflog selector, e.g., `refs/stash@{1}` or

13
gpg-interface.c

@ -33,6 +33,10 @@ static struct { @@ -33,6 +33,10 @@ static struct {
{ 'B', "\n[GNUPG:] BADSIG " },
{ 'U', "\n[GNUPG:] TRUST_NEVER" },
{ 'U', "\n[GNUPG:] TRUST_UNDEFINED" },
{ 'E', "\n[GNUPG:] ERRSIG "},
{ 'X', "\n[GNUPG:] EXPSIG "},
{ 'Y', "\n[GNUPG:] EXPKEYSIG "},
{ 'R', "\n[GNUPG:] REVKEYSIG "},
};

void parse_gpg_output(struct signature_check *sigc)
@ -54,9 +58,12 @@ void parse_gpg_output(struct signature_check *sigc) @@ -54,9 +58,12 @@ void parse_gpg_output(struct signature_check *sigc)
/* The trust messages are not followed by key/signer information */
if (sigc->result != 'U') {
sigc->key = xmemdupz(found, 16);
found += 17;
next = strchrnul(found, '\n');
sigc->signer = xmemdupz(found, next - found);
/* The ERRSIG message is not followed by signer information */
if (sigc-> result != 'E') {
found += 17;
next = strchrnul(found, '\n');
sigc->signer = xmemdupz(found, next - found);
}
}
}
}

4
pretty.c

@ -1230,8 +1230,12 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */ @@ -1230,8 +1230,12 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
switch (c->signature_check.result) {
case 'G':
case 'B':
case 'E':
case 'U':
case 'N':
case 'X':
case 'Y':
case 'R':
strbuf_addch(sb, c->signature_check.result);
}
break;

13
t/t7510-signed-commit.sh

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@

test_description='signed commit tests'
. ./test-lib.sh
GNUPGHOME_NOT_USED=$GNUPGHOME
. "$TEST_DIRECTORY/lib-gpg.sh"

test_expect_success GPG 'create signed commits' '
@ -190,7 +191,7 @@ test_expect_success GPG 'show bad signature with custom format' ' @@ -190,7 +191,7 @@ test_expect_success GPG 'show bad signature with custom format' '
test_cmp expect actual
'

test_expect_success GPG 'show unknown signature with custom format' '
test_expect_success GPG 'show untrusted signature with custom format' '
cat >expect <<-\EOF &&
U
61092E85B7227189
@ -200,6 +201,16 @@ test_expect_success GPG 'show unknown signature with custom format' ' @@ -200,6 +201,16 @@ test_expect_success GPG 'show unknown signature with custom format' '
test_cmp expect actual
'

test_expect_success GPG 'show unknown signature with custom format' '
cat >expect <<-\EOF &&
E
61092E85B7227189

EOF
GNUPGHOME="$GNUPGHOME_NOT_USED" git log -1 --format="%G?%n%GK%n%GS" eighth-signed-alt >actual &&
test_cmp expect actual
'

test_expect_success GPG 'show lack of signature with custom format' '
cat >expect <<-\EOF &&
N

Loading…
Cancel
Save