emacs: Display any unexpected output from notmuch search
authorCarl Worth <cworth@cworth.org>
Thu, 10 Mar 2011 23:18:40 +0000 (15:18 -0800)
committerCarl Worth <cworth@cworth.org>
Thu, 10 Mar 2011 23:18:40 +0000 (15:18 -0800)
Rather than silently swallowing unexpected output, the emacs interface will now
display it. This will allow error messages to actually arrive at the emacs
interface (though not in an especially pretty way). This also allows for easier
investigation of the inadvertent swallowing of search results that span page
boundaries (as demonstrated by the recent added emacs-large-search-buffer test).

The page-boundary bug has been present since a commit from 2009-11-24:
93af7b574598637c2766dd1f8ef343962c9a8efb

Many thanks to Thomas Schwinge for tracking that bug down and
contributing the test for it.

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

index 3d82f0d093ff9f98f43839dbd0b9acf5870a48ac..057b1aecbe3d15737eccde3f65187c8641f9dfc9 100644 (file)
@@ -747,6 +747,8 @@ non-authors is found, assume that all of the authors match."
                  (more t)
                  (inhibit-read-only t))
              (while more
+               (while (and (< line (length string)) (= (elt string line) ?\n))
+                 (setq line (1+ line)))
                (if (string-match "^\\(thread:[0-9A-Fa-f]*\\) \\([^][]*\\) \\(\\[[0-9/]*\\]\\) \\([^;]*\\); \\(.*\\) (\\([^()]*\\))$" string line)
                    (let* ((thread-id (match-string 1 string))
                           (date (match-string 2 string))
@@ -756,6 +758,8 @@ non-authors is found, assume that all of the authors match."
                           (tags (match-string 6 string))
                           (tag-list (if tags (save-match-data (split-string tags)))))
                      (goto-char (point-max))
+                     (if (/= (match-beginning 1) line)
+                         (insert (concat "Error: Unexpected output from notmuch search:\n" (substring string line (match-beginning 1)) "\n")))
                      (let ((beg (point-marker)))
                        (notmuch-search-show-result date count authors subject tags)
                        (notmuch-search-color-line beg (point-marker) tag-list)
@@ -767,7 +771,12 @@ non-authors is found, assume that all of the authors match."
                              (set 'found-target beg)
                              (set 'notmuch-search-target-thread "found"))))
                      (set 'line (match-end 0)))
-                 (set 'more nil)))))
+                 (set 'more nil)
+                 (while (and (< line (length string)) (= (elt string line) ?\n))
+                   (setq line (1+ line)))
+                 (if (< line (length string))
+                     (insert (concat "Error: Unexpected output from notmuch search:\n" (substring string line) "\n")))
+                 ))))
          (if found-target
              (goto-char found-target)))
       (delete-process proc))))
index f827bb14ea66d086a5c537c1211dbe8fbe490709..78b3ae8b78bc919ebcefd6bc6af5225c88c23149 100755 (executable)
@@ -21,7 +21,7 @@ notmuch new > /dev/null
 test_begin_subtest 'Comparing emacs result to "notmuch search"'
 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/xx*/[BLOB]/')
+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_done