読者です 読者をやめる 読者になる 読者になる

すがブロ

sugamasaoのhatenablogだよ

svn log で編集したファイルのリストだけ抽出する

編集したファイルのリストだけ作成したい

仕事でカスタマイズや改修を行った際に、編集したファイルのリストを作成することがたまにある*1
だけど、普通に svn log コマンドを使っても簡単に整形しやすい形式ではないし、コミットログが入っていると処理のノイズになってしまうので「どうしたもんかー」と考えていたところ、 svn log には -q というオプションがある事を発見。
この -q を行うとコミットログを省略できる。
こんな感じ。

sugamasao% svn log -v -q -r 10:13
------------------------------------------------------------------------
r10 | sugamasao | 2008-02-25 00:33:29 +0900 (月, 25  2 2008)
変更のあったパス:
   A /trunk/lang/js/kuma/index.html
   M /trunk/lang/js/kuma/kuma.user.js
------------------------------------------------------------------------
r11 | sugamasao | 2008-02-25 00:36:23 +0900 (月, 25  2 2008)
変更のあったパス:
   M /trunk/lang/js/kuma/index.html
------------------------------------------------------------------------
r12 | sugamasao | 2008-02-25 00:52:11 +0900 (月, 25  2 2008)
変更のあったパス:
   M /trunk/lang/js/kuma/index.html
------------------------------------------------------------------------
r13 | sugamasao | 2008-02-25 00:53:02 +0900 (月, 25  2 2008)
変更のあったパス:
   M /trunk/lang/js/nico2timeline/nico2timeline.user.js
------------------------------------------------------------------------

なので、以下のようなスクリプトで一覧を取得するようにしてみた。
リバートは一覧としては不要だと思うので grep -v で除外するようにしている。

sugamasao% svn log -v -q -r 10:13  | grep ^" "  | sort  | uniq | grep -v " R "
   A /trunk/lang/js/kuma/index.html
   M /trunk/lang/js/kuma/index.html
   M /trunk/lang/js/kuma/kuma.user.js
   M /trunk/lang/js/nico2timeline/nico2timeline.user.js

これでたいていは大丈夫だと思うけれど、上記の例のように、追加したファイルがあると二重になってしまう。・・・かと言ってA とか M の所を省略すると、削除したファイルの一覧が取得できない。
削除とか追加はさほど多くない(はず)だからとりあえずこれで妥協しておくか・・・。

*1:納品物とかの関係で