6

在版本控制中使用源代码时,我想部分地自动创建 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

在 Emacs 手册中找到了此功能,但我不知道如何在此处应用它。

有什么建议么?谢谢。

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

EDIT2:显然 add-changelog-entry-other-window (Cx 4 a)不仅适用于访问过的文件,而且适用于涉及该文件的差异大块。(来源)这几乎是我正在寻找的。这与 elisp 循环一起遍历所有大块应该可以解决它。

4

4 回答 4

3

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

于 2009-05-06T05:41:43.570 回答
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获得该脚本。

于 2013-11-04T03:49:37.963 回答
2

我不知道有什么功能可以做到这一点,但它应该很容易实现。基本上,你想

  • 获取更改的文件
  • 对于每个文件,调用add-change-log
“找到更改日志文件,并为今天添加一个条目并为此文件添加一个项目。
可选参数 WHOAMI(交互式前缀)非零表示提示用户
姓名和电子邮件(存储在“add-log-full-name”和“add-log-mailing-address”中)。

第二个参数 FILE-NAME 是更改日志的文件名。
如果为零,则使用“change-log-default-name”的值。

第三个参数 OTHER-WINDOW 非零表示在其他窗口中访问。

第四个参数 NEW-ENTRY 非零意味着总是在前面创建一个新条目;
永远不要附加到现有条目。选项 `add-log-keep-changes-together'
否则会影响是否创建新条目。

选项 `add-log-always-start-new-record' 非零意味着总是创建一个
新记录,即使最后一次记录是在同一日期和由
同一个人。

更改日志文件可以以版权声明和副本开头
许可通知。第一个空行表示这些结束
通知。

今天的日期是根据 `add-log-time-zone-rule' 如果
非零,否则为当地时间。”

所以魔术代码看起来像

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

make-magic-change-log-entry简单地对add-change-log函数进行柯里化,以便唯一的参数是file-name- 您设置其他参数。

于 2009-05-05T18:50:11.063 回答
2

I've written a function to do something similar to what you were talking about. You can get the code at http://www.emacswiki.org/emacs/log-edit-fill

于 2009-06-03T18:34:50.313 回答