]> git.notmuchmail.org Git - notmuch/commitdiff
emacs: Use async process helper for search
authorAustin Clements <amdragon@MIT.EDU>
Sat, 1 Jun 2013 00:40:05 +0000 (20:40 -0400)
committerDavid Bremner <bremner@debian.org>
Sat, 1 Jun 2013 11:56:16 +0000 (08:56 -0300)
Previously, search started the async notmuch process directly.  Now,
it uses `notmuch-start-notmuch'.  This simplifies the process sentinel
a bit and means that we no longer have to worry about errors
interleaved with the JSON output.

We also update the tests of Emacs error handling, since the error
output is now separated from the search results buffer.

emacs/notmuch.el
test/emacs

index 4c1a6cacd4da5bdf47a13919cedaef2538457b30..b8d9c44475d0bd86c9ae56538799a3baa1baacee 100644 (file)
@@ -653,15 +653,8 @@ of the result."
                    ;; For version mismatch, there's no point in
                    ;; showing the search buffer
                    (when (or (= exit-status 20) (= exit-status 21))
-                     (kill-buffer))
-                   (condition-case err
-                       (notmuch-check-async-exit-status proc msg)
-                     ;; Suppress the error signal since strange
-                     ;; things happen if a sentinel signals.  Mimic
-                     ;; the top-level's handling of error messages.
-                     (error
-                      (message "%s" (error-message-string err))
-                      (throw 'return nil)))
+                     (kill-buffer)
+                     (throw 'return nil))
                    (if (and atbob
                             (not (string= notmuch-search-target-thread "found")))
                        (set 'never-found-target-thread t)))))
@@ -938,10 +931,9 @@ Other optional parameters are used as follows:
       (erase-buffer)
       (goto-char (point-min))
       (save-excursion
-       (let ((proc (start-process
-                    "notmuch-search" buffer
-                    notmuch-command "search"
-                    "--format=json" "--format-version=1"
+       (let ((proc (notmuch-start-notmuch
+                    "notmuch-search" buffer #'notmuch-search-process-sentinel
+                    "search" "--format=json" "--format-version=1"
                     (if oldest-first
                         "--sort=oldest-first"
                       "--sort=newest-first")
@@ -951,7 +943,6 @@ Other optional parameters are used as follows:
              ;; should be called no matter how the process dies.
              (parse-buf (generate-new-buffer " *notmuch search parse*")))
          (process-put proc 'parse-buf parse-buf)
-         (set-process-sentinel proc 'notmuch-search-process-sentinel)
          (set-process-filter proc 'notmuch-search-process-filter)
          (set-process-query-on-exit-flag proc nil))))
     (run-hooks 'notmuch-search-hook)))
index 3b26d32f60462e6a43af31dc4fd263e87837c990..e3cf4690cee4a82b5eca1c0608d091bf9c5a9e04 100755 (executable)
@@ -855,11 +855,10 @@ test_expect_success "Rendering HTML mail with images" \
     'cat OUTPUT && grep -q smiley OUTPUT'
 
 
-test_begin_subtest "Search handles subprocess errors"
+test_begin_subtest "Search handles subprocess error exit codes"
 cat > notmuch_fail <<EOF
 #!/bin/sh
 echo This is output
-echo This is an error >&2
 exit 1
 EOF
 chmod a+x notmuch_fail
@@ -876,8 +875,6 @@ sed -i -e 's/^\[.*\]$/[XXX]/' ERROR
 test_expect_equal "$(cat OUTPUT; echo ---; cat MESSAGES; echo ---; cat ERROR)" "\
 Error: Unexpected output from notmuch search:
 This is output
-Error: Unexpected output from notmuch search:
-This is an error
 End of search results.
 ---
 $PWD/notmuch_fail exited with status 1 (see *Notmuch errors* for more details)
@@ -887,4 +884,35 @@ $PWD/notmuch_fail exited with status 1
 command: $PWD/notmuch_fail search --format\=json --format-version\=1 --sort\=newest-first tag\:inbox
 exit status: 1"
 
+test_begin_subtest "Search handles subprocess warnings"
+cat > notmuch_fail <<EOF
+#!/bin/sh
+echo This is output
+echo This is a warning >&2
+echo This is another warning >&2
+exit 0
+EOF
+chmod a+x notmuch_fail
+test_emacs "(let ((notmuch-command \"$PWD/notmuch_fail\"))
+              (with-current-buffer \"*Messages*\" (erase-buffer))
+              (with-current-buffer \"*Notmuch errors*\" (erase-buffer))
+              (notmuch-search \"tag:inbox\")
+              (notmuch-test-wait)
+              (with-current-buffer \"*Messages*\"
+                 (test-output \"MESSAGES\"))
+              (with-current-buffer \"*Notmuch errors*\"
+                 (test-output \"ERROR\"))
+              (test-output))"
+sed -i -e 's/^\[.*\]$/[XXX]/' ERROR
+test_expect_equal "$(cat OUTPUT; echo ---; cat MESSAGES; echo ---; cat ERROR)" "\
+Error: Unexpected output from notmuch search:
+This is output
+End of search results.
+---
+This is a warning (see *Notmuch errors* for more details)
+---
+[XXX]
+This is a warning
+This is another warning"
+
 test_done