unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#24997: 26.0.50; ibuffer-decompose-filter has side effects on error
@ 2016-11-23  7:34 Tino Calancha
  2016-11-23 15:44 ` Eli Zaretskii
  2016-11-27  3:54 ` Tino Calancha
  0 siblings, 2 replies; 5+ messages in thread
From: Tino Calancha @ 2016-11-23  7:34 UTC (permalink / raw)
  To: 24997


M-x ibuffer RET
/ m lisp-interaction-mode RET
/ > 10 RET
;; here `ibuffer-filtering-qualifiers' has value:
;; ((size-gt . 10) (used-mode . lisp-interaction-mode))
/ d
;; Signals error:
ibuffer-decompose-filter: Filter type size-gt is not compound

Note that previous command has side effects on `ibuffer-filtering-qualifiers'
even when there is an error; after this command the var has value:
((used-mode . lisp-interaction-mode))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
From 4540c12df119e247b5eb0a33c216375a43421e62 Mon Sep 17 00:00:00 2001
From: Tino Calancha <tino.calancha@gmail.com>
Date: Wed, 23 Nov 2016 16:28:49 +0900
Subject: [PATCH] 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).
---
 lisp/ibuf-ext.el | 39 +++++++++++++++++----------------------
 1 file changed, 17 insertions(+), 22 deletions(-)

diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el
index 5ef0746..3d11972 100644
--- a/lisp/ibuf-ext.el
+++ b/lisp/ibuf-ext.el
@@ -840,29 +840,24 @@ ibuffer-decompose-filter
 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
-					    (cadr 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))
+               (nconc (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
-- 
2.10.2

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

In GNU Emacs 26.0.50.5 (x86_64-pc-linux-gnu, GTK+ Version 3.22.3)
 of 2016-11-23 built on calancha-pc
Repository revision: c542fab20f53374dd0c71dce949ef370fc76fa48





^ permalink raw reply related	[flat|nested] 5+ messages in thread

* bug#24997: 26.0.50; ibuffer-decompose-filter has side effects on error
  2016-11-23  7:34 bug#24997: 26.0.50; ibuffer-decompose-filter has side effects on error Tino Calancha
@ 2016-11-23 15:44 ` Eli Zaretskii
  2016-11-24  1:57   ` Tino Calancha
  2016-11-27  3:54 ` Tino Calancha
  1 sibling, 1 reply; 5+ messages in thread
From: Eli Zaretskii @ 2016-11-23 15:44 UTC (permalink / raw)
  To: Tino Calancha; +Cc: 24997

> From: Tino Calancha <tino.calancha@gmail.com>
> Date: Wed, 23 Nov 2016 16:34:32 +0900
> 
> 
> M-x ibuffer RET
> / m lisp-interaction-mode RET
> / > 10 RET
> ;; here `ibuffer-filtering-qualifiers' has value:
> ;; ((size-gt . 10) (used-mode . lisp-interaction-mode))
> / d
> ;; Signals error:
> ibuffer-decompose-filter: Filter type size-gt is not compound
> 
> Note that previous command has side effects on `ibuffer-filtering-qualifiers'
> even when there is an error; after this command the var has value:
> ((used-mode . lisp-interaction-mode))
> 
> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> >From 4540c12df119e247b5eb0a33c216375a43421e62 Mon Sep 17 00:00:00 2001
> From: Tino Calancha <tino.calancha@gmail.com>
> Date: Wed, 23 Nov 2016 16:28:49 +0900
> Subject: [PATCH] ibuffer-decompose-filter: Avoid side effects on error

Please always accompany bug fixes with a test, if that is feasible.

Thanks.





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#24997: 26.0.50; ibuffer-decompose-filter has side effects on error
  2016-11-23 15:44 ` Eli Zaretskii
@ 2016-11-24  1:57   ` Tino Calancha
  2016-12-07 11:50     ` Tino Calancha
  0 siblings, 1 reply; 5+ messages in thread
From: Tino Calancha @ 2016-11-24  1:57 UTC (permalink / raw)
  To: 24997

Eli Zaretskii <eliz@gnu.org> writes:

> Please always accompany bug fixes with a test, if that is feasible.
>
> Thanks.
Added one test on commit 561ce85





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#24997: 26.0.50; ibuffer-decompose-filter has side effects on error
  2016-11-23  7:34 bug#24997: 26.0.50; ibuffer-decompose-filter has side effects on error Tino Calancha
  2016-11-23 15:44 ` Eli Zaretskii
@ 2016-11-27  3:54 ` Tino Calancha
  1 sibling, 0 replies; 5+ messages in thread
From: Tino Calancha @ 2016-11-27  3:54 UTC (permalink / raw)
  To: 24997; +Cc: tino.calancha


Previous patch had undesirable side effects on `ibuffer-saved-filters'.
Updated patch:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
From ffca1e2c713f39a0782b359279693e9e4245f791 Mon Sep 17 00:00:00 2001
From: Tino Calancha <tino.calancha@gmail.com>
Date: Sun, 27 Nov 2016 12:46:19 +0900
Subject: [PATCH] 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).
---
 lisp/ibuf-ext.el | 39 +++++++++++++++++----------------------
 1 file changed, 17 insertions(+), 22 deletions(-)

diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el
index 5ef0746..63db1e6 100644
--- a/lisp/ibuf-ext.el
+++ b/lisp/ibuf-ext.el
@@ -840,29 +840,24 @@ ibuffer-decompose-filter
 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
-					    (cadr 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
-- 
2.10.2

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
In GNU Emacs 26.0.50.1 (x86_64-pc-linux-gnu, GTK+ Version 3.22.3)
 of 2016-11-26 built on calancha-pc
Repository revision: 416adda38521c6246f77877c57843264fa4ae711





^ permalink raw reply related	[flat|nested] 5+ messages in thread

* bug#24997: 26.0.50; ibuffer-decompose-filter has side effects on error
  2016-11-24  1:57   ` Tino Calancha
@ 2016-12-07 11:50     ` Tino Calancha
  0 siblings, 0 replies; 5+ messages in thread
From: Tino Calancha @ 2016-12-07 11:50 UTC (permalink / raw)
  To: 24997-done

Tino Calancha <tino.calancha@gmail.com> writes:

> Eli Zaretskii <eliz@gnu.org> writes:
>
>> Please always accompany bug fixes with a test, if that is feasible.
>>
>> Thanks.
> Added one test on commit 561ce85
Pushed to master branch as commit 7b1e97f





^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-12-07 11:50 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-11-23  7:34 bug#24997: 26.0.50; ibuffer-decompose-filter has side effects on error Tino Calancha
2016-11-23 15:44 ` Eli Zaretskii
2016-11-24  1:57   ` Tino Calancha
2016-12-07 11:50     ` Tino Calancha
2016-11-27  3:54 ` Tino Calancha

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).