Tên của tập lệnh hook không quá đáng sợ nếu bạn quản lý giải mã nó: đó là hook thay đổi thuộc tính sửa đổi trước . Nói tóm lại, mục đích của pre-revprop-changetập lệnh hook là kiểm soát các thay đổi của các thuộc tính (sửa đổi) không đảo ngược và gửi thông báo (ví dụ để gửi email khi thay đổi thuộc tính sửa đổi).
Có 2 loại thuộc tính trong Subversion:
- thuộc tính được phiên bản (ví dụ
svn:needs-lockvà svn:mime-type) có thể được đặt trên các tệp và thư mục,
- thuộc tính unversioned (sửa đổi) (ví dụ
svn:logvà svn:date) được thiết lập trên phiên bản kho lưu trữ .
Các thuộc tính được phiên bản có lịch sử và có thể được thao tác bởi người dùng thông thường có quyền truy cập Đọc / Ghi vào kho lưu trữ. Mặt khác, các thuộc tính không đảo ngược không có bất kỳ lịch sử nào và chủ yếu phục vụ mục đích bảo trì. Ví dụ: nếu bạn cam kết sửa đổi, ngay lập tức sẽ svn:datecó thời gian UTC của cam kết của bạn, svn:authorvới tên người dùng và svn:logvới thông điệp nhật ký cam kết của bạn (nếu bạn đã chỉ định bất kỳ).
Như tôi đã chỉ định, mục đích của pre-revprop-changetập lệnh hook là kiểm soát các thay đổi của các thuộc tính sửa đổi. Bạn không muốn tất cả những người có quyền truy cập vào kho lưu trữ có thể sửa đổi tất cả các thuộc tính sửa đổi, vì vậy việc thay đổi thuộc tính sửa đổi bị cấm theo mặc định. Để cho phép người dùng thay đổi thuộc tính, bạn phải tạo pre-revprop-changehook.
Móc đơn giản nhất có thể chứa chỉ một dòng : exit 0. Nó sẽ cho phép bất kỳ người dùng được xác thực nào thay đổi bất kỳ thuộc tính sửa đổi nào và nó không nên được sử dụng trong môi trường thực. Trên Windows, bạn có thể sử dụng tập lệnh bó hoặc tập lệnh dựa trên PowerShell để triển khai một số logic trong pre-revprop-changehook.
Tập lệnh PowerShell này chỉ cho phép thay đổi thuộc svn:logtính và từ chối các thông báo nhật ký trống.
# 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
Tập lệnh bó này chỉ cho phép người dùng "svnmgr" thay đổi thuộc tính sửa đổi:
IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )
exit 1
goto :eof
:label1
exit 0