Merge branch 'release'

Add Jani's fix for notmuch-new
This commit is contained in:
David Bremner 2016-11-26 08:43:31 -04:00
commit c970de6dc5
5 changed files with 43 additions and 7 deletions

7
NEWS
View file

@ -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 Test Suite
---------- ----------

9
debian/changelog vendored
View 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 * 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 notmuch (0.23.2-1) unstable; urgency=medium

View file

@ -43,6 +43,14 @@ Supported options for **new** include
``--quiet`` ``--quiet``
Do not print progress or results. 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 SEE ALSO
======== ========

View file

@ -25,6 +25,7 @@
#define _GNU_SOURCE /* for getline */ #define _GNU_SOURCE /* for getline */
#endif #endif
#include <stdio.h> #include <stdio.h>
#include <sysexits.h>
#include "compat.h" #include "compat.h"
@ -114,6 +115,16 @@ chomp_newline (char *str)
str[strlen(str)-1] = '\0'; 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 /* Exit status code indicating the requested format version is too old
* (support for that version has been dropped). CLI code should use * (support for that version has been dropped). CLI code should use
* notmuch_exit_if_unsupported_format rather than directly exiting * notmuch_exit_if_unsupported_format rather than directly exiting

View file

@ -53,6 +53,7 @@ typedef struct {
int total_files; int total_files;
int processed_files; int processed_files;
int added_messages, removed_messages, renamed_messages; int added_messages, removed_messages, renamed_messages;
int vanished_files;
struct timeval tv_start; struct timeval tv_start;
_filename_list_t *removed_files; _filename_list_t *removed_files;
@ -280,11 +281,13 @@ add_file (notmuch_database_t *notmuch, const char *filename,
case NOTMUCH_STATUS_FILE_NOT_EMAIL: case NOTMUCH_STATUS_FILE_NOT_EMAIL:
fprintf (stderr, "Note: Ignoring non-mail file: %s\n", filename); fprintf (stderr, "Note: Ignoring non-mail file: %s\n", filename);
break; break;
/* Fatal issues. Don't process anymore. */
case NOTMUCH_STATUS_FILE_ERROR: 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); fprintf (stderr, "Unexpected error with file %s\n", filename);
(void) print_status_database ("add_file", notmuch, status); (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_READ_ONLY_DATABASE:
case NOTMUCH_STATUS_XAPIAN_EXCEPTION: case NOTMUCH_STATUS_XAPIAN_EXCEPTION:
case NOTMUCH_STATUS_OUT_OF_MEMORY: 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) if (!no_hooks && !ret && !interrupted)
ret = notmuch_run_hook (db_path, "post-new"); 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;
} }