Emacs:有没有办法从diff生成骨架ChangeLog?

时间:2009-05-05 17:59:52

标签: version-control emacs elisp changelog

在使用版本控制中的源代码时,我想部分自动创建GNU样式的ChangeLog条目。 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

我找到this feature in Emacs manual,但我不知道如何在此处应用它。

有什么建议吗?感谢。

编辑:一个答案建议vc-update-change-log。不幸的是,它只支持CVS,它通过查询已经提交的VC日志来创建ChangeLog条目。因此,即使它支持svn和其他人,也不可能在同一次提交中提交更改和ChangeLog。

EDIT2:显然add-changelog-entry-other-window(C-x 4 a)不仅可以从被访问文件中运行,还可以从涉及该文件的diff hunk中运行。 (Source)这几乎就是我要找的。这与遍布所有帅哥的elisp循环一起解决它。

4 个答案:

答案 0 :(得分:3)

有一个函数vc-update-change-log可以自动从版本控制日志条目生成更改日志条目。

答案 1 :(得分:3)

记录

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获得。

答案 2 :(得分:2)

我不知道这样做的功能,但应该很容易实现。基本上,你想要

  • 获取更改的文件
  • 对于每个文件,请致电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 - 你设置其他参数。

答案 3 :(得分:2)

我写了一个功能来做类似于你所说的事情。您可以在http://www.emacswiki.org/emacs/log-edit-fill

获取代码