mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-05 07:01:11 -08:00
Refactor for upcoming changes.
(autoload-find-destination): New function extracted from update-file-autoloads. (update-file-autoloads): Use it.
This commit is contained in:
parent
1e0d2d6027
commit
57536a8371
2 changed files with 76 additions and 61 deletions
|
|
@ -1,3 +1,10 @@
|
|||
2007-06-25 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* emacs-lisp/autoload.el: Refactor for upcoming changes.
|
||||
(autoload-find-destination): New function extracted from
|
||||
update-file-autoloads.
|
||||
(update-file-autoloads): Use it.
|
||||
|
||||
2007-06-24 Jay Belanger <jay.p.belanger@gmail.com>
|
||||
|
||||
* calc/calc-comb.el (math-init-random-base,math-prime-test):
|
||||
|
|
@ -6,7 +13,7 @@
|
|||
|
||||
* calc/calc-misc.el (math-div2-bignum): Use math-bignum-digit-size.
|
||||
|
||||
* calc/calc-math.el (math-scale-bignum-digit-size): Renamed from
|
||||
* calc/calc-math.el (math-scale-bignum-digit-size): Rename from
|
||||
math-scale-bignum-3.
|
||||
(math-isqrt-bignum): Use math-scale-bignum-digit-size and
|
||||
math-bignum-digit-size.
|
||||
|
|
@ -24,8 +31,8 @@
|
|||
(bibtex-insert-kill, bibtex-mark-entry): Use push-mark.
|
||||
(bibtex-format-entry, bibtex-reformat): Handle new options of
|
||||
bibtex-entry-format.
|
||||
(bibtex-field-re-init, bibtex-font-lock-cite, bibtex-dist): New
|
||||
functions.
|
||||
(bibtex-field-re-init, bibtex-font-lock-cite, bibtex-dist):
|
||||
New functions.
|
||||
(bibtex-complete-internal): Do not display messages while
|
||||
minibuffer is used. Do not leave around a completions buffer
|
||||
that is out of date.
|
||||
|
|
|
|||
|
|
@ -412,74 +412,82 @@ save the buffer too.
|
|||
|
||||
Return FILE if there was no autoload cookie in it, else nil."
|
||||
(interactive "fUpdate autoloads for file: \np")
|
||||
(let ((existing-buffer (get-file-buffer file)))
|
||||
(with-temp-buffer
|
||||
;; Let's presume the file is not visited, so we call
|
||||
;; autoload-find-destination from a dummy buffer, except if the file
|
||||
;; is visited, in which case we use that buffer instead.
|
||||
(if existing-buffer (set-buffer existing-buffer))
|
||||
|
||||
(catch 'up-to-date
|
||||
(let ((buf (autoload-find-destination file)))
|
||||
(with-current-buffer buf
|
||||
(let ((no-autoloads (generate-file-autoloads file)))
|
||||
|
||||
(and save-after
|
||||
(buffer-modified-p)
|
||||
(save-buffer))
|
||||
|
||||
(if no-autoloads file))))))))
|
||||
|
||||
(defun autoload-find-destination (file)
|
||||
"Find the destination point of the current buffer's autoloads.
|
||||
FILE is the file name of the current buffer.
|
||||
Returns a buffer whose point is placed at the requested location.
|
||||
Throws `up-to-date' if the file's autoloads are uptodate, otherwise
|
||||
removes any prior now out-of-date autoload entries.
|
||||
The current buffer only matters if it is visiting a file or if it has a buffer-local
|
||||
value for some variables such as `generated-autoload-file', so it's OK
|
||||
to call it from a dummy buffer if FILE is not currently visited."
|
||||
;; (message "autoload-find-destination %S" file)
|
||||
(let ((load-name (autoload-file-load-name file))
|
||||
(found nil)
|
||||
(existing-buffer (get-file-buffer file))
|
||||
(no-autoloads nil))
|
||||
(save-excursion
|
||||
;; We want to get a value for generated-autoload-file from
|
||||
;; the local variables section if it's there.
|
||||
(if existing-buffer
|
||||
(set-buffer existing-buffer))
|
||||
;; We must read/write the file without any code conversion,
|
||||
;; but still decode EOLs.
|
||||
(let ((coding-system-for-read 'raw-text))
|
||||
(set-buffer (find-file-noselect
|
||||
(autoload-ensure-default-file (autoload-generated-file))))
|
||||
;; This is to make generated-autoload-file have Unix EOLs, so
|
||||
;; that it is portable to all platforms.
|
||||
(setq buffer-file-coding-system 'raw-text-unix))
|
||||
(existing-buffer (if buffer-file-name (current-buffer)))
|
||||
(found nil))
|
||||
(with-current-buffer
|
||||
;; We must read/write the file without any code conversion,
|
||||
;; but still decode EOLs.
|
||||
(let ((coding-system-for-read 'raw-text))
|
||||
(find-file-noselect
|
||||
(autoload-ensure-default-file (autoload-generated-file))))
|
||||
;; This is to make generated-autoload-file have Unix EOLs, so
|
||||
;; that it is portable to all platforms.
|
||||
(setq buffer-file-coding-system 'raw-text-unix)
|
||||
(or (> (buffer-size) 0)
|
||||
(error "Autoloads file %s does not exist" buffer-file-name))
|
||||
(or (file-writable-p buffer-file-name)
|
||||
(error "Autoloads file %s is not writable" buffer-file-name))
|
||||
(save-excursion
|
||||
(save-restriction
|
||||
(widen)
|
||||
(goto-char (point-min))
|
||||
;; Look for the section for LOAD-NAME.
|
||||
(while (and (not found)
|
||||
(search-forward generate-autoload-section-header nil t))
|
||||
(let ((form (autoload-read-section-header)))
|
||||
(cond ((string= (nth 2 form) load-name)
|
||||
;; We found the section for this file.
|
||||
;; Check if it is up to date.
|
||||
(let ((begin (match-beginning 0))
|
||||
(last-time (nth 4 form))
|
||||
(widen)
|
||||
(goto-char (point-min))
|
||||
;; Look for the section for LOAD-NAME.
|
||||
(while (and (not found)
|
||||
(search-forward generate-autoload-section-header nil t))
|
||||
(let ((form (autoload-read-section-header)))
|
||||
(cond ((string= (nth 2 form) load-name)
|
||||
;; We found the section for this file.
|
||||
;; Check if it is up to date.
|
||||
(let ((begin (match-beginning 0))
|
||||
(last-time (nth 4 form))
|
||||
(file-time (nth 5 (file-attributes file))))
|
||||
(if (and (or (null existing-buffer)
|
||||
(not (buffer-modified-p existing-buffer)))
|
||||
(listp last-time) (= (length last-time) 2)
|
||||
(not (time-less-p last-time file-time)))
|
||||
(progn
|
||||
(if (interactive-p)
|
||||
(message "\
|
||||
Autoload section for %s is up to date."
|
||||
file))
|
||||
(setq found 'up-to-date))
|
||||
(search-forward generate-autoload-section-trailer)
|
||||
(delete-region begin (point))
|
||||
(setq found t))))
|
||||
((string< load-name (nth 2 form))
|
||||
;; We've come to a section alphabetically later than
|
||||
;; LOAD-NAME. We assume the file is in order and so
|
||||
;; there must be no section for LOAD-NAME. We will
|
||||
;; insert one before the section here.
|
||||
(goto-char (match-beginning 0))
|
||||
(setq found 'new)))))
|
||||
(or found
|
||||
(progn
|
||||
(setq found 'new)
|
||||
;; No later sections in the file. Put before the last page.
|
||||
(goto-char (point-max))
|
||||
(search-backward "\f" nil t)))
|
||||
(or (eq found 'up-to-date)
|
||||
(setq no-autoloads (generate-file-autoloads file)))))
|
||||
(and save-after
|
||||
(buffer-modified-p)
|
||||
(save-buffer))
|
||||
|
||||
(if no-autoloads file))))
|
||||
(throw 'up-to-date nil)
|
||||
(autoload-remove-section (match-beginning 0))
|
||||
(setq found t))))
|
||||
((string< load-name (nth 2 form))
|
||||
;; We've come to a section alphabetically later than
|
||||
;; LOAD-NAME. We assume the file is in order and so
|
||||
;; there must be no section for LOAD-NAME. We will
|
||||
;; insert one before the section here.
|
||||
(goto-char (match-beginning 0))
|
||||
(setq found t)))))
|
||||
(or found
|
||||
(progn
|
||||
;; No later sections in the file. Put before the last page.
|
||||
(goto-char (point-max))
|
||||
(search-backward "\f" nil t)))
|
||||
(current-buffer))))
|
||||
|
||||
(defun autoload-remove-section (begin)
|
||||
(goto-char begin)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue