Subject: bug#59115: closed (Re: bug#59115: 29.0.50; byte-recompile-directory incorrectly ignoring files)

From: [email-masked] (GNU bug Tracking System)
Date: Wed, 09 Nov 2022 08:41:02 +0000

Your bug report

#59115: 29.0.50; byte-recompile-directory incorrectly ignoring files

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
59115: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=59115
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#59115: 29.0.50; byte-recompile-directory incorrectly ignoring files
From: Philip Kaludercic <[email-masked]>
To: Eli Zaretskii <[email-masked]>
Cc: [email-masked], No Wayman <[email-masked]>
Date: Wed, 09 Nov 2022 08:39:54 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

Eli Zaretskii <[email-masked]> writes:

>> From: No Wayman <[email-masked]>
>> Date: Mon, 07 Nov 2022 19:49:58 -0500
>> 
>> Commit 8638aace3fbe01529f33870f469fa60bf5e43ee7
>> introduced a bug which will cause byte-recompile-directory to 
>> invert the semantics of the byte-compile-ingore-files option.
>> 
>> To reproduce:
>> 
>> 1. mkdir /tmp/bug/ && cd /tmp/bug/
>> 2. Copy an elisp file which would normally be byte-compiled into 
>> that directory
>> 3. emacs -Q --batch --eval "(byte-recompile-directory 
>> default-directory 0 'force)"
>> 
>> You should see output similar to:
>> 
>> Checking /tmp/bug...
>> Done (Total of 0 files compiled)
>> 
>> 
>> In general the entire logic of byte-recompile-directory is messy.
>> Two ifs without elses, lots of negated predicates, etc. I can see 
>> why the mistake was easy to overlook. This could be further 
>> refactored to make it easier to read by leveraging when/unless 
>> appropriately. Perhaps there's an argument for some abnormal hooks 
>> in place of those long chains of ad-hoc predicates, but I'm more 
>> interested in fixing the problem now.
>> 
>> The attached patch fixes it for me.
>
> Philip, can you look into tis, please?

Yes, the patch makes sense.  I'm going to apply the patch.

Thanks.

Subject: 29.0.50; byte-recompile-directory incorrectly ignoring files
From: No Wayman <[email-masked]>
To: [email-masked]
Date: Mon, 07 Nov 2022 19:49:58 -0500
List-Id: <debbugs-submit.debbugs.gnu.org>

Commit 8638aace3fbe01529f33870f469fa60bf5e43ee7
introduced a bug which will cause byte-recompile-directory to 
invert the semantics of the byte-compile-ingore-files option.

To reproduce:

1. mkdir /tmp/bug/ && cd /tmp/bug/
2. Copy an elisp file which would normally be byte-compiled into 
that directory
3. emacs -Q --batch --eval "(byte-recompile-directory 
default-directory 0 'force)"

You should see output similar to:

Checking /tmp/bug...
Done (Total of 0 files compiled)

In general the entire logic of byte-recompile-directory is messy.
Two ifs without elses, lots of negated predicates, etc. I can see 
why the mistake was easy to overlook. This could be further 
refactored to make it easier to read by leveraging when/unless 
appropriately. Perhaps there's an argument for some abnormal hooks 
in place of those long chains of ad-hoc predicates, but I'm more 
interested in fixing the problem now.

The attached patch fixes it for me.

In GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
 3.24.34, cairo version 1.17.6) of 2022-11-07 built on nbook
Repository revision: 35221a7bd55e18244604376497097f4259c7351b
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 
11.0.12101004
System Description: Arch Linux

>From f2f8a3f09dc020550ef9cbd064db86082cf19a29 Mon Sep 17 00:00:00 2001
From: Nicholas Vollmer <[email-masked]>
Date: Mon, 7 Nov 2022 19:57:34 -0500
Subject: [PATCH] bytecomp.el (byte-recompile-directory): Fix negated ignore
 logic

Previous logic would only compile files which matched the
byte-compile-ignore-files regular expression.
---
 lisp/emacs-lisp/bytecomp.el | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 4d258dab96..c685e5087f 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -1955,9 +1955,9 @@ byte-recompile-directory
                         (not (auto-save-file-name-p source))
                         (not (member source (dir-locals--all-files directory)))
                         ;; File is requested to be ignored
-                        (string-match-p
-                         (regexp-opt byte-compile-ignore-files)
-                         source))
+                        (not (string-match-p
+                              (regexp-opt byte-compile-ignore-files)
+                              source)))
                    (progn (cl-incf
                            (pcase (byte-recompile-file source force arg)
                              ('no-byte-compile skip-count)
-- 
2.38.1