emacs: Don't drop error messages from "notmuch search"
authorCarl Worth <cworth@cworth.org>
Fri, 11 Mar 2011 00:53:46 +0000 (16:53 -0800)
committerCarl Worth <cworth@cworth.org>
Fri, 11 Mar 2011 00:53:46 +0000 (16:53 -0800)
With the previous commit, unexpected output before or between search results
would be displayed. However, trailing junk from the "notmuch search" output
would still be silently swallowed.

The most common case for an error message from "notmuch search" would be
an invalid command-line, and in that case, there would be no search results
and the trailing error message would get swallowed.

We fix the process sentinel to check for leftover data and add it to the
final buffer. We also add a test case to ensure this works.

emacs/notmuch.el
test/emacs-large-search-buffer

index dbf269a572755f7b02f19cd090c7c296881057e0..d9a6b67a6ba8c595e94bc297cfb292e9f73f3753 100644 (file)
@@ -580,6 +580,8 @@ This function advances the next thread when finished."
                      (insert "Incomplete search results (search process was killed).\n"))
                  (if (eq status 'exit)
                      (progn
+                       (if notmuch-search-process-filter-data
+                           (insert (concat "Error: Unexpected output from notmuch search:\n" notmuch-search-process-filter-data)))
                        (insert "End of search results.")
                        (if (not (= exit-status 0))
                            (insert (format " (process returned %d)" exit-status)))
index 78b3ae8b78bc919ebcefd6bc6af5225c88c23149..a3b5c79c8c5f799da1d003e7367a441c0d983550 100755 (executable)
@@ -18,10 +18,16 @@ done
 
 notmuch new > /dev/null
 
-test_begin_subtest 'Comparing emacs result to "notmuch search"'
+test_begin_subtest "Ensure that emacs doesn't drop results"
 expected="$(notmuch search '*' | sed -e 's/^thread:[0-9a-f]*  //' -e 's/;//' -e  's/xx*/[BLOB]/')
 End of search results."
 output=$(test_emacs '(notmuch-search "*") (notmuch-test-wait) (message (buffer-string))' 2>&1 | sed -e s',  *, ,g' -e 's/xxx*/[BLOB]/g')
 test_expect_equal "$output" "$expected"
 
+test_begin_subtest "Ensure that emacs doesn't drop error messages"
+output=$(test_emacs '(notmuch-search "--this-option-does-not-exist") (notmuch-test-wait) (message (buffer-string))' 2>&1)
+test_expect_equal "$output" "Error: Unexpected output from notmuch search:
+Unrecognized option: --this-option-does-not-exist
+End of search results. (process returned 1)"
+
 test_done