diff options
| author | Lars Ingebrigtsen | 2019-06-19 14:06:29 +0200 |
|---|---|---|
| committer | Lars Ingebrigtsen | 2019-06-19 14:06:29 +0200 |
| commit | 0837d9a4ea035f89426b6be56d5b848636472b1c (patch) | |
| tree | 7c0fcf627419a808dc561499f7b1d1e2dfc140c6 | |
| parent | 390b4bc1e25fe691548d7ec982eb2f7027fe26a3 (diff) | |
| download | emacs-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.el | 133 |
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)) |