Emacs& DSVN:更改默认提交消息

时间:2013-07-09 10:00:48

标签: svn emacs elisp

我目前在OSX上的emacs 24.1.50.1中使用DSVN,svn v 1.7.8。

当我从emacs运行svn-status时,标记几个文件并按'c'进行提交我发现自己在 svn commit 缓冲区中预先填充了以下内容:

Summary:
Author:

我想遵循一个不同的约定,如何更改此默认提交消息?

我查看了svn-commit的源代码,但是我没有看到此消息的来源。 This线程看似相关,但我不确定我可能会利用哪些钩子来利用那里提供的信息。

理想情况下,我希望能够根据当前项目的存储库URL动态确定消息,但即使只是提示如何将消息更改为静态也是很好的。我该如何改变这条消息?

所有帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

如果您无法在emacs包中找到该来源,则此模板可能来自svn本身。

看看this,你可以做一个快速测试来检查你是否会这样。

如果是这样,你可以使用emacs中的setenv重新创建那里描述的技巧,或者defadvice svn-commit用你自己的模板替换缓冲区内容(后面的解决方案甚至可以工作)如果模板不是来自svn)

答案 1 :(得分:0)

基于juanleon建议使用defadvice,这里有一些建议将用静态消息替换 svn commit 缓冲区的内容:

(defadvice svn-commit (after modify-default-commit-message activate) 
  (erasebuffer)
  (insert "custom message")) 

这假设在运行svn-commit之后选择了包含提交消息的缓冲区(在我的情况下是* svn-commit *)。

调用“svn info”并用正则表达式提取值替换提交消息的更动态版本是:

(defadvice svn-commit (after modify-default-commit-message activate) 
  (erase-buffer)  
  (let ((svninfo (shell-command-to-string "svn info")))
    (string-match "^URL: svn://\\(.+\\)" svninfo)   
    (insert (match-string 1 svninfo))                                          
    (insert ": ")      
    )) 

此建议将使用svn url的主机和路径替换提交消息,后跟“:”,因此如果使用url“svn://host.com/path”从结帐运行svn-commit,提交消息将是“host.com/path:”。如果正则表达式失败,则提交消息将为空。