Emacs: есть ли способ создать скелет ChangeLog из diff? - PullRequest
6 голосов
/ 05 мая 2009

Я бы хотел частично автоматизировать создание записей ChangeLog в стиле GNU при работе с исходным кодом в управлении версиями. add-changelog-entry-other-window работает с одним файлом за раз, и вы должны посетить файл, чтобы использовать его.

Вместо этого я хотел бы иметь команду, которая будет выводить diff -u -p (или иметь интеграцию с режимами VC, чтобы он мог обрабатывать svn diff и т. Д.) И создавать все элементы скелета одновременно .

Например, если svn status показывает

D file1.c
M file2.c
A file3.c

команда создаст

2009-09-05  My Name <my.email>

      * file1.c: Removed.
      * file2.c: WRITE YOUR CHANGES HERE
      * file3.c: New.

Еще лучше, если бы он мог анализировать измененные файлы на некоторых языках до такой степени, чтобы он мог предложить:

  * file2.c (new_function): New function.
  (deleted_function): Removed.
  (changed_function): WRITE YOUR CHANGES HERE

Я нашел эту функцию в руководстве по Emacs , но я не понимаю, как я мог бы применить ее здесь.

Есть предложения? Спасибо.

РЕДАКТИРОВАТЬ: один ответ предложил vc-update-change-log . К сожалению, он поддерживает только CVS и создает записи ChangeLog путем запроса уже зафиксированных журналов VC. Таким образом, даже если бы он поддерживал svn и другие, было бы невозможно зафиксировать изменения и журнал изменений в одном и том же коммите.

EDIT2: очевидно, add-changelog-entry-other-window (C-x 4 a) работает не только из посещенного файла, но и из разностного блока, включающего этот файл. ( Источник ) Это почти то, что я ищу. Это вместе с циклом elisp для перебора всех блоков должно решить эту проблему.

Ответы [ 4 ]

3 голосов
/ 04 ноября 2013

diff-add-change-log-entries-other-window задокументировано, чтобы делать именно то, что вы упомянули в EDIT2:

diff-add-change-log-entries-other-window is an interactive compiled
Lisp function in `diff-mode.el'.

(diff-add-change-log-entries-other-window)

Iterate through the current diff and create ChangeLog entries.
I.e. like `add-change-log-entry-other-window' but applied to all hunks.

К сожалению, он не очень хорошо работает, скажем, с новыми файлами: он даже не включает имена таких файлов в записи журнала изменений скелета.

Возможно, вам повезет больше с gcc-скриптом mklog, который вы можете получить из http://gcc.gnu.org/viewcvs/gcc/trunk/contrib/mklog.

3 голосов
/ 06 мая 2009

Существует функция vc-update-change-log, которая автоматически генерирует записи журнала изменений из записей журнала контроля версий.

2 голосов
/ 03 июня 2009

Я написал функцию для выполнения чего-то похожего на то, о чем вы говорили. Вы можете получить код на http://www.emacswiki.org/emacs/log-edit-fill

2 голосов
/ 05 мая 2009

Я не знаю функции, которая делает это, но ее легко реализовать. По сути, вы хотите

  • получить измененные файлы
  • для каждого файла, звоните add-change-log
"Find change log file, and add an entry for today and an item for this file.
Optional arg WHOAMI (interactive prefix) non-nil means prompt for user
name and email (stored in `add-log-full-name' and `add-log-mailing-address').

Second arg FILE-NAME is file name of the change log.
If nil, use the value of `change-log-default-name'.

Third arg OTHER-WINDOW non-nil means visit in other window.

Fourth arg NEW-ENTRY non-nil means always create a new entry at the front;
never append to an existing entry.  Option `add-log-keep-changes-together'
otherwise affects whether a new entry is created.

Option `add-log-always-start-new-record' non-nil means always create a
new record, even when the last record was made on the same date and by
the same person.

The change log file can start with a copyright notice and a copying
permission notice.  The first blank line indicates the end of these
notices.

Today's date is calculated according to `add-log-time-zone-rule' if
non-nil, otherwise in local time."

поэтому магический код будет выглядеть примерно так:

(apply 'make-magic-change-log-entry changed-files-list)

и make-magic-change-log-entry просто каррируют функцию add-change-log, так что единственным аргументом является file-name - вы устанавливаете другие.

...