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