mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-27 19:31:38 +00:00
add file name to autoload error messages.
* lisp/emacs-lisp/autoload.el (autoload-save-buffers): add condition-case to add file name to error message.
This commit is contained in:
parent
4f855d6fc9
commit
fed091f7c2
@ -524,117 +524,130 @@ different from OUTFILE, then OUTBUF is ignored.
|
||||
Return non-nil if and only if FILE adds no autoloads to OUTFILE
|
||||
\(or OUTBUF if OUTFILE is nil). The actual return value is
|
||||
FILE's modification time."
|
||||
(let (load-name
|
||||
(print-length nil)
|
||||
(print-level nil)
|
||||
(print-readably t) ; This does something in Lucid Emacs.
|
||||
(float-output-format nil)
|
||||
(visited (get-file-buffer file))
|
||||
(otherbuf nil)
|
||||
(absfile (expand-file-name file))
|
||||
;; nil until we found a cookie.
|
||||
output-start)
|
||||
(when
|
||||
(catch 'done
|
||||
(with-current-buffer (or visited
|
||||
;; It is faster to avoid visiting the file.
|
||||
(autoload-find-file file))
|
||||
;; Obey the no-update-autoloads file local variable.
|
||||
(unless no-update-autoloads
|
||||
(or noninteractive (message "Generating autoloads for %s..." file))
|
||||
(setq load-name
|
||||
(if (stringp generated-autoload-load-name)
|
||||
generated-autoload-load-name
|
||||
(autoload-file-load-name absfile)))
|
||||
;; FIXME? Comparing file-names for equality with just equal
|
||||
;; is fragile, eg if one has an automounter prefix and one
|
||||
;; does not, but both refer to the same physical file.
|
||||
(when (and outfile
|
||||
(not
|
||||
(if (memq system-type '(ms-dos windows-nt))
|
||||
(equal (downcase outfile)
|
||||
(downcase (autoload-generated-file)))
|
||||
(equal outfile (autoload-generated-file)))))
|
||||
(setq otherbuf t))
|
||||
(save-excursion
|
||||
(save-restriction
|
||||
(widen)
|
||||
(when autoload-builtin-package-versions
|
||||
(let ((version (lm-header "version"))
|
||||
package)
|
||||
(and version
|
||||
(setq version (ignore-errors (version-to-list version)))
|
||||
(setq package (or (lm-header "package")
|
||||
(file-name-sans-extension
|
||||
(file-name-nondirectory file))))
|
||||
(setq output-start (autoload--setup-output
|
||||
otherbuf outbuf absfile load-name))
|
||||
(let ((standard-output (marker-buffer output-start))
|
||||
(print-quoted t))
|
||||
(princ `(push (purecopy
|
||||
',(cons (intern package) version))
|
||||
package--builtin-versions))
|
||||
(princ "\n")))))
|
||||
;; Include the file name in any error messages
|
||||
(condition-case err
|
||||
(let (load-name
|
||||
(print-length nil)
|
||||
(print-level nil)
|
||||
(print-readably t) ; This does something in Lucid Emacs.
|
||||
(float-output-format nil)
|
||||
(visited (get-file-buffer file))
|
||||
(otherbuf nil)
|
||||
(absfile (expand-file-name file))
|
||||
;; nil until we found a cookie.
|
||||
output-start)
|
||||
(when
|
||||
(catch 'done
|
||||
(with-current-buffer (or visited
|
||||
;; It is faster to avoid visiting the file.
|
||||
(autoload-find-file file))
|
||||
;; Obey the no-update-autoloads file local variable.
|
||||
(unless no-update-autoloads
|
||||
(or noninteractive (message "Generating autoloads for %s..." file))
|
||||
(setq load-name
|
||||
(if (stringp generated-autoload-load-name)
|
||||
generated-autoload-load-name
|
||||
(autoload-file-load-name absfile)))
|
||||
;; FIXME? Comparing file-names for equality with just equal
|
||||
;; is fragile, eg if one has an automounter prefix and one
|
||||
;; does not, but both refer to the same physical file.
|
||||
(when (and outfile
|
||||
(not
|
||||
(if (memq system-type '(ms-dos windows-nt))
|
||||
(equal (downcase outfile)
|
||||
(downcase (autoload-generated-file)))
|
||||
(equal outfile (autoload-generated-file)))))
|
||||
(setq otherbuf t))
|
||||
(save-excursion
|
||||
(save-restriction
|
||||
(widen)
|
||||
(when autoload-builtin-package-versions
|
||||
(let ((version (lm-header "version"))
|
||||
package)
|
||||
(and version
|
||||
(setq version (ignore-errors (version-to-list version)))
|
||||
(setq package (or (lm-header "package")
|
||||
(file-name-sans-extension
|
||||
(file-name-nondirectory file))))
|
||||
(setq output-start (autoload--setup-output
|
||||
otherbuf outbuf absfile load-name))
|
||||
(let ((standard-output (marker-buffer output-start))
|
||||
(print-quoted t))
|
||||
(princ `(push (purecopy
|
||||
',(cons (intern package) version))
|
||||
package--builtin-versions))
|
||||
(princ "\n")))))
|
||||
|
||||
(goto-char (point-min))
|
||||
(while (not (eobp))
|
||||
(skip-chars-forward " \t\n\f")
|
||||
(cond
|
||||
((looking-at (regexp-quote generate-autoload-cookie))
|
||||
;; If not done yet, figure out where to insert this text.
|
||||
(unless output-start
|
||||
(setq output-start (autoload--setup-output
|
||||
otherbuf outbuf absfile load-name)))
|
||||
(autoload--print-cookie-text output-start load-name file))
|
||||
((looking-at ";")
|
||||
;; Don't read the comment.
|
||||
(forward-line 1))
|
||||
(t
|
||||
(forward-sexp 1)
|
||||
(forward-line 1))))))
|
||||
(goto-char (point-min))
|
||||
(while (not (eobp))
|
||||
(skip-chars-forward " \t\n\f")
|
||||
(cond
|
||||
((looking-at (regexp-quote generate-autoload-cookie))
|
||||
;; If not done yet, figure out where to insert this text.
|
||||
(unless output-start
|
||||
(setq output-start (autoload--setup-output
|
||||
otherbuf outbuf absfile load-name)))
|
||||
(autoload--print-cookie-text output-start load-name file))
|
||||
((looking-at ";")
|
||||
;; Don't read the comment.
|
||||
(forward-line 1))
|
||||
(t
|
||||
(forward-sexp 1)
|
||||
(forward-line 1))))))
|
||||
|
||||
(when output-start
|
||||
(let ((secondary-autoloads-file-buf
|
||||
(if otherbuf (current-buffer))))
|
||||
(with-current-buffer (marker-buffer output-start)
|
||||
(save-excursion
|
||||
;; Insert the section-header line which lists the file name
|
||||
;; and which functions are in it, etc.
|
||||
(goto-char output-start)
|
||||
(let ((relfile (file-relative-name absfile)))
|
||||
(autoload-insert-section-header
|
||||
(marker-buffer output-start)
|
||||
() load-name relfile
|
||||
(if secondary-autoloads-file-buf
|
||||
;; MD5 checksums are much better because they do not
|
||||
;; change unless the file changes (so they'll be
|
||||
;; equal on two different systems and will change
|
||||
;; less often than time-stamps, thus leading to fewer
|
||||
;; unneeded changes causing spurious conflicts), but
|
||||
;; using time-stamps is a very useful optimization,
|
||||
;; so we use time-stamps for the main autoloads file
|
||||
;; (loaddefs.el) where we have special ways to
|
||||
;; circumvent the "random change problem", and MD5
|
||||
;; checksum in secondary autoload files where we do
|
||||
;; not need the time-stamp optimization because it is
|
||||
;; already provided by the primary autoloads file.
|
||||
(md5 secondary-autoloads-file-buf
|
||||
;; We'd really want to just use
|
||||
;; `emacs-internal' instead.
|
||||
nil nil 'emacs-mule-unix)
|
||||
(nth 5 (file-attributes relfile))))
|
||||
(insert ";;; Generated autoloads from " relfile "\n")))
|
||||
(insert generate-autoload-section-trailer))))
|
||||
(or noninteractive
|
||||
(message "Generating autoloads for %s...done" file)))
|
||||
(or visited
|
||||
;; We created this buffer, so we should kill it.
|
||||
(kill-buffer (current-buffer))))
|
||||
(or (not output-start)
|
||||
;; If the entries were added to some other buffer, then the file
|
||||
;; doesn't add entries to OUTFILE.
|
||||
otherbuf))
|
||||
(nth 5 (file-attributes absfile)))))
|
||||
(when output-start
|
||||
(let ((secondary-autoloads-file-buf
|
||||
(if otherbuf (current-buffer))))
|
||||
(with-current-buffer (marker-buffer output-start)
|
||||
(save-excursion
|
||||
;; Insert the section-header line which lists the file name
|
||||
;; and which functions are in it, etc.
|
||||
(goto-char output-start)
|
||||
(let ((relfile (file-relative-name absfile)))
|
||||
(autoload-insert-section-header
|
||||
(marker-buffer output-start)
|
||||
() load-name relfile
|
||||
(if secondary-autoloads-file-buf
|
||||
;; MD5 checksums are much better because they do not
|
||||
;; change unless the file changes (so they'll be
|
||||
;; equal on two different systems and will change
|
||||
;; less often than time-stamps, thus leading to fewer
|
||||
;; unneeded changes causing spurious conflicts), but
|
||||
;; using time-stamps is a very useful optimization,
|
||||
;; so we use time-stamps for the main autoloads file
|
||||
;; (loaddefs.el) where we have special ways to
|
||||
;; circumvent the "random change problem", and MD5
|
||||
;; checksum in secondary autoload files where we do
|
||||
;; not need the time-stamp optimization because it is
|
||||
;; already provided by the primary autoloads file.
|
||||
(md5 secondary-autoloads-file-buf
|
||||
;; We'd really want to just use
|
||||
;; `emacs-internal' instead.
|
||||
nil nil 'emacs-mule-unix)
|
||||
(nth 5 (file-attributes relfile))))
|
||||
(insert ";;; Generated autoloads from " relfile "\n")))
|
||||
(insert generate-autoload-section-trailer))))
|
||||
(or noninteractive
|
||||
(message "Generating autoloads for %s...done" file)))
|
||||
(or visited
|
||||
;; We created this buffer, so we should kill it.
|
||||
(kill-buffer (current-buffer))))
|
||||
(or (not output-start)
|
||||
;; If the entries were added to some other buffer, then the file
|
||||
;; doesn't add entries to OUTFILE.
|
||||
otherbuf))
|
||||
(nth 5 (file-attributes absfile))))
|
||||
(error
|
||||
;; Probably unbalanced parens in forward-sexp. In that case, the
|
||||
;; condition is scan-error, and the signal data includes point
|
||||
;; where the error was found; we'd like to convert that to
|
||||
;; line:col, but line-number-at-pos gets the wrong line in batch
|
||||
;; mode for some reason.
|
||||
;;
|
||||
;; At least this gets the file name in the error message; the
|
||||
;; developer can use goto-char to get to the error position.
|
||||
(error "%s:0:0: error: %s: %s" file (car err) (cdr err)))
|
||||
))
|
||||
|
||||
(defun autoload-save-buffers ()
|
||||
(while autoload-modified-buffers
|
||||
|
Loading…
Reference in New Issue
Block a user