]> git.eshelyaron.com Git - emacs.git/commitdiff
ibuffer-decompose-filter: Avoid side effects on error
authorTino Calancha <tino.calancha@gmail.com>
Wed, 7 Dec 2016 11:47:34 +0000 (20:47 +0900)
committerTino Calancha <tino.calancha@gmail.com>
Wed, 7 Dec 2016 11:47:34 +0000 (20:47 +0900)
* 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.

lisp/ibuf-ext.el
test/lisp/ibuffer-tests.el

index d1bf5769d8c34661ca79898e1dc44f4b96e5841a..cc2942c911902557363911e688f101a4baf6f422 100644 (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
 turned into two separate filters [name: foo] and [mode: bar-mode]."
   (interactive)
-  (when (null ibuffer-filtering-qualifiers)
+  (unless ibuffer-filtering-qualifiers
     (error "No filters in effect"))
-  (let ((lim (pop ibuffer-filtering-qualifiers)))
-    (pcase (car lim)
-      (`or
-       (setq ibuffer-filtering-qualifiers (append
-                                         (cdr lim)
-                                         ibuffer-filtering-qualifiers)))
-      (`saved
-       (let ((data (assoc (cdr lim) ibuffer-saved-filters)))
-        (unless data
-          (ibuffer-filter-disable)
-          (error "Unknown saved filter %s" (cdr lim)))
-        (setq ibuffer-filtering-qualifiers
-               (append (cdr data) ibuffer-filtering-qualifiers))))
-      (`not
-       (push (cdr lim)
-            ibuffer-filtering-qualifiers))
-      (_
-       (error "Filter type %s is not compound" (car lim)))))
+  (let* ((filters ibuffer-filtering-qualifiers)
+         (head (cdar filters))
+         (tail (cdr filters))
+         (value
+          (pcase (caar filters)
+            (`or (nconc head tail))
+            (`saved
+             (let ((data (assoc head ibuffer-saved-filters)))
+               (unless data
+                 (ibuffer-filter-disable)
+                 (error "Unknown saved filter %s" head))
+               (append (cadr data) tail)))
+            (`not (cons head tail))
+            (_
+             (error "Filter type %s is not compound" (caar filters))))))
+    (setq ibuffer-filtering-qualifiers value))
   (ibuffer-update nil t))
 
 ;;;###autoload
index da8c7024463bc261c01484cd1fba245b55d20b71..799f3fbbdc75d29296f07660b8c0eaddde9f0c57 100644 (file)
@@ -34,7 +34,6 @@
 
 (ert-deftest ibuffer-test-Bug24997 ()
   "Test for http://debbugs.gnu.org/24997 ."
-  :expected-result :failed
   (ibuffer)
   (let ((orig ibuffer-filtering-qualifiers))
     (unwind-protect