Re: [PATCH] emacs: make sure tagging on an empty query is harmless
authorTomi Ollila <tomi.ollila@iki.fi>
Wed, 21 May 2014 18:27:06 +0000 (21:27 +0300)
committerW. Trevor King <wking@tremily.us>
Fri, 7 Nov 2014 18:02:54 +0000 (10:02 -0800)
0c/2cfee245a067f3a6a307679bfe0e3bca7cddab [new file with mode: 0644]

diff --git a/0c/2cfee245a067f3a6a307679bfe0e3bca7cddab b/0c/2cfee245a067f3a6a307679bfe0e3bca7cddab
new file mode 100644 (file)
index 0000000..7c4ff2d
--- /dev/null
@@ -0,0 +1,145 @@
+Return-Path: <tomi.ollila@iki.fi>\r
+X-Original-To: notmuch@notmuchmail.org\r
+Delivered-To: notmuch@notmuchmail.org\r
+Received: from localhost (localhost [127.0.0.1])\r
+       by olra.theworths.org (Postfix) with ESMTP id 76FCC431FBC\r
+       for <notmuch@notmuchmail.org>; Wed, 21 May 2014 11:27:22 -0700 (PDT)\r
+X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
+X-Spam-Flag: NO\r
+X-Spam-Score: 0\r
+X-Spam-Level: \r
+X-Spam-Status: No, score=0 tagged_above=-999 required=5 tests=[none]\r
+       autolearn=disabled\r
+Received: from olra.theworths.org ([127.0.0.1])\r
+       by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
+       with ESMTP id LPYeizRPEoDt for <notmuch@notmuchmail.org>;\r
+       Wed, 21 May 2014 11:27:15 -0700 (PDT)\r
+Received: from guru.guru-group.fi (guru.guru-group.fi [46.183.73.34])\r
+       by olra.theworths.org (Postfix) with ESMTP id 93A8A431FAE\r
+       for <notmuch@notmuchmail.org>; Wed, 21 May 2014 11:27:15 -0700 (PDT)\r
+Received: from guru.guru-group.fi (localhost [IPv6:::1])\r
+       by guru.guru-group.fi (Postfix) with ESMTP id DCC8D100090;\r
+       Wed, 21 May 2014 21:27:06 +0300 (EEST)\r
+From: Tomi Ollila <tomi.ollila@iki.fi>\r
+To: Mark Walters <markwalters1009@gmail.com>, notmuch@notmuchmail.org,\r
+       David Edmondson <dme@dme.org>\r
+Subject: Re: [PATCH] emacs: make sure tagging on an empty query is harmless\r
+In-Reply-To: <1400666330-4363-1-git-send-email-markwalters1009@gmail.com>\r
+References: <87iop0ynl2.fsf@qmul.ac.uk>\r
+       <1400666330-4363-1-git-send-email-markwalters1009@gmail.com>\r
+User-Agent: Notmuch/0.18+12~g9d41f94 (http://notmuchmail.org) Emacs/24.3.1\r
+       (x86_64-unknown-linux-gnu)\r
+X-Face: HhBM'cA~<r"^Xv\KRN0P{vn'Y"Kd;zg_y3S[4)KSN~s?O\"QPoL\r
+       $[Xv_BD:i/F$WiEWax}R(MPS`^UaptOGD`*/=@\1lKoVa9tnrg0TW?"r7aRtgk[F\r
+       !)g;OY^,BjTbr)Np:%c_o'jj,Z\r
+Date: Wed, 21 May 2014 21:27:06 +0300\r
+Message-ID: <m2wqdfgf7p.fsf@guru.guru-group.fi>\r
+MIME-Version: 1.0\r
+Content-Type: text/plain\r
+X-BeenThere: notmuch@notmuchmail.org\r
+X-Mailman-Version: 2.1.13\r
+Precedence: list\r
+List-Id: "Use and development of the notmuch mail system."\r
+       <notmuch.notmuchmail.org>\r
+List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
+       <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
+List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
+List-Post: <mailto:notmuch@notmuchmail.org>\r
+List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
+List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
+       <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
+X-List-Received-Date: Wed, 21 May 2014 18:27:22 -0000\r
+\r
+On Wed, May 21 2014, Mark Walters <markwalters1009@gmail.com> wrote:\r
+\r
+> Currently notmuch-tag throws a "wrong-type-argument stringp nil" if\r
+> passed a nil query-string. Catch this and provide a more useful error\r
+> message. This fixes a case in notmuch-tree (if you try to tag when at\r
+> the end of the buffer).\r
+>\r
+> Secondly, as pointed out by David (dme)\r
+> `notmuch-search-find-stable-query-region' can return the query string\r
+> () if there are no messages in the region. This gets passed to notmuch\r
+> tag, and due to interactions in the optimize_query code in\r
+> notmuch-tag.c becomes, in the case tag-change is -inbox, "( () ) and\r
+> (tag:inbox)". This query matches some strange collection of messages\r
+> which then get archived. This should probably be fixed, but in any\r
+> case make `notmuch-search-find-stable-query-region' return a nil\r
+> query-string in this case.\r
+>\r
+> This avoids data-loss (random tag removal) in this case.\r
+> ---\r
+\r
++1 from me for 0.18.1, too.\r
+\r
+Tomi\r
+\r
+\r
+>\r
+> This is my attempt to solve the same problem as the parent. I prefer\r
+> not throwing an error in n.s.f.s.q.r as it is difficult for the caller\r
+> to catch cleanly. Throwing it in notmuch-tag is fine as the caller can\r
+> trivially check for query-string being nil before calling notmuch-tag\r
+> if it wants to deal with it gracefully.\r
+>\r
+> If people do prefer an error in n.s.f.s.q.r as in the parent patch\r
+> then I think we should update the error message. The first hunk of\r
+> this should also be applied to catch nil queries to notmuch-tag gracefully.\r
+>\r
+> Although this has been present for a while I think it is a dataloss\r
+> issue so a fix should go in for 0.18.1\r
+>\r
+> Best wishes\r
+>\r
+> Mark\r
+>\r
+>\r
+>\r
+>\r
+>  emacs/notmuch-tag.el |    2 ++\r
+>  emacs/notmuch.el     |    6 ++++--\r
+>  2 files changed, 6 insertions(+), 2 deletions(-)\r
+>\r
+> diff --git a/emacs/notmuch-tag.el b/emacs/notmuch-tag.el\r
+> index 07c260e..f54aa9d 100644\r
+> --- a/emacs/notmuch-tag.el\r
+> +++ b/emacs/notmuch-tag.el\r
+> @@ -387,6 +387,8 @@ (defun notmuch-tag (query tag-changes)\r
+>        (unless (string-match-p "^[-+]\\S-+$" tag-change)\r
+>          (error "Tag must be of the form `+this_tag' or `-that_tag'")))\r
+>      tag-changes)\r
+> +  (unless query\r
+> +    (error "Nothing to tag!"))\r
+>    (unless (null tag-changes)\r
+>      (run-hooks 'notmuch-before-tag-hook)\r
+>      (if (<= (length query) notmuch-tag-argument-limit)\r
+> diff --git a/emacs/notmuch.el b/emacs/notmuch.el\r
+> index 6c0bc1b..1adea9c 100644\r
+> --- a/emacs/notmuch.el\r
+> +++ b/emacs/notmuch.el\r
+> @@ -428,14 +428,16 @@ (defun notmuch-search-find-stable-query-region (beg end &optional only-matched)\r
+>    "Return the stable query for the current region.\r
+>  \r
+>  If ONLY-MATCHED is non-nil, include only matched messages.  If it\r
+> -is nil, include both matched and unmatched messages."\r
+> +is nil, include both matched and unmatched messages. If there are\r
+> +no messages in the region then return nil."\r
+>    (let ((query-list nil) (all (not only-matched)))\r
+>      (dolist (queries (notmuch-search-properties-in-region :query beg end))\r
+>        (when (first queries)\r
+>      (push (first queries) query-list))\r
+>        (when (and all (second queries))\r
+>      (push (second queries) query-list)))\r
+> -    (concat "(" (mapconcat 'identity query-list ") or (") ")")))\r
+> +    (when query-list\r
+> +      (concat "(" (mapconcat 'identity query-list ") or (") ")"))))\r
+>  \r
+>  (defun notmuch-search-find-authors ()\r
+>    "Return the authors for the current thread"\r
+> -- \r
+> 1.7.10.4\r
+>\r
+> _______________________________________________\r
+> notmuch mailing list\r
+> notmuch@notmuchmail.org\r
+> http://notmuchmail.org/mailman/listinfo/notmuch\r