]> git.eshelyaron.com Git - emacs.git/commitdiff
Add native-compile-prune-cache command
authorLars Ingebrigtsen <larsi@gnus.org>
Sat, 2 Jul 2022 10:59:41 +0000 (12:59 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Sat, 2 Jul 2022 10:59:41 +0000 (12:59 +0200)
* lisp/emacs-lisp/comp.el (native-compile-prune-cache): New
command (bug#48108).

etc/NEWS
lisp/emacs-lisp/comp.el

index 30404cc13c24c1098b521accf5bb4578b3e6fd74..4b3a02b2e003e29b0e822faf236669fad24f6499 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -148,8 +148,15 @@ This is run at the end of the Emacs startup process, and is meant to
 be used to reinitialize structures that would normally be done at load
 time.
 
+** Native Compilation
+
+---
+*** New command 'native-compile-prune-cache'.
+This command deletes older .eln cache entries (but not the ones for
+the current Emacs version).
+
 ---
-** New function 'startup-redirect-eln-cache'.
+*** New function 'startup-redirect-eln-cache'.
 This function can be called in your init files to change the
 user-specific directory where Emacs stores the "*.eln" files produced
 by native compilation of Lisp packages Emacs loads.  The default
index 4ce2ce75e10176d886850ce94f250c6125bccb94..2109aa9923a98b2edeae26056572a6300094cbc5 100644 (file)
@@ -4288,6 +4288,30 @@ of (commands) to run simultaneously."
   (let ((load (not (not load))))
     (native--compile-async files recursively load selector)))
 
+(defun native-compile-prune-cache ()
+  "Remove .eln files that aren't applicable to the current Emacs invocation."
+  (interactive)
+  (dolist (dir native-comp-eln-load-path)
+    ;; If a directory is non absolute it is assumed to be relative to
+    ;; `invocation-directory'.
+    (setq dir (expand-file-name dir invocation-directory))
+    (when (file-exists-p dir)
+      (dolist (subdir (directory-files dir t))
+        (when (and (file-directory-p subdir)
+                   (file-writable-p subdir)
+                   (not (equal (file-name-nondirectory
+                                (directory-file-name subdir))
+                               comp-native-version-dir)))
+          (message "Deleting %s..." subdir)
+          ;; We're being overly cautious here -- there shouldn't be
+          ;; anything but .eln files in these directories.
+          (dolist (eln (directory-files subdir t "\\.eln\\(\\.tmp\\)?\\'"))
+            (when (file-writable-p eln)
+              (delete-file eln)))
+          (when (directory-empty-p subdir)
+            (delete-directory subdir))))))
+  (message "Cache cleared"))
+
 (provide 'comp)
 
 ;; LocalWords: limplified limplified limplification limplify Limple LIMPLE libgccjit elc eln