Mercurial > emacs
changeset 108782:549433326e7e
Rename relative filenames in ChangeLog entries according to root.
* lisp/log-edit.el (log-edit-strip-single-file-name): Default to nil.
(log-edit-changelog-entries): Doc fix.
(log-edit-changelog-insert-entries): Args changed. Rename
relative filenames in ChangeLog entries. Delete tabs.
(log-edit-insert-changelog-entries): Reorganize return value of
`log-edit-changelog-entries' to pass filenames to
log-edit-changelog-insert-entries.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Tue, 25 May 2010 18:50:56 -0400 |
parents | 73e2a7719a24 |
children | 3eac08e0e4ee 9b696f89bbd3 3e401eb6d5ee |
files | lisp/ChangeLog lisp/log-edit.el |
diffstat | 2 files changed, 53 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Tue May 25 21:13:41 2010 +0200 +++ b/lisp/ChangeLog Tue May 25 18:50:56 2010 -0400 @@ -1,3 +1,13 @@ +2010-05-25 Chong Yidong <cyd@stupidchicken.com> + + * log-edit.el (log-edit-strip-single-file-name): Default to nil. + (log-edit-changelog-entries): Doc fix. + (log-edit-changelog-insert-entries): Args changed. Rename + relative filenames in ChangeLog entries. Delete tabs. + (log-edit-insert-changelog-entries): Reorganize return value of + `log-edit-changelog-entries' to pass filenames to + log-edit-changelog-insert-entries. + 2010-05-25 Thierry Volpiatto <thierry.volpiatto@gmail.com> * dired.el (dired-mode-map): Rebind "\C-t\C-t" from
--- a/lisp/log-edit.el Tue May 25 21:13:41 2010 +0200 +++ b/lisp/log-edit.el Tue May 25 18:50:56 2010 -0400 @@ -149,12 +149,12 @@ :type '(hook :options (log-edit-set-common-indentation log-edit-add-to-changelog))) -(defcustom log-edit-strip-single-file-name t +(defcustom log-edit-strip-single-file-name nil "If non-nil, remove file name from single-file log entries." :type 'boolean :safe 'booleanp :group 'log-edit - :version "23.2") + :version "24.1") (defvar cvs-changelog-full-paragraphs t) (make-obsolete-variable 'cvs-changelog-full-paragraphs @@ -691,7 +691,7 @@ (defun log-edit-changelog-entries (file) "Return the ChangeLog entries for FILE, and the ChangeLog they came from. The return value looks like this: - (LOGBUFFER (ENTRYSTART . ENTRYEND) ...) + (LOGBUFFER (ENTRYSTART ENTRYEND) ...) where LOGBUFFER is the name of the ChangeLog buffer, and each \(ENTRYSTART . ENTRYEND\) pair is a buffer region." (let ((changelog-file-name @@ -749,34 +749,51 @@ (cons (current-buffer) texts)))))))) -(defun log-edit-changelog-insert-entries (buffer regions) - "Insert those regions in BUFFER specified in REGIONS. -Sort REGIONS front-to-back first." - (let ((regions (sort regions 'car-less-than-car)) - (last)) - (dolist (region regions) - (when (and last (< last (car region))) (newline)) - (setq last (elt region 1)) - (apply 'insert-buffer-substring buffer region)))) +(defun log-edit-changelog-insert-entries (buffer beg end &rest files) + "Insert the text from BUFFER between BEG and END. +Rename relative filenames in the ChangeLog entry as FILES." + (let ((opoint (point)) + (log-name (buffer-file-name buffer)) + (case-fold-search nil) + bound) + (insert-buffer-substring buffer beg end) + (setq bound (point-marker)) + (when log-name + (dolist (f files) + (save-excursion + (goto-char opoint) + (when (re-search-forward + (concat "\\(^\\|[ \t]\\)\\(" + (file-relative-name f (file-name-directory log-name)) + "\\)[, :\n]") + bound t) + (replace-match f t t nil 2))))) + ;; Eliminate tabs at the beginning of the line. + (save-excursion + (goto-char opoint) + (while (re-search-forward "^\\(\t+\\)" bound t) + (replace-match ""))))) (defun log-edit-insert-changelog-entries (files) "Given a list of files FILES, insert the ChangeLog entries for them." - (let ((buffer-entries nil)) - - ;; Add each buffer to buffer-entries, and associate it with the list - ;; of entries we want from that file. + (let ((log-entries nil)) + ;; Note that any ChangeLog entry can apply to more than one file. + ;; Here we construct a log-entries list with elements of the form + ;; ((LOGBUFFER ENTRYSTART ENTRYEND) FILE1 FILE2...) (dolist (file files) (let* ((entries (log-edit-changelog-entries file)) - (pair (assq (car entries) buffer-entries))) - (if pair - (setcdr pair (cvs-union (cdr pair) (cdr entries))) - (push entries buffer-entries)))) - - ;; Now map over each buffer in buffer-entries, sort the entries for - ;; each buffer, and extract them as strings. - (dolist (buffer-entry buffer-entries) - (log-edit-changelog-insert-entries (car buffer-entry) (cdr buffer-entry)) - (when (cdr buffer-entry) (newline))))) + (buf (car entries)) + key entry) + (dolist (region (cdr entries)) + (setq key (cons buf region)) + (if (setq entry (assoc key log-entries)) + (setcdr entry (append (cdr entry) (list file))) + (push (list key file) log-entries))))) + ;; Now map over log-entries, and extract the strings. + (dolist (log-entry (nreverse log-entries)) + (apply 'log-edit-changelog-insert-entries + (append (car log-entry) (cdr log-entry))) + (insert "\n")))) (defun log-edit-extract-headers (headers comment) "Extract headers from COMMENT to form command line arguments.