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-change
tậ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-lock
và 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:log
và 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:date
có thời gian UTC của cam kết của bạn, svn:author
với tên người dùng và svn:log
vớ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-change
tậ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-change
hook.
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-change
hook.
Tập lệnh PowerShell này chỉ cho phép thay đổi thuộc svn:log
tí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