aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Ingebrigtsen2019-06-19 14:06:29 +0200
committerLars Ingebrigtsen2019-06-19 14:06:29 +0200
commit0837d9a4ea035f89426b6be56d5b848636472b1c (patch)
tree7c0fcf627419a808dc561499f7b1d1e2dfc140c6
parent390b4bc1e25fe691548d7ec982eb2f7027fe26a3 (diff)
downloademacs-0837d9a4ea035f89426b6be56d5b848636472b1c.tar.gz
emacs-0837d9a4ea035f89426b6be56d5b848636472b1c.zip
Tweak progess reporting in finder-compile-keywords
* lisp/finder.el (finder-compile-keywords): Use progress reporter to report the processing.
-rw-r--r--lisp/finder.el133
1 files changed, 70 insertions, 63 deletions
diff --git a/lisp/finder.el b/lisp/finder.el
index 26ff5a18f1d..f95049f60bd 100644
--- a/lisp/finder.el
+++ b/lisp/finder.el
@@ -188,71 +188,78 @@ from; the default is `load-path'."
188 ;; Allow compressed files also. 188 ;; Allow compressed files also.
189 (setq package--builtins nil) 189 (setq package--builtins nil)
190 (setq finder-keywords-hash (make-hash-table :test 'eq)) 190 (setq finder-keywords-hash (make-hash-table :test 'eq))
191 (let ((el-file-regexp "^\\([^=].*\\)\\.el\\(\\.\\(gz\\|Z\\)\\)?$") 191 (let* ((el-file-regexp "^\\([^=].*\\)\\.el\\(\\.\\(gz\\|Z\\)\\)?$")
192 (file-count 0) 192 (file-count 0)
193 package-override files base-name ; processed 193 (files (cl-loop for d in (or dirs load-path)
194 summary keywords package version entry desc) 194 when (file-exists-p (directory-file-name d))
195 (dolist (d (or dirs load-path)) 195 append (mapcar
196 (when (file-exists-p (directory-file-name d)) 196 (lambda (f)
197 (setq package-override 197 (cons d f))
198 (directory-files d nil el-file-regexp))))
199 (progress (make-progress-reporter
200 (byte-compile-info-string "Scanning files for finder")
201 0 (length files)))
202 package-override base-name ; processed
203 summary keywords package version entry desc)
204 (dolist (elem files)
205 (let* ((d (car elem))
206 (f (cdr elem))
207 (package-override
198 (intern-soft 208 (intern-soft
199 (cdr-safe 209 (cdr-safe
200 (assoc (file-name-nondirectory (directory-file-name d)) 210 (assoc (file-name-nondirectory
201 finder--builtins-alist)))) 211 (directory-file-name d))
202 (setq files (directory-files d nil el-file-regexp)) 212 finder--builtins-alist)))))
203 (dolist (f files) 213 (progress-reporter-update progress (setq file-count (1+ file-count)))
204 (setq file-count (1+ file-count)) 214 (unless (or (string-match finder-no-scan-regexp f)
205 (when (zerop (mod file-count 100)) 215 (null (setq base-name
206 (byte-compile-info-message "Scanned %s files for finder" 216 (and (string-match el-file-regexp f)
207 file-count)) 217 (intern (match-string 1 f))))))
208 (unless (or (string-match finder-no-scan-regexp f) 218 ;; (memq base-name processed))
209 (null (setq base-name 219 ;; There are multiple files in the tree with the same
210 (and (string-match el-file-regexp f) 220 ;; basename. So skipping files based on basename means you
211 (intern (match-string 1 f)))))) 221 ;; randomly (depending on which order the files are
212;; (memq base-name processed)) 222 ;; traversed in) miss some packages.
213;; There are multiple files in the tree with the same basename. 223 ;; https://debbugs.gnu.org/14010
214;; So skipping files based on basename means you randomly (depending 224 ;; You might think this could lead to two files providing
215;; on which order the files are traversed in) miss some packages. 225 ;; the same package, but it does not, because the duplicates
216;; https://debbugs.gnu.org/14010 226 ;; are (at time of writing) all due to files in cedet, which
217;; You might think this could lead to two files providing the same package, 227 ;; end up with package-override set. FIXME this is
218;; but it does not, because the duplicates are (at time of writing) 228 ;; obviously fragile. Make the (eq base-name package) case
219;; all due to files in cedet, which end up with package-override set. 229 ;; below issue a warning if package-override is nil?
220;; FIXME this is obviously fragile. 230 ;; (push base-name processed)
221;; Make the (eq base-name package) case below issue a warning if 231 (with-temp-buffer
222;; package-override is nil? 232 (insert-file-contents (expand-file-name f d))
223;; (push base-name processed) 233 (setq keywords (mapcar 'intern (lm-keywords-list))
224 (with-temp-buffer 234 package (or package-override
225 (insert-file-contents (expand-file-name f d)) 235 (let ((str (lm-header "package")))
226 (setq keywords (mapcar 'intern (lm-keywords-list)) 236 (if str (intern str)))
227 package (or package-override 237 base-name)
228 (let ((str (lm-header "package"))) 238 summary (or (cdr
229 (if str (intern str))) 239 (assq package finder--builtins-descriptions))
230 base-name) 240 (lm-synopsis))
231 summary (or (cdr 241 version (lm-header "version")))
232 (assq package finder--builtins-descriptions)) 242 (when summary
233 (lm-synopsis)) 243 (setq version (ignore-errors (version-to-list version)))
234 version (lm-header "version"))) 244 (setq entry (assq package package--builtins))
235 (when summary 245 (cond ((null entry)
236 (setq version (ignore-errors (version-to-list version))) 246 (push (cons package
237 (setq entry (assq package package--builtins)) 247 (package-make-builtin version summary))
238 (cond ((null entry) 248 package--builtins))
239 (push (cons package 249 ;; The idea here is that eg calc.el gets to define
240 (package-make-builtin version summary)) 250 ;; the description of the calc package.
241 package--builtins)) 251 ;; This does not work for eg nxml-mode.el.
242 ;; The idea here is that eg calc.el gets to define 252 ((or (eq base-name package) version)
243 ;; the description of the calc package. 253 (setq desc (cdr entry))
244 ;; This does not work for eg nxml-mode.el. 254 (aset desc 0 version)
245 ((or (eq base-name package) version) 255 (aset desc 2 summary)))
246 (setq desc (cdr entry)) 256 (dolist (kw keywords)
247 (aset desc 0 version) 257 (puthash kw
248 (aset desc 2 summary))) 258 (cons package
249 (dolist (kw keywords) 259 (delq package
250 (puthash kw 260 (gethash kw finder-keywords-hash)))
251 (cons package 261 finder-keywords-hash))))))
252 (delq package 262 (progress-reporter-done progress))
253 (gethash kw finder-keywords-hash)))
254 finder-keywords-hash))))))))
255
256 (setq package--builtins 263 (setq package--builtins
257 (sort package--builtins 264 (sort package--builtins
258 (lambda (a b) (string< (symbol-name (car a)) 265 (lambda (a b) (string< (symbol-name (car a))