हुक स्क्रिप्ट का नाम इतना डरावना नहीं है यदि आप इसे समझने का प्रबंधन करते हैं: यह पूर्व संशोधन संपत्ति परिवर्तन हुक है । संक्षेप में, pre-revprop-changeहुक स्क्रिप्ट का उद्देश्य असंबद्ध (संशोधन) संपत्तियों के परिवर्तनों को नियंत्रित करना और सूचनाएं भेजना है (जैसे संशोधन संपत्ति में बदलाव होने पर ईमेल भेजने के लिए)।
तोड़फोड़ में 2 प्रकार के गुण हैं:
- संस्करण गुण (जैसे
svn:needs-lockऔर svn:mime-type) जो फ़ाइलों और निर्देशिकाओं पर सेट किए जा सकते हैं,
- असंबद्ध (संशोधन) गुण (जैसे
svn:logऔर svn:date) जो रिपॉजिटरी संशोधन पर सेट किए गए हैं ।
संस्करणित गुणों का इतिहास होता है और उन सामान्य उपयोगकर्ताओं द्वारा चालाकी से किया जा सकता है जिनके पास भंडार को पढ़ने / लिखने की सुविधा है। दूसरी ओर, असंबद्ध गुणों का कोई इतिहास नहीं है और ज्यादातर रखरखाव के उद्देश्य हैं। उदाहरण के लिए, यदि आप एक संशोधन करते हैं तो यह तुरंत svn:dateआपके कमिट के UTC समय के svn:authorसाथ , आपके उपयोगकर्ता नाम और svn:logआपके कमिट मैसेज संदेश के साथ (यदि आपने कोई निर्दिष्ट किया है) हो जाता है।
जैसा कि मैंने पहले ही निर्दिष्ट किया है, pre-revprop-changeहुक स्क्रिप्ट का उद्देश्य संशोधन गुणों के परिवर्तनों को नियंत्रित करना है। आप उन सभी को नहीं चाहते हैं जिनके पास एक रिपॉजिटरी की पहुंच है, जो सभी संशोधन गुणों को संशोधित करने में सक्षम हैं, इसलिए पुनरीक्षण गुणों को बदलना डिफ़ॉल्ट रूप से निषिद्ध है। उपयोगकर्ताओं को गुण बदलने की अनुमति देने के लिए, आपको pre-revprop-changeहुक बनाना होगा ।
सबसे सरल हुक में केवल एक पंक्ति हो सकती है exit 0:। यह किसी भी प्रमाणित उपयोगकर्ता को किसी भी संशोधन संपत्ति को बदलने की अनुमति देगा और इसका वास्तविक वातावरण में उपयोग नहीं किया जाना चाहिए। विंडोज पर, आप pre-revprop-changeहुक के भीतर कुछ तर्क को लागू करने के लिए बैच स्क्रिप्ट या पावरशेल-आधारित स्क्रिप्ट का उपयोग कर सकते हैं ।
यह पॉवरशेल स्क्रिप्ट svn:logकेवल संपत्ति बदलने की अनुमति देता है और खाली लॉग संदेशों से इनकार करता है।
# 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
यह बैच स्क्रिप्ट केवल "svnmgr" उपयोगकर्ता को संशोधन गुण बदलने की अनुमति देता है:
IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )
exit 1
goto :eof
:label1
exit 0