aboutsummaryrefslogtreecommitdiffhomepage
path: root/notmuch-client.h
diff options
context:
space:
mode:
authorGravatar Austin Clements <amdragon@MIT.EDU>2012-12-15 22:17:23 -0500
committerGravatar David Bremner <bremner@debian.org>2012-12-16 17:20:33 -0400
commit1c6195b9e35e511e115f94b45d97aa58ee41b307 (patch)
treeb51eed0180afeb9d78523436841262a9f2795492 /notmuch-client.h
parent1e12b91b3cf823d21f7edf8c0f1c687df56fec14 (diff)
cli: Framework for structured output versioning
Currently there is a period of pain whenever we make backward-incompatible changes to the structured output format, which discourages not only backward-incompatible improvements to the format, but also backwards-compatible additions that may not be "perfect". In the end, these problems limit experimentation and innovation. This series of patches introduces a way for CLI callers to request a specific format version on the command line and to determine if the CLI does not supported the requested version (and perhaps present a useful diagnostic to the user). Since the caller requests a format version, it's also possible for the CLI to support multiple incompatible versions simultaneously, unlike the alternate approach of including version information in the output. This patch lays the groundwork by introducing a versioning convention, standard exit codes, and a utility function to check the requested version and produce standardized diagnostic messages and exit statuses.
Diffstat (limited to 'notmuch-client.h')
-rw-r--r--notmuch-client.h45
1 files changed, 45 insertions, 0 deletions
diff --git a/notmuch-client.h b/notmuch-client.h
index 1c336dcb..d7b352e8 100644
--- a/notmuch-client.h
+++ b/notmuch-client.h
@@ -117,6 +117,51 @@ chomp_newline (char *str)
str[strlen(str)-1] = '\0';
}
+/* Exit status code indicating the requested format version is too old
+ * (support for that version has been dropped). CLI code should use
+ * notmuch_exit_if_unsupported_format rather than directly exiting
+ * with this code.
+ */
+#define NOTMUCH_EXIT_FORMAT_TOO_OLD 20
+/* Exit status code indicating the requested format version is newer
+ * than the version supported by the CLI. CLI code should use
+ * notmuch_exit_if_unsupported_format rather than directly exiting
+ * with this code.
+ */
+#define NOTMUCH_EXIT_FORMAT_TOO_NEW 21
+
+/* The current structured output format version. Requests for format
+ * versions above this will return an error. Backwards-incompatible
+ * changes such as removing map fields, changing the meaning of map
+ * fields, or changing the meanings of list elements should increase
+ * this. New (required) map fields can be added without increasing
+ * this.
+ */
+#define NOTMUCH_FORMAT_CUR 1
+/* The minimum supported structured output format version. Requests
+ * for format versions below this will return an error. */
+#define NOTMUCH_FORMAT_MIN 1
+
+/* The output format version requested by the caller on the command
+ * line. If no format version is requested, this will be set to
+ * NOTMUCH_FORMAT_CUR. Even though the command-line option is
+ * per-command, this is global because commands can share structured
+ * output code.
+ */
+extern int notmuch_format_version;
+
+/* Commands that support structured output should support the
+ * following argument
+ * { NOTMUCH_OPT_INT, &notmuch_format_version, "format-version", 0, 0 }
+ * and should invoke notmuch_exit_if_unsupported_format to check the
+ * requested version. If notmuch_format_version is outside the
+ * supported range, this will print a detailed diagnostic message for
+ * the user and exit with NOTMUCH_EXIT_FORMAT_TOO_{OLD,NEW} to inform
+ * the invoking program of the problem.
+ */
+void
+notmuch_exit_if_unsupported_format (void);
+
notmuch_crypto_context_t *
notmuch_crypto_get_context (notmuch_crypto_t *crypto, const char *protocol);