emacs: Escape all message ID queries
authorAustin Clements <amdragon@MIT.EDU>
Tue, 27 Mar 2012 01:37:16 +0000 (21:37 -0400)
committerDavid Bremner <bremner@debian.org>
Sat, 31 Mar 2012 00:27:03 +0000 (21:27 -0300)
This adds a lib function to turn a message ID into a properly escaped
message ID query and uses this function wherever we previously
hand-constructed ID queries.  Wherever this new function is used,
documentation has been clarified to refer to "id: queries" instead of
"message IDs".

This fixes the broken test introduced by the previous patch.

emacs/notmuch-lib.el
emacs/notmuch-message.el
emacs/notmuch-show.el
test/emacs

index a754de77ce00689be5050836883eddfe3ccac70b..2492b80b060acc032146b2900b92c78fb0705a07 100644 (file)
@@ -144,6 +144,10 @@ the user hasn't set this variable with the old or new value."
        "[No Subject]"
       subject)))
 
+(defun notmuch-id-to-query (id)
+  "Return a query that matches the message with id ID."
+  (concat "id:\"" (replace-regexp-in-string "\"" "\"\"" id t t) "\""))
+
 ;;
 
 (defun notmuch-common-do-stash (text)
@@ -231,7 +235,7 @@ the given type."
 
 (defun notmuch-get-bodypart-content (msg part nth process-crypto)
   (or (plist-get part :content)
-      (notmuch-get-bodypart-internal (concat "id:" (plist-get msg :id)) nth process-crypto)))
+      (notmuch-get-bodypart-internal (notmuch-id-to-query (plist-get msg :id)) nth process-crypto)))
 
 (defun notmuch-plist-to-alist (plist)
   (loop for (key value . rest) on plist by #'cddr
index 264a5b9b496f483df94e0dde844b7d926712a6e2..301028154734009e409f4b5a9f6a48bfba337cf6 100644 (file)
@@ -44,7 +44,7 @@ the \"inbox\" and \"todo\", you would set
                                (concat "+" str)
                              str))
                          notmuch-message-replied-tags)))
-       (apply 'notmuch-tag (concat "id:" (car (car rep))) tags)))))
+       (apply 'notmuch-tag (notmuch-id-to-query (car (car rep))) tags)))))
 
 (add-hook 'message-send-hook 'notmuch-message-mark-replied)
 
index 0cd7d82676723bcff3feaa52afd3678bc7c51465..6d3fe62abf0a3a076af9568875b229f4cecfb054 100644 (file)
@@ -613,7 +613,7 @@ current buffer, if possible."
          ;; times (hundreds!), which results in many calls to
          ;; `notmuch part'.
          (unless content
-           (setq content (notmuch-get-bodypart-internal (concat "id:" message-id)
+           (setq content (notmuch-get-bodypart-internal (notmuch-id-to-query message-id)
                                                              part-number notmuch-show-process-crypto))
            (with-current-buffer w3m-current-buffer
              (notmuch-show-w3m-cid-store-internal url
@@ -1325,16 +1325,16 @@ Some useful entries are:
     (plist-get props prop)))
 
 (defun notmuch-show-get-message-id (&optional bare)
-  "Return the Message-Id of the current message.
+  "Return an id: query for the Message-Id of the current message.
 
 If optional argument BARE is non-nil, return
-the Message-Id without prefix and quotes."
+the Message-Id without id: prefix and escaping."
   (if bare
       (notmuch-show-get-prop :id)
-    (concat "id:\"" (notmuch-show-get-prop :id) "\"")))
+    (notmuch-id-to-query (notmuch-show-get-prop :id))))
 
 (defun notmuch-show-get-messages-ids ()
-  "Return all message ids of messages in the current thread."
+  "Return all id: queries of messages in the current thread."
   (let ((message-ids))
     (notmuch-show-mapc
      (lambda () (push (notmuch-show-get-message-id) message-ids)))
@@ -1401,7 +1401,7 @@ current thread."
 ;; thread.
 
 (defun notmuch-show-get-message-ids-for-open-messages ()
-  "Return a list of all message IDs for open messages in the current thread."
+  "Return a list of all id: queries for open messages in the current thread."
   (save-excursion
     (let (message-ids done)
       (goto-char (point-min))
@@ -1805,7 +1805,7 @@ thread from search."
   (notmuch-common-do-stash (notmuch-show-get-from)))
 
 (defun notmuch-show-stash-message-id ()
-  "Copy message ID of current message to kill-ring."
+  "Copy id: query matching the current message to kill-ring."
   (interactive)
   (notmuch-common-do-stash (notmuch-show-get-message-id)))
 
index 62eaedba55fbd7a08a93076d78fb80468dd5f0e8..8b92d0a94313c2c441854970152fca768dbdf6e3 100755 (executable)
@@ -140,7 +140,6 @@ output=$(notmuch search 'id:"123..456@example"' | notmuch_search_sanitize)
 test_expect_equal "$output" "thread:XXX   2001-01-05 [1/1] Notmuch Test Suite; Message with .. in Message-Id (inbox search-add show-add)"
 
 test_begin_subtest "Message with quote in Message-Id:"
-test_subtest_known_broken
 add_message '[id]="\"quote\"@example"' '[subject]="Message with quote in Message-Id"'
 test_emacs '(notmuch-search "subject:\"Message with quote\"")
            (notmuch-test-wait)