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"'