Nama skrip kait tidak begitu menyeramkan jika Anda berhasil menguraikannya: ini adalah kait perubahan properti pra revisi . Singkatnya, tujuan pre-revprop-changeskrip 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-lockdan svn:mime-type) yang dapat diatur pada file dan direktori,
- properti (revisi) tidak berversi (misalnya
svn:logdan 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:datewaktu UTC dengan komitmen Anda, svn:authordengan nama pengguna Anda dan svn:logdengan pesan log komit Anda (jika Anda tentukan).
Seperti yang sudah saya tentukan, tujuan pre-revprop-changeskrip 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-changekait.
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-changehook.
Skrip PowerShell ini memungkinkan untuk mengubah svn:logproperti 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