2009-05-05 9 views
4

バージョン管理でソースコードを操作するときにGNUスタイルのChangeLogエントリの作成を部分的に自動化したいと思います。 add-changelog-entry-other-windowは、一度に1つのファイルで動作し、ファイルを参照して使用する必要があります。Emacs:差分からスケルトンChangeLogを生成する方法はありますか?

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が見つかりましたが、私はここでそれをどのように適用できるかを見ています。

提案がありますか?ありがとう。

編集:1つの答えはvc-update-change-logを示唆しました。残念ながら、それはCVSだけをサポートし、すでにコミットされたVCログを照会することによってChangeLogエントリを作成します。したがって、svnなどをサポートしていても、変更と変更コミットを同じコミットにコミットすることは不可能です。

EDIT2:明らかに、add-changelog-entry-other-window(C-x 4 a)は、訪問先のファイルだけでなく、そのファイルを含むdiff hunkでも動作します。 (Source)これは私が探しているものです。すべてのハンクを繰り返し処理するelispループと一緒にこれを解決する必要があります。

+0

私は機能レベルの変更を追跡するのは難しいと思います。 – Amjith

+0

jinxed_coder:それについての質問はありません。それはもっと "パイの空"の希望でした。一方、100%完全である必要はありません。 –

答えて

2

これを行う関数はわかりませんが、実装するのは簡単です。基本的に、あなたは

  • にしたいので、魔法のコードが

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

    のようなものを見に行くされて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."

を呼び出して、各ファイルの

  • 変更されたファイルを取得しますmake-magic-change-log-entryは単にadd-change-log関数をカリングして、唯一のアルファベットtはfile-nameです - あなたは他のものを設定します。

  • +0

    ありがとうございます。私はこれが削除され、追加されたファイルを除外すると思いますか? –

    +1

    変更されたファイルリストをどのように生成するかによって異なります。あなたができることの多くは、リストをコンスペアのリスト( "追加"、 "ファイル名")のようにすることです。多くの魔法を使いたいなら、あなたが望むものは何でも引数を付けて、新しいカスタマイズされた追加変更ログエントリを作るかもしれません。行うべきことは、add-log.elコードを読んでください。 –

    3

    バージョン管理ログエントリから変更ログエントリを自動的に生成するファンクションvc-update-change-logがあります。

    +0

    申し訳ありませんが、これは私が探しているものではありません。まず、CVSのみをサポートしています。他のVCシステムをサポートしていても、VCログエントリからChangeLogエントリを作成します。つまり、変更されたファイルは既にコミットされています。確かにそれはCVSでも問題ありませんが、21stのバージョン管理システムでは、変更されたファイル自体と同じチェンジセットでChangeLogをコミットしたいと思います。 –

    +0

    あなたが正しいです、私はpsvnもgit/magitもこの機能を実装していないことを確認しませんでした。 –

    2

    私はあなたが話していたものに似た何かをする関数を書いています。あなたはhttp://www.emacswiki.org/emacs/log-edit-fill

    +0

    ありがとう!最後に、私はそれを試してみました。どうすればそれを実際に使用できますか? svn-log-editバッファで呼び出すと、Symbolの関数定義がvoid:log-edit-show-diffになります。 また、私の質問は、実際のコミットの前にChangeLogファイルを書き込むことについて懸念していますが、その方法でログエディットフィルを使用する方法はありますか? –

    2

    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. 
    

    残念ながら、それは新しいファイル、たとえば、のために非常にうまく機能しません:それはないありませんそのようなファイルのファイル名を骨格の変更履歴エントリに含めてください。

    http://gcc.gnu.org/viewcvs/gcc/trunk/contrib/mklogから入手できるgccのmklogスクリプトでは、より良い運があるかもしれません。

    +0

    確かに 'diff-add-change-log-entries-other-window'はLaurynasが求めていたものですが、完璧とはほど遠いものです。私はそれを改善することを歓迎します(削除された/追加されたファイルを扱うなど)が、私がそれを試したときの私の経験は、自動的にそれを行うにはあまりにも多くの情報を必要とし、実際のテキストはとにかくスケルトンを1つにする利点はそれほど重要ではありません。 – Stefan

    関連する問題