Smart HTTP Transportにおいてmasterへのgit pushを特定ユーザに限定する

Debian GNU/Linux で Git を Smart HTTP Transport で使うでHTTP経由で公開リポジトリを作ったとき、masterブランチへのgit pushを特定ユーザに絞りたい。そこで、非常に素朴ながら以下のようにした。

リポジトリが/var/git/repos.gitであるとき、/var/git/repos.git/hooks/updateとして以下のスクリプトを置く。

!#/usr/bin/ruby

remoteUser = ENV["REMOTE_USER"]
refname = ARGV[0]
oldrev = ARGV[1]
newrev = ARGV[2]

if refname =~ /^refs\/heads\/master$/
  unless remoteUser == 'USERNAME'
    p "You can't push for #{refname}"
    exit(1)
  end
end

USERNAMEがmasterにpushできるユーザー。それ以外のユーザの場合はpushが失敗に終わるようになっている。