aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Bremner <david@tethera.net>2016-11-26 08:43:31 -0400
committerDavid Bremner <david@tethera.net>2016-11-26 08:43:31 -0400
commitc970de6dc5378b05feb0b3da40f1fc3408f3d337 (patch)
tree104587f48ffc41f0f9187b8aa31fe7949338c4e7
parent66c1bff416c23634a6cec937e386a6830c5c0bc2 (diff)
parent94511fe1c834931cd6a42c740ae0936bc48a32fd (diff)
Merge branch 'release'
Add Jani's fix for notmuch-new
-rw-r--r--NEWS7
-rw-r--r--debian/changelog9
-rw-r--r--doc/man1/notmuch-new.rst8
-rw-r--r--notmuch-client.h11
-rw-r--r--notmuch-new.c15
5 files changed, 43 insertions, 7 deletions
diff --git a/NEWS b/NEWS
index 7e565316..a678fdda 100644
--- 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
----------
diff --git a/debian/changelog b/debian/changelog
index a57d63c2..4f3a94cd 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -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
diff --git a/doc/man1/notmuch-new.rst b/doc/man1/notmuch-new.rst
index 787ed78f..7f0b2237 100644
--- a/doc/man1/notmuch-new.rst
+++ b/doc/man1/notmuch-new.rst
@@ -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
========
diff --git a/notmuch-client.h b/notmuch-client.h
index 9ce2aef1..793f32ec 100644
--- a/notmuch-client.h
+++ b/notmuch-client.h
@@ -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
diff --git a/notmuch-new.c b/notmuch-new.c
index c55dea7b..cc680b41 100644
--- a/notmuch-new.c
+++ b/notmuch-new.c
@@ -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;
}