スポンサードリンク

2014年02月08日

コミット時に書き損じたりしたコメントや編集した人の名前を変更したい

コメントなしで上げちゃって怒られるとか、バージョン管理ツールとの連携させるのを書き忘れたりとかした場合、TortoiseSVNから編集を試みるのですが、「リポジトリが、リビジョン属性を変更できるようにはなっていません。管理者にpre-revprop-changeフックを作成するように頼んでください」とさらに怒られます。これは管理者権限があれば設定変更でログが編集できるようになるそうです。
では、やってみましょう。

2014-02-08_123005.jpg

具体的にはこんな感じになった時の対応。

@
リポジトリにあたるフォルダの配下、hooksフォルダ下に進む。
ここです。
2014-02-08_125841.jpg

私の環境だとこんなパス。svnというフォルダがあれこれのリポジトリが入った統合フォルダ。
その下にcodingというリポジトリが入ってる、という構図です。

最初にエラーダイアログで出てきた、[pre-revprop-change].tmplというやつが見えています。
※今回はすでに対応してしまった後の撮影なので、これから作成する[pre-revprop-change].batというのが存在していますが、今回はこれを作って置いてやることを解説していくのが手順となります。

A
最初から存在していた[pre-revprop-change].tmplを開いてみます。テキストエディタを指定してやると良いでしょう。

一番下にある箇所だけ見てみるとこうなっていました。
REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
ACTION="$5"

if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi

echo "Changing revision properties other than svn:log is prohibited" >&2
exit 1

まあ、ふーんという感じで見ておきます。

実際、文法も知らずに読んだとして、
ACTIONがMってModifyのことかな?だとしたら「変更」か。
だったら、
PROPNAMEってPropertyプロパティの名前がsvn:logログメッセージのことだろうな、
ってやつだったら、0を返して終わらせろと。0と-aがいいものなのか悪いものなのかはわからないなあ。
で、echoってのは、メッセージを出せ、だったはずだから、
中身にあるprohibitedって「禁止」って意味だったハズだから、ログ書き換え権限がないですよ、
みたいなことを通知してるっぽいなあ、みたいな。

B
同じフォルダにpre-revprop-change.batを作って置いてやる。
中身はこう書いてあげてください。
if "%5"=="M" (
if "%4"=="svn:log" (
exit 0
)
)
echo "Changing revision properties other than svn:log is prohibited" >&2
exit 1


C
ここまでやったら、さあ、ログ編集してみましょう。
2014-02-08_133439.jpg
2014-02-08_133507.jpg
おっ、できた。

D
合わせて、作者って編集できないのかな。と思い立ってやってみる。
2014-02-08_133623.jpg

2014-02-08_133707.jpg

2014-02-08_133714.jpg

怒られた。
これも編集できていいのになあ、と思いつく。

E
うーん、とさっき置いたpre-revprop-change.batを見てみると、コードとしては難しくないなあと気づける。
%4がプロパティの名前で、svn:logってやつにしたからログが書き換えられるようになっている。
だから、合わせて編集した人、っていうのが何ていうプロパティネームなのかを調べて書いてやれば良いとわかる。

調べてここにたどり着きました。
http://svnbook.red-bean.com/en/1.7/svn.ref.properties.html
それっぽいのは…と探して、authorだろうな、と目星をつけます。

で、if文で書いてあるところを見てやると、
変更で入ってきたら、
{
 変更するのがlogプロパティなら0を返す…これが成功するようになったんだから0は正常終了させるってことっぽい
}
と処理してるのかなあと。

TortoiseSVNの作りだと、log編集とauthor編集が同時にはできないから、変更で入った後に
ログだったらexit0で終わる、そうじゃなくても著者だったらexit0で終わる。にしてあげれば良いんじゃないか
なあと。
だとしたら、こうかな?
if "%5"=="M" (
if "%4"=="svn:log" (
exit 0
)
if "%4"=="svn:author" (
exit 0
)
)
echo "Changing revision properties other than svn:log is prohibited" >&2
exit 1

これに置き換えてみましょう。

F
改めて作者名を編集。
2014-02-08_134944.jpg

2014-02-08_135021.jpg

よっしゃ!できた〜!

スポンサードリンク

posted by おっ at 11:33 | Comment(2) | TrackBack(0) | バージョン管理 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
編集できました!
本当にありがとうございました!!
Posted by n at 2014年07月01日 20:24
おめでとうございます!
Posted by おっ at 2014年07月06日 16:02
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック