Şifre komut dosyasının adı, deşifre etmeyi yönetirseniz çok korkutucu değildir: revizyon öncesi özellik değiştirme kancasıdır . Kısacası, pre-revprop-change
kanca komut dosyasının amacı, sürüm (özellik) özelliklerindeki değişiklikleri kontrol etmek ve bildirim göndermek (ör. Revizyon özelliği değiştirildiğinde e-posta göndermek).
Subversion'da 2 tip mülk vardır:
- dosyalarda ve dizinlerde ayarlanabilen sürüm özellikleri (ör.
svn:needs-lock
ve svn:mime-type
),
- depo revizyonlarında ayarlanmış sürüm (revizyon) özellikleri (ör.
svn:log
ve svn:date
) .
Sürümlendirilmiş özelliklerin geçmişi vardır ve bir depoya Okuma / Yazma erişimi olan sıradan kullanıcılar tarafından değiştirilebilir. Öte yandan, sürüm bilgisi olmayan mülklerin geçmişi yoktur ve çoğunlukla bakım amacına hizmet ederler. Örneğin, bir düzeltme yaparsanız derhal işleminizin svn:date
UTC saati, svn:author
kullanıcı adınız ve işlem svn:log
kaydı iletiniz (varsa) ile birlikte gelir.
Daha önce belirttiğim gibi, pre-revprop-change
kanca betiğinin amacı revizyon özelliklerindeki değişiklikleri kontrol etmektir. Bir depoya erişimi olan herkesin tüm düzeltme özelliklerini değiştirmesini istemezsiniz, bu nedenle varsayılan olarak düzeltme özelliklerini değiştirmek yasaktır. Kullanıcıların özellikleri değiştirmesine izin vermek için pre-revprop-change
kanca oluşturmanız gerekir .
En basit kanca sadece bir satır içerebilir: exit 0
. Kimliği doğrulanmış herhangi bir kullanıcının herhangi bir revizyon özelliğini değiştirmesine izin verir ve gerçek ortamda kullanılmamalıdır. Windows'da, pre-revprop-change
kanca içine bazı mantık uygulamak için toplu komut dosyasını veya PowerShell tabanlı komut dosyasını kullanabilirsiniz .
Bu PowerShell betiği svn:log
yalnızca özelliği değiştirmeye izin verir ve boş günlük iletilerini reddeder.
# 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
Bu toplu komut dosyası yalnızca "svnmgr" kullanıcısının düzeltme özelliklerini değiştirmesine izin verir:
IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )
exit 1
goto :eof
:label1
exit 0