mirror of
https://git.notmuchmail.org/git/notmuch
synced 2025-02-17 23:53:15 +01:00
cli: implement structured output version 4
Since the error field is unused by the emacs front end, no changes are needed other than bumping the format version number. As it is, this is a bit overengineered, but it will reduce duplication when we support gmime 3.0
This commit is contained in:
parent
9eacd7d367
commit
e1b7d32db0
6 changed files with 57 additions and 11 deletions
|
@ -30,7 +30,7 @@ A thread is a forest or list of trees. A tree is a two element
|
||||||
list where the first element is a message, and the second element
|
list where the first element is a message, and the second element
|
||||||
is a possibly empty forest of replies.
|
is a possibly empty forest of replies.
|
||||||
"
|
"
|
||||||
(let ((args '("show" "--format=sexp" "--format-version=3")))
|
(let ((args '("show" "--format=sexp" "--format-version=4")))
|
||||||
(if notmuch-show-process-crypto
|
(if notmuch-show-process-crypto
|
||||||
(setq args (append args '("--decrypt"))))
|
(setq args (append args '("--decrypt"))))
|
||||||
(setq args (append args search-terms))
|
(setq args (append args search-terms))
|
||||||
|
|
|
@ -145,7 +145,7 @@ chomp_newline (char *str)
|
||||||
* this. New (required) map fields can be added without increasing
|
* this. New (required) map fields can be added without increasing
|
||||||
* this.
|
* this.
|
||||||
*/
|
*/
|
||||||
#define NOTMUCH_FORMAT_CUR 3
|
#define NOTMUCH_FORMAT_CUR 4
|
||||||
/* The minimum supported structured output format version. Requests
|
/* The minimum supported structured output format version. Requests
|
||||||
* for format versions below this will return an error. */
|
* for format versions below this will return an error. */
|
||||||
#define NOTMUCH_FORMAT_MIN 1
|
#define NOTMUCH_FORMAT_MIN 1
|
||||||
|
|
|
@ -340,6 +340,48 @@ signature_status_to_string (GMimeSignatureStatus x)
|
||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Print signature flags */
|
||||||
|
struct key_map_struct {
|
||||||
|
GMimeSignatureError bit;
|
||||||
|
const char * string;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
do_format_signature_errors (sprinter_t *sp, struct key_map_struct *key_map,
|
||||||
|
unsigned int array_map_len, GMimeSignatureError errors) {
|
||||||
|
sp->map_key (sp, "errors");
|
||||||
|
sp->begin_map (sp);
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < array_map_len; i++) {
|
||||||
|
if (errors & key_map[i].bit) {
|
||||||
|
sp->map_key (sp, key_map[i].string);
|
||||||
|
sp->boolean (sp, TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sp->end (sp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
format_signature_errors (sprinter_t *sp, GMimeSignature *signature)
|
||||||
|
{
|
||||||
|
GMimeSignatureError errors = g_mime_signature_get_errors (signature);
|
||||||
|
|
||||||
|
if (errors == GMIME_SIGNATURE_ERROR_NONE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
struct key_map_struct key_map[] = {
|
||||||
|
{ GMIME_SIGNATURE_ERROR_EXPSIG, "sig-expired" },
|
||||||
|
{ GMIME_SIGNATURE_ERROR_NO_PUBKEY, "key-missing"},
|
||||||
|
{ GMIME_SIGNATURE_ERROR_EXPKEYSIG, "key-expired"},
|
||||||
|
{ GMIME_SIGNATURE_ERROR_REVKEYSIG, "key-revoked"},
|
||||||
|
{ GMIME_SIGNATURE_ERROR_UNSUPP_ALGO, "alg-unsupported"},
|
||||||
|
};
|
||||||
|
|
||||||
|
do_format_signature_errors (sp, key_map, ARRAY_SIZE(key_map), errors);
|
||||||
|
}
|
||||||
|
|
||||||
/* Signature status sprinter (GMime 2.6) */
|
/* Signature status sprinter (GMime 2.6) */
|
||||||
static void
|
static void
|
||||||
format_part_sigstatus_sprinter (sprinter_t *sp, mime_node_t *node)
|
format_part_sigstatus_sprinter (sprinter_t *sp, mime_node_t *node)
|
||||||
|
@ -404,11 +446,15 @@ format_part_sigstatus_sprinter (sprinter_t *sp, mime_node_t *node)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (notmuch_format_version <= 3) {
|
||||||
GMimeSignatureError errors = g_mime_signature_get_errors (signature);
|
GMimeSignatureError errors = g_mime_signature_get_errors (signature);
|
||||||
if (errors != GMIME_SIGNATURE_ERROR_NONE) {
|
if (errors != GMIME_SIGNATURE_ERROR_NONE) {
|
||||||
sp->map_key (sp, "errors");
|
sp->map_key (sp, "errors");
|
||||||
sp->integer (sp, errors);
|
sp->integer (sp, errors);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
format_signature_errors (sp, signature);
|
||||||
|
}
|
||||||
|
|
||||||
sp->end (sp);
|
sp->end (sp);
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,7 +123,7 @@ expected='[[[{"id": "XXXXX",
|
||||||
"body": [{"id": 1,
|
"body": [{"id": 1,
|
||||||
"sigstatus": [{"status": "error",
|
"sigstatus": [{"status": "error",
|
||||||
"keyid": "'$(echo $FINGERPRINT | cut -c 25-)'",
|
"keyid": "'$(echo $FINGERPRINT | cut -c 25-)'",
|
||||||
"errors": 2}],
|
"errors": {"key-missing": true}}],
|
||||||
"content-type": "multipart/signed",
|
"content-type": "multipart/signed",
|
||||||
"content": [{"id": 2,
|
"content": [{"id": 2,
|
||||||
"content-type": "text/plain",
|
"content-type": "text/plain",
|
||||||
|
@ -367,7 +367,7 @@ expected='[[[{"id": "XXXXX",
|
||||||
"body": [{"id": 1,
|
"body": [{"id": 1,
|
||||||
"sigstatus": [{"status": "error",
|
"sigstatus": [{"status": "error",
|
||||||
"keyid": "6D92612D94E46381",
|
"keyid": "6D92612D94E46381",
|
||||||
"errors": 8}],
|
"errors": {"key-revoked": true}}],
|
||||||
"content-type": "multipart/signed",
|
"content-type": "multipart/signed",
|
||||||
"content": [{"id": 2,
|
"content": [{"id": 2,
|
||||||
"content-type": "text/plain",
|
"content-type": "text/plain",
|
||||||
|
|
|
@ -64,8 +64,8 @@ expected='[[[{"id": "XXXXX",
|
||||||
"To": "test_suite@notmuchmail.org",
|
"To": "test_suite@notmuchmail.org",
|
||||||
"Date": "Sat, 01 Jan 2000 12:00:00 +0000"},
|
"Date": "Sat, 01 Jan 2000 12:00:00 +0000"},
|
||||||
"body": [{"id": 1,
|
"body": [{"id": 1,
|
||||||
"sigstatus": [{"status": "good",
|
"sigstatus": [{"fingerprint": "'$FINGERPRINT'",
|
||||||
"fingerprint": "'$FINGERPRINT'",
|
"status": "good",
|
||||||
"expires": 424242424,
|
"expires": 424242424,
|
||||||
"created": 946728000}],
|
"created": 946728000}],
|
||||||
"content-type": "multipart/signed",
|
"content-type": "multipart/signed",
|
||||||
|
|
|
@ -191,7 +191,7 @@ This is an error (see *Notmuch errors* for more details)
|
||||||
=== ERROR ===
|
=== ERROR ===
|
||||||
[XXX]
|
[XXX]
|
||||||
This is an error
|
This is an error
|
||||||
command: YYY/notmuch_fail show --format\\=sexp --format-version\\=3 --exclude\\=false \\' \\* \\'
|
command: YYY/notmuch_fail show --format\\=sexp --format-version\\=4 --exclude\\=false \\' \\* \\'
|
||||||
exit status: 1
|
exit status: 1
|
||||||
stderr:
|
stderr:
|
||||||
This is an error
|
This is an error
|
||||||
|
|
Loading…
Add table
Reference in a new issue