ibuffer-decompose-filter: Avoid side effects on error

* lisp/ibuf-ext.el (ibuffer-decompose-filter):
Update 'ibuffer-filtering-qualifiers' only if there is no error (Bug#24997).
* test/lisp/ibuffer-tests.el (ibuffer-test-Bug24997):
Update test result as pass.
This commit is contained in:
Tino Calancha 2016-12-07 20:47:34 +09:00
parent 586867e681
commit 7b1e97f0e6
2 changed files with 17 additions and 20 deletions

View file

@ -929,26 +929,24 @@ This means that the topmost filter on the filtering stack, which must
be a complex filter like (OR [name: foo] [mode: bar-mode]), will be be a complex filter like (OR [name: foo] [mode: bar-mode]), will be
turned into two separate filters [name: foo] and [mode: bar-mode]." turned into two separate filters [name: foo] and [mode: bar-mode]."
(interactive) (interactive)
(when (null ibuffer-filtering-qualifiers) (unless ibuffer-filtering-qualifiers
(error "No filters in effect")) (error "No filters in effect"))
(let ((lim (pop ibuffer-filtering-qualifiers))) (let* ((filters ibuffer-filtering-qualifiers)
(pcase (car lim) (head (cdar filters))
(`or (tail (cdr filters))
(setq ibuffer-filtering-qualifiers (append (value
(cdr lim) (pcase (caar filters)
ibuffer-filtering-qualifiers))) (`or (nconc head tail))
(`saved (`saved
(let ((data (assoc (cdr lim) ibuffer-saved-filters))) (let ((data (assoc head ibuffer-saved-filters)))
(unless data (unless data
(ibuffer-filter-disable) (ibuffer-filter-disable)
(error "Unknown saved filter %s" (cdr lim))) (error "Unknown saved filter %s" head))
(setq ibuffer-filtering-qualifiers (append (cadr data) tail)))
(append (cdr data) ibuffer-filtering-qualifiers)))) (`not (cons head tail))
(`not
(push (cdr lim)
ibuffer-filtering-qualifiers))
(_ (_
(error "Filter type %s is not compound" (car lim))))) (error "Filter type %s is not compound" (caar filters))))))
(setq ibuffer-filtering-qualifiers value))
(ibuffer-update nil t)) (ibuffer-update nil t))
;;;###autoload ;;;###autoload

View file

@ -34,7 +34,6 @@
(ert-deftest ibuffer-test-Bug24997 () (ert-deftest ibuffer-test-Bug24997 ()
"Test for http://debbugs.gnu.org/24997 ." "Test for http://debbugs.gnu.org/24997 ."
:expected-result :failed
(ibuffer) (ibuffer)
(let ((orig ibuffer-filtering-qualifiers)) (let ((orig ibuffer-filtering-qualifiers))
(unwind-protect (unwind-protect