6

バージョン管理でソースコードを操作するときに、GNUスタイルのChangeLogエントリの作成を部分的に自動化したいと思います。はadd-changelog-entry-other-window一度に1つのファイルで動作し、使用するにはファイルにアクセスする必要があります。

代わりに私が見たいのは、の出力を受け取る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のマニュアルで見つけましたが、ここでどのように適用できるかわかりません。

助言がありますか?ありがとう。

編集:1つの答えは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-windowEDIT2で述べたことを正確に実行するように文書化されています。

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スクリプトを使用すると幸運が得られるかもしれません。

于 2013-11-04T03:49:37.963 に答える
2

私はあなたが話していたのと同じようなことをする関数を書きました。コードはhttp://www.emacswiki.org/emacs/log-edit-fillで入手できます。

于 2009-06-03T18:34:50.313 に答える
2

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

  • 変更されたファイルを取得する
  • ファイルごとに、add-change-log
「変更ログファイルを見つけて、今日のエントリとこのファイルのアイテムを追加します。
オプションのargWHOAMI(インタラクティブプレフィックス)non-nilは、ユーザーへのプロンプトを意味します
名前と電子メール( `add-log-full-name'と`add-log-mailing-address'に保存されます)。

2番目の引数FILE-NAMEは、変更ログのファイル名です。
nilの場合は、`change-log-default-name'の値を使用します。

3番目の引数OTHER-WINDOWnon-nilは、他のウィンドウでの訪問を意味します。

4番目の引数NEW-ENTRYnon-nilは、常に先頭に新しいエントリを作成することを意味します。
既存のエントリに追加しないでください。オプション`add-log-keep-changes-together'
それ以外の場合は、新しいエントリが作成されるかどうかに影響します。

オプション`add-log-always-start-new-record'non-nilは、常に作成することを意味します
最後のレコードが同じ日付で作成された場合でも、新しいレコード
同じ人。

変更ログファイルは、著作権表示とコピーで開始できます
許可通知。最初の空白行は、これらの終わりを示します
通知。

今日の日付は、次の場合に「add-log-time-zone-rule」に従って計算されます。
非ゼロ、それ以外の場合は現地時間。」

マジックコードは次のようになります

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

引数が唯一になるように関数をカレーするだけです—make-magic-change-log-entry他の引数を設定します。add-change-logfile-name

于 2009-05-05T18:50:11.063 に答える