On Fri, May 17 2013, Austin Clements <[email protected]> wrote:

> For such a simple regexp, this was broken in a very complicated way.
>
> The intent was to strip the newline (and potentially other whitespace)
> off the end of the error string so there wasn't an extra newline in
> the error signal.  However, the regexp was deeply dependent on the
> active syntax table and the subtleties of $.  We didn't notice this
> because all notmuch major modes put ?\n in the whitespace class, which
> makes this behaved as intended: the "\\s " matches all newlines, but
> by matching the newline character, causes the $ *not* to match
> *except* where it matched the empty string at the very end of the
> string, which was not followed by a newline.
>
> However, if the syntax table declares ?\n to be non-whitespace
> (lisp-mode declares it as endcomment, and is likely to be the mode
> you're in when testing functions), then this regexp behaves completely
> differently, matching trailing spaces at the end of every line within
> the string.
>
> The solution is to say what we mean for whitespace *and* to switch
> from $ to \', which matches only the end of the string, rather than
> the end of each line.  Both are necessary or this will strip away
> interior newlines, which is not what we want.

LGTM.

Tomi


> ---
>  emacs/notmuch-lib.el |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el
> index 790136e..59b1ce3 100644
> --- a/emacs/notmuch-lib.el
> +++ b/emacs/notmuch-lib.el
> @@ -438,7 +438,7 @@ You may need to restart Emacs or upgrade your notmuch 
> package."))
>       (if err
>           ;; We have an error message straight from the CLI.
>           (notmuch-logged-error
> -          (replace-regexp-in-string "\\s $" "" err) extra)
> +          (replace-regexp-in-string "[ \n\r\t\f]*\\'" "" err) extra)
>         ;; We only have combined output from the CLI; don't inundate
>         ;; the user with it.  Mimic `process-lines'.
>         (notmuch-logged-error (format "%s exited with status %s"
> -- 
> 1.7.10.4
>
> _______________________________________________
> notmuch mailing list
> [email protected]
> http://notmuchmail.org/mailman/listinfo/notmuch
_______________________________________________
notmuch mailing list
[email protected]
http://notmuchmail.org/mailman/listinfo/notmuch

Reply via email to