Subversion の diff で -p オプションを使うには
お仕事でパッチをレビューする際に svn diff の出力を読んでいるのだが、これが長らく不満だった。-u の「unified 形式」になっているのはいいのだが、-p の「変更した関数を表示」が有効になっていないのでパッチが読みにくいのだ。ただ、単純に -p オプションをつけても書式が会ってないらしくエラーになる。
$ svn diff -p svn: invalid option character: p 使用方法を知りたいときは 'svn help' と打ってください。
「絶対方法はあるはず」とヘルプを見てみると、いつもの /usr/bin 配下にある diff を使うには以下のように、パスとオプションを与えてあげる必要があることがわかった。実は svn は独自の diff を使用しているらしい。
$ svn help diff (...snip...) --diff-cmd <ARG> : diff コマンドとして <ARG> を用います -x [--extensions] <ARG> : デフォルト: '-u'。Subversion が外部の diff プロ グラムを呼び出すとき、<ARG> は単純にそのプログラ ムに渡されます。しかし、Subversion がデフォルト の内部の diff の実装を呼び出す場合や blame の注 釈情報を表示する場合、<ARG> には以下のいずれかを 使ってください。 -u (--unified): 3 行の unified context を出力します。 -b (--ignore-space-change): 空白文字の数に関する変更を無視します。 -w (--ignore-all-space): すべての空白文字を無視します。 --ignore-eol-style: 行末 (EOL) スタイルの変更を無視します。 (...snip...)
結果的に以下で普段通りの「diff -Nurp」と同じようにパッチを作ることができた。
$ svn diff --diff-cmd /usr/bin/diff -x "-Nurp"
.bashrc に次のように定義しておくといいカモ。d(^-^)
alias svn-diff='svn diff --diff-cmd /usr/bin/diff -x "-Nurp"'