Nama skrip kait tidak begitu menyeramkan jika Anda berhasil menguraikannya: ini adalah kait perubahan properti pra revisi . Singkatnya, tujuan pre-revprop-change
skrip kait adalah untuk mengontrol perubahan properti yang tidak berversi (revisi) dan mengirim pemberitahuan (misalnya untuk mengirim email ketika properti revisi diubah).
Ada 2 jenis properti di Subversion:
- properti berversi (misalnya
svn:needs-lock
dan svn:mime-type
) yang dapat diatur pada file dan direktori,
- properti (revisi) tidak berversi (misalnya
svn:log
dan svn:date
) yang ditetapkan pada revisi repositori .
Properti versi memiliki riwayat dan dapat dimanipulasi oleh pengguna biasa yang memiliki akses Baca / Tulis ke repositori. Di sisi lain, properti tidak berversi tidak memiliki riwayat dan melayani sebagian besar tujuan pemeliharaan. Misalnya, jika Anda mengkomit revisi, maka svn:date
waktu UTC dengan komitmen Anda, svn:author
dengan nama pengguna Anda dan svn:log
dengan pesan log komit Anda (jika Anda tentukan).
Seperti yang sudah saya tentukan, tujuan pre-revprop-change
skrip kait adalah untuk mengontrol perubahan properti revisi. Anda tidak ingin semua orang yang memiliki akses ke repositori dapat mengubah semua properti revisi, jadi mengubah properti revisi dilarang secara default. Untuk memungkinkan pengguna mengubah properti, Anda harus membuat pre-revprop-change
kait.
Hook sederhana dapat berisi hanya satu baris: exit 0
. Ini akan memungkinkan pengguna terotentikasi untuk mengubah properti revisi apa pun dan tidak boleh digunakan di lingkungan nyata. Pada Windows, Anda bisa menggunakan skrip batch atau skrip berbasis PowerShell untuk menerapkan beberapa logika di dalam pre-revprop-change
hook.
Skrip PowerShell ini memungkinkan untuk mengubah svn:log
properti saja dan menolak pesan log kosong.
# Store hook arguments into variables with mnemonic names
$repos = $args[0]
$rev = $args[1]
$user = $args[2]
$propname = $args[3]
$action = $args[4]
# Only allow changes to svn:log. The author, date and other revision
# properties cannot be changed
if ($propname -ne "svn:log")
{
[Console]::Error.WriteLine("Only changes to 'svn:log' revision properties are allowed.")
exit 1
}
# Only allow modifications to svn:log (no addition/overwrite or deletion)
if ($action -ne "M")
{
[Console]::Error.WriteLine("Only modifications to 'svn:log' revision properties are allowed.")
exit 2
}
# Read from the standard input while the first non-white-space characters
$datalines = ($input | where {$_.trim() -ne ""})
if ($datalines.length -lt 25)
{
# Log message is empty. Show the error.
[Console]::Error.WriteLine("Empty 'svn:log' properties are not allowed.")
exit 3
}
exit 0
Skrip kumpulan ini memungkinkan hanya pengguna "svnmgr" untuk mengubah properti revisi:
IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )
exit 1
goto :eof
:label1
exit 0