SVNのコミットログを編集可能にする

という依頼がありました。

確認したところ、カメさんSVNにて「ログメッセージを編集」を行うと、以下のようなエラーが表示される。

f:id:piccagliani:20130214125223p:plain


「『pre-revprop-change』フックが機能不全」とのことなので、リポジトリのhooksを確認すると、「pre-revprop-change.tmpl 」なるものが。

 -rw-r--r-- 1 apache apache 1977  2月 14 12:47 2013 post-commit.tmpl
 -rw-r--r-- 1 apache apache 1638  2月 14 12:47 2013 post-lock.tmpl
 -rw-r--r-- 1 apache apache 2289  2月 14 12:47 2013 post-revprop-change.tmpl
 -rw-r--r-- 1 apache apache 1567  2月 14 12:47 2013 post-unlock.tmpl
 -rw-r--r-- 1 apache apache 3426  2月 14 12:47 2013 pre-commit.tmpl
 -rw-r--r-- 1 apache apache 2410  2月 14 12:47 2013 pre-lock.tmpl
 -rw-r--r-- 1 apache apache 2786  2月 14 12:47 2013 pre-revprop-change.tmpl
 -rw-r--r-- 1 apache apache 2100  2月 14 12:47 2013 pre-unlock.tmpl
 -rw-r--r-- 1 apache apache 2780  2月 14 12:47 2013 start-commit.tmpl

中身を読む。

# The pre-revprop-change hook is invoked before a revision property
# is added, modified or deleted.  Subversion runs this hook by invoking
# a program (script, executable, binary, etc.) named 'pre-revprop-change'
# (for which this file is a template), with the following ordered
# arguments:
#
#   [1] REPOS-PATH   (the path to this repository)
#   [2] REVISION     (the revision being tweaked)
#   [3] USER         (the username of the person tweaking the property)
#   [4] PROPNAME     (the property being set on the revision)
#   [5] ACTION       (the property is being 'A'dded, 'M'odified, or 'D'eleted)
#
#   [STDIN] PROPVAL  ** the new property value is passed via STDIN.
  • リビジョンプロパティがいじられる直前に実行されますよ
  • 実行する際の引数はこうですよ
  • これはテンプレートだから、実際には「pre-revprop-change」という名前でおいてね

たぶんこんな感じか。



下の方にサンプル実装がありました。

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

svn:log」プロパティが「編集(M)」されたときだけリビジョンプロパティの変更処理を続行して、
それ以外は処理を続行しないようになっていますね。



はて・・・・



「リビジョンプロパティ」とはいうものの、それに該当するものは何であろうか。
svn:ignore」とか出来なくなったら困りますな。。。

で、見つけたのが Subversion: Revision properties

カメさんSVNでリビジョンを選択し、「リビジョンプロパティを表示」としてみたところ、

しか表示されないので、上に書いた懸念は問題ないでしょう。

ということで、

「pre-revprop-change.tmpl」を「pre-revprop-change」にリネームして、chmod +x して、
試したところ、コミットログを編集できました。

ばんざい。