Return-Path: X-Original-To: notmuch@notmuchmail.org Delivered-To: notmuch@notmuchmail.org Received: from localhost (localhost [127.0.0.1]) by arlo.cworth.org (Postfix) with ESMTP id EC0346DE190D for ; Fri, 14 Aug 2015 09:49:13 -0700 (PDT) X-Virus-Scanned: Debian amavisd-new at cworth.org X-Spam-Flag: NO X-Spam-Score: 0.134 X-Spam-Level: X-Spam-Status: No, score=0.134 tagged_above=-999 required=5 tests=[AWL=0.124, T_HEADER_FROM_DIFFERENT_DOMAINS=0.01] autolearn=disabled Received: from arlo.cworth.org ([127.0.0.1]) by localhost (arlo.cworth.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id W8T8aSnuZWAM for ; Fri, 14 Aug 2015 09:49:12 -0700 (PDT) Received: from gitolite.debian.net (gitolite.debian.net [87.98.215.224]) by arlo.cworth.org (Postfix) with ESMTPS id 0F0FA6DE18FD for ; Fri, 14 Aug 2015 09:49:12 -0700 (PDT) Received: from remotemail by gitolite.debian.net with local (Exim 4.80) (envelope-from ) id 1ZQI9d-0003dv-NJ; Fri, 14 Aug 2015 16:48:29 +0000 Received: (nullmailer pid 15756 invoked by uid 1000); Fri, 14 Aug 2015 16:48:02 -0000 From: David Bremner To: notmuch@notmuchmail.org Subject: [PATCH 3/5] cli/count: add --lastmod Date: Fri, 14 Aug 2015 18:47:56 +0200 Message-Id: <1439570878-15165-4-git-send-email-david@tethera.net> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1439570878-15165-1-git-send-email-david@tethera.net> References: <1439570878-15165-1-git-send-email-david@tethera.net> X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Aug 2015 16:49:14 -0000 In the short term we need a way to get lastmod information e.g. for the test suite. In the long term we probably want to add lastmod information to at least the structured output for several other clients (e.g. show, search). --- doc/man1/notmuch-count.rst | 5 +++++ notmuch-count.c | 32 +++++++++++++++++++++++--------- test/T570-revision-tracking.sh | 12 ++++++++++++ 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/doc/man1/notmuch-count.rst b/doc/man1/notmuch-count.rst index ca78c18..99de13a 100644 --- a/doc/man1/notmuch-count.rst +++ b/doc/man1/notmuch-count.rst @@ -47,6 +47,11 @@ Supported options for **count** include (or threads) in the database will be output. This option is not compatible with specifying search terms on the command line. + ``--lastmod`` + Append lastmod (counter for number of database updates) and UUID + to the output. lastmod values are only comparable between databases + with the same UUID. + ``--input=``\ Read input from given file, instead of from stdin. Implies ``--batch``. diff --git a/notmuch-count.c b/notmuch-count.c index 57a88a8..182710a 100644 --- a/notmuch-count.c +++ b/notmuch-count.c @@ -25,6 +25,7 @@ enum { OUTPUT_THREADS, OUTPUT_MESSAGES, OUTPUT_FILES, + OUTPUT_LASTMOD, }; /* The following is to allow future options to be added more easily */ @@ -67,10 +68,13 @@ count_files (notmuch_query_t *query) static int print_count (notmuch_database_t *notmuch, const char *query_str, - const char **exclude_tags, size_t exclude_tags_length, int output) + const char **exclude_tags, size_t exclude_tags_length, int output, int print_lastmod) { notmuch_query_t *query; size_t i; + unsigned long revision; + const char *uuid; + int ret = 0; query = notmuch_query_create (notmuch, query_str); if (query == NULL) { @@ -83,24 +87,31 @@ print_count (notmuch_database_t *notmuch, const char *query_str, switch (output) { case OUTPUT_MESSAGES: - printf ("%u\n", notmuch_query_count_messages (query)); + printf ("%u", notmuch_query_count_messages (query)); break; case OUTPUT_THREADS: - printf ("%u\n", notmuch_query_count_threads (query)); + printf ("%u", notmuch_query_count_threads (query)); break; case OUTPUT_FILES: - printf ("%u\n", count_files (query)); + printf ("%u", count_files (query)); break; } + if (print_lastmod) { + revision = notmuch_database_get_revision (notmuch, &uuid); + printf ("\t%s\t%lu\n", uuid, revision); + } else { + fputs ("\n", stdout); + } + notmuch_query_destroy (query); - return 0; + return ret; } static int count_file (notmuch_database_t *notmuch, FILE *input, const char **exclude_tags, - size_t exclude_tags_length, int output) + size_t exclude_tags_length, int output, int print_lastmod) { char *line = NULL; ssize_t line_len; @@ -110,7 +121,7 @@ count_file (notmuch_database_t *notmuch, FILE *input, const char **exclude_tags, while (!ret && (line_len = getline (&line, &line_size, input)) != -1) { chomp_newline (line); ret = print_count (notmuch, line, exclude_tags, exclude_tags_length, - output); + output, print_lastmod); } if (line) @@ -130,6 +141,7 @@ notmuch_count_command (notmuch_config_t *config, int argc, char *argv[]) const char **search_exclude_tags = NULL; size_t search_exclude_tags_length = 0; notmuch_bool_t batch = FALSE; + notmuch_bool_t print_lastmod = FALSE; FILE *input = stdin; char *input_file_name = NULL; int ret; @@ -139,11 +151,13 @@ notmuch_count_command (notmuch_config_t *config, int argc, char *argv[]) (notmuch_keyword_t []){ { "threads", OUTPUT_THREADS }, { "messages", OUTPUT_MESSAGES }, { "files", OUTPUT_FILES }, + { "modifications", OUTPUT_LASTMOD }, { 0, 0 } } }, { NOTMUCH_OPT_KEYWORD, &exclude, "exclude", 'x', (notmuch_keyword_t []){ { "true", EXCLUDE_TRUE }, { "false", EXCLUDE_FALSE }, { 0, 0 } } }, + { NOTMUCH_OPT_BOOLEAN, &print_lastmod, "lastmod", 'l', 0 }, { NOTMUCH_OPT_BOOLEAN, &batch, "batch", 0, 0 }, { NOTMUCH_OPT_STRING, &input_file_name, "input", 'i', 0 }, { NOTMUCH_OPT_INHERIT, (void *) ¬much_shared_options, NULL, 0, 0 }, @@ -188,10 +202,10 @@ notmuch_count_command (notmuch_config_t *config, int argc, char *argv[]) if (batch) ret = count_file (notmuch, input, search_exclude_tags, - search_exclude_tags_length, output); + search_exclude_tags_length, output, print_lastmod); else ret = print_count (notmuch, query_str, search_exclude_tags, - search_exclude_tags_length, output); + search_exclude_tags_length, output, print_lastmod); notmuch_database_destroy (notmuch); diff --git a/test/T570-revision-tracking.sh b/test/T570-revision-tracking.sh index e0a5703..4fff689 100755 --- a/test/T570-revision-tracking.sh +++ b/test/T570-revision-tracking.sh @@ -34,4 +34,16 @@ UUID 53 EOF test_expect_equal_file EXPECTED CLEAN +grep '^[0-9a-f]' OUTPUT > INITIAL_OUTPUT + +test_begin_subtest "output of count matches test code" +notmuch count --lastmod '*' | cut -f2-3 > OUTPUT +test_expect_equal_file INITIAL_OUTPUT OUTPUT + +test_begin_subtest "modification count increases" +before=$(notmuch count --lastmod '*' | cut -f3) +notmuch tag +a-random-tag-8743632 '*' +after=$(notmuch count --lastmod '*' | cut -f3) +result=$(($before < $after)) +test_expect_equal 1 ${result} test_done -- 2.5.0