]> git.notmuchmail.org Git - notmuch/commitdiff
Merge branch 'release'
authorDavid Bremner <david@tethera.net>
Sat, 26 Nov 2016 12:43:31 +0000 (08:43 -0400)
committerDavid Bremner <david@tethera.net>
Sat, 26 Nov 2016 12:43:31 +0000 (08:43 -0400)
Add Jani's fix for notmuch-new

NEWS
debian/changelog
doc/man1/notmuch-new.rst
notmuch-client.h
notmuch-new.c

diff --git a/NEWS b/NEWS
index 7e565316b2280aec8dd1a5afa856a5e4cf048c49..a678fdda9a9902c1e87bae86ec864e8e76199e9b 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,9 @@
-Notmuch 0.23.3 (UNRELEASED)
+Notmuch 0.23.3 (2016-11-26)
+
+Command Line Interface
+----------------------
+
+Treat disappearing files during notmuch new as non-fatal.
 
 Test Suite
 ----------
index a57d63c288b3b7782dfce6c0faf97ed0fe7af027..4f3a94cd0bc3480fd7d06cc7308150a1a4c65648 100644 (file)
@@ -1,9 +1,12 @@
-notmuch (0.23.3-1) UNRELEASED; urgency=medium
+notmuch (0.23.3-1) unstable; urgency=medium
 
   * Re-enable test suite
-  * Fix test suite compatibility with gnupg 2.1.16
+  * Fix test suite compatibility with gnupg 2.1.16. Fixes: "FTBFS:
+    Tests failures", thanks to Lucas Nussbaum (Closes: #844915).
+  * Bug fix: "race condition in `notmuch new`?", thanks to Paul Wise
+    (Closes: #843127).
 
- -- David Bremner <bremner@debian.org>  Thu, 24 Nov 2016 20:29:35 -0400
+ -- David Bremner <bremner@debian.org>  Sat, 26 Nov 2016 08:37:39 -0400
 
 notmuch (0.23.2-1) unstable; urgency=medium
 
index 787ed78f30833559a4fd8f876e0ac7a63d5b2e28..7f0b2237acad24e66afd6b0843312723c3dbfdc6 100644 (file)
@@ -43,6 +43,14 @@ Supported options for **new** include
     ``--quiet``
         Do not print progress or results.
 
+EXIT STATUS
+===========
+
+This command supports the following special exit status code
+
+``75 (EX_TEMPFAIL)``
+    A temporary failure occured; the user is invited to retry.
+
 SEE ALSO
 ========
 
index 9ce2aef17431b3cd9792cc08477fcb630f434eea..793f32ecc55a36d5b08d57a7ce99ebc5d4d72e80 100644 (file)
@@ -25,6 +25,7 @@
 #define _GNU_SOURCE /* for getline */
 #endif
 #include <stdio.h>
+#include <sysexits.h>
 
 #include "compat.h"
 
@@ -114,6 +115,16 @@ chomp_newline (char *str)
        str[strlen(str)-1] = '\0';
 }
 
+/* Exit status code indicating temporary failure; user is invited to
+ * retry.
+ *
+ * For example, file(s) in the mail store were removed or renamed
+ * after notmuch new scanned the directories but before indexing the
+ * file(s). If the file was renamed, the indexing might not be
+ * complete, and the user is advised to re-run notmuch new.
+ */
+#define NOTMUCH_EXIT_TEMPFAIL EX_TEMPFAIL
+
 /* 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
index c55dea7bc1b7188522b2f2805fdf6a93ca12bf68..cc680b412a45e023e1b1b6cec0b92d37cf8c774c 100644 (file)
@@ -53,6 +53,7 @@ typedef struct {
     int total_files;
     int processed_files;
     int added_messages, removed_messages, renamed_messages;
+    int vanished_files;
     struct timeval tv_start;
 
     _filename_list_t *removed_files;
@@ -280,11 +281,13 @@ add_file (notmuch_database_t *notmuch, const char *filename,
     case NOTMUCH_STATUS_FILE_NOT_EMAIL:
        fprintf (stderr, "Note: Ignoring non-mail file: %s\n", filename);
        break;
-    /* Fatal issues. Don't process anymore. */
     case NOTMUCH_STATUS_FILE_ERROR:
+       /* Someone renamed/removed the file between scandir and now. */
+       state->vanished_files++;
        fprintf (stderr, "Unexpected error with file %s\n", filename);
        (void) print_status_database ("add_file", notmuch, status);
-       goto DONE;
+       break;
+    /* Fatal issues. Don't process anymore. */
     case NOTMUCH_STATUS_READ_ONLY_DATABASE:
     case NOTMUCH_STATUS_XAPIAN_EXCEPTION:
     case NOTMUCH_STATUS_OUT_OF_MEMORY:
@@ -1151,5 +1154,11 @@ notmuch_new_command (notmuch_config_t *config, int argc, char *argv[])
     if (!no_hooks && !ret && !interrupted)
        ret = notmuch_run_hook (db_path, "post-new");
 
-    return ret || interrupted ? EXIT_FAILURE : EXIT_SUCCESS;
+    if (ret || interrupted)
+       return EXIT_FAILURE;
+
+    if (add_files_state.vanished_files)
+       return NOTMUCH_EXIT_TEMPFAIL;
+
+    return EXIT_SUCCESS;
 }