Extract ChangeLog entries when committing a directory
* lisp/vc/vc-dispatcher.el (vc-log-edit): Update FIXME comment. * lisp/vc/log-edit.el (log-edit-changelog-insert-entries): Add a FIXME comment. (log-edit-changelog-entries): Extract from `log-edit-changelog-entries', handle FILE being a directory (http://lists.gnu.org/archive/html/emacs-devel/2015-04/msg00555.html).
This commit is contained in:
parent
e3ee455d29
commit
878058df46
2 changed files with 30 additions and 18 deletions
|
@ -917,21 +917,8 @@ where LOGBUFFER is the name of the ChangeLog buffer, and each
|
|||
(log-edit-narrow-changelog)
|
||||
(goto-char (point-min))
|
||||
|
||||
;; Search for the name of FILE relative to the ChangeLog. If that
|
||||
;; doesn't occur anywhere, they're not using full relative
|
||||
;; filenames in the ChangeLog, so just look for FILE; we'll accept
|
||||
;; some false positives.
|
||||
(let ((pattern (file-relative-name
|
||||
file (file-name-directory changelog-file-name))))
|
||||
(if (or (string= pattern "")
|
||||
(not (save-excursion
|
||||
(search-forward pattern nil t))))
|
||||
(setq pattern (file-name-nondirectory file)))
|
||||
|
||||
(setq pattern (concat "\\(^\\|[^[:alnum:]]\\)"
|
||||
(regexp-quote pattern)
|
||||
"\\($\\|[^[:alnum:]]\\)"))
|
||||
|
||||
(let ((pattern (log-edit-changelog--pattern file
|
||||
changelog-file-name)))
|
||||
(let (texts
|
||||
(pos (point)))
|
||||
(while (and (not (eobp)) (re-search-forward pattern nil t))
|
||||
|
@ -946,6 +933,25 @@ where LOGBUFFER is the name of the ChangeLog buffer, and each
|
|||
|
||||
(cons (current-buffer) texts)))))))))
|
||||
|
||||
(defun log-edit-changelog--pattern (file changelog-file-name)
|
||||
(if (eq (aref file (1- (length file))) ?/)
|
||||
;; Match any files inside this directory.
|
||||
(concat "^\t\\* " (unless (string= file "./") file))
|
||||
;; Search for the name of FILE relative to the ChangeLog. If that
|
||||
;; doesn't occur anywhere, they're not using full relative
|
||||
;; filenames in the ChangeLog, so just look for FILE; we'll accept
|
||||
;; some false positives.
|
||||
(let ((pattern (file-relative-name
|
||||
file (file-name-directory changelog-file-name))))
|
||||
;; FIXME: When can the above return an empty string?
|
||||
(if (or (string= pattern "")
|
||||
(not (save-excursion
|
||||
(search-forward pattern nil t))))
|
||||
(setq pattern (file-name-nondirectory file)))
|
||||
(setq pattern (concat "\\(^\\|[^[:alnum:]]\\)"
|
||||
(regexp-quote pattern)
|
||||
"\\($\\|[^[:alnum:]]\\)")))))
|
||||
|
||||
(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."
|
||||
|
@ -957,6 +963,8 @@ Rename relative filenames in the ChangeLog entry as FILES."
|
|||
(setq bound (point-marker))
|
||||
(when log-name
|
||||
(dolist (f files)
|
||||
;; FIXME: f can be a directory, a (possibly indirect) parent
|
||||
;; of the ChangeLog file.
|
||||
(save-excursion
|
||||
(goto-char opoint)
|
||||
(when (re-search-forward
|
||||
|
|
|
@ -606,9 +606,13 @@ NOT-URGENT means it is ok to continue if the user says not to save."
|
|||
(not (equal vc-log-fileset fileset))))
|
||||
`((log-edit-listfun
|
||||
. (lambda ()
|
||||
;; FIXME: Should expand the list for directories.
|
||||
;; Is the above still relevant? If so, it needs a
|
||||
;; better explanation. -- dgutov
|
||||
;; FIXME: When fileset includes directories, and
|
||||
;; there are relevant ChangeLog files inside their
|
||||
;; children, we don't find them. Either handle it
|
||||
;; in `log-edit-insert-changelog-entries' by
|
||||
;; walking down the file trees, or somehow pass
|
||||
;; `fileset-only-files' from `vc-next-action'
|
||||
;; through to this function.
|
||||
(let ((root (vc-root-dir)))
|
||||
;; Returns paths relative to the root, so that
|
||||
;; `log-edit-changelog-insert-entries'
|
||||
|
|
Loading…
Add table
Reference in a new issue