2010-07-22 11 views
18

मैं एक पूर्व-प्रतिबद्ध हुक का उपयोग करना चाहता हूं जो डेवलपर्स को svn: mergeinfo को गैर रूट निर्देशिकाओं पर सेट करने से रोकता है। यही है, मैं उस svn को लागू करना चाहता हूं: mergeinfo केवल "ट्रंक" या "शाखाओं/शाखा नाम" जैसी निर्देशिकाओं पर सेट हो सकता है। डेवलपर्स को कभी-कभी "याद दिलाया जाता है" कि मर्ज लक्ष्य के रूप में रूट की उपनिर्देशिका का उपयोग करना अच्छा नहीं है (here सूचीबद्ध सर्वोत्तम प्रथाओं के अनुसार)। क्या किसी के पास ऐसी हुक स्क्रिप्ट है या पता है कि मुझे कहां मिल सकता है? मैं एक विंडोज वातावरण में हूं, इसलिए बैच या पावरहेल बेहतर होगा, लेकिन कुछ भी निश्चित रूप से सहायक होगा।एसवीएन प्री-प्रतिबद्ध हुक svn को अस्वीकार करने के लिए: गैर रूट निर्देशिकाओं पर mergeinfo

+0

कड़ाई से जिज्ञासा - आप सबवर्सन 1.5 या 1.6 का उपयोग कर रहे हैं? (मैं भी svn के हाथों में पीड़ित हूं: गैर रूट निर्देशिकाओं से/विलय के कारण निर्देशिकाओं/फ़ाइलों के सभी प्रकारों पर mergeinfos, लेकिन 1.5) –

+1

हम 1.6 पर हैं। मेरे पास जो समस्याएं हैं, वे पुरानी 1.5 बग्स के कारण नहीं हैं जहां svn क्लाइंट दृष्टि में सबकुछ पर mergeinfo सेट करता है। इसके बजाय, समस्याएं "उपयोगकर्ता त्रुटि" के कारण होती हैं, जहां कोई उपयोगकर्ता एक गैर-रूट निर्देशिका जैसे मर्ज लक्ष्य के रूप में "ट्रंक/mySubProject" का उपयोग करके विलय करता है, इसलिए उस निर्देशिका पर विलय जानकारी सेट करना। यह बाद में विलय हो जाता है, क्योंकि मुझे यकीन है कि आप जानते हैं। –

+0

दरअसल - जानकारी के लिए धन्यवाद। हम हाल ही में 1.6 पर हैं, इसलिए मेरे पास यह देखने का समय नहीं है कि चीजें कैसे बदली गईं। हालांकि, मुझे एक ही समस्या का समाधान करने की जरूरत है। + पसंदीदा –

उत्तर

7

सबसे पहले, मैं कार्य करने के लिए पर्ल या पायथन का उपयोग करने की सलाह दूंगा, विंडोज बैच वांछित होने के लिए बहुत अधिक छोड़ देता है।

आप से शुरू करने के लिए http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ से कुछ उदाहरण स्क्रिप्ट का उपयोग कर सकते हैं। उदाहरण के लिए, सत्यापित करें- PO.py स्क्रिप्ट फ़ाइल एन्कोडिंग और प्रतिबद्ध-access-control.pl.in जांचता है कि क्या लेखक को अनुमति देने की अनुमति है या नहीं। निर्देशिकाओं के लिए परिवर्तित गुण प्राप्त करने के लिए आप नियमित रूप से svnlook diff को अपनी स्क्रिप्ट (बाद वाले में) के रूप में नियोजित करते हैं और संबंधित पथों के माध्यम से जाते हैं चाहे वे नियमित अभिव्यक्ति का उपयोग करके शाखाएं या टैग हों।

अद्यतन

मिले enforcer pre-commit hook script जो आप जो खोज रहे हैं हो रहा है।

क्या इस स्क्रिप्ट करता है यह svnlook का उपयोग करता लेनदेन प्रगति है में झांक सकते है। यह लेन-देन के माध्यम से sifts रूप में, यह हुक जो भंडार व्यवस्थापक की जांच क्या पर जा रहा है और तय है कि क्या यह स्वीकार्य है करने की अनुमति का एक सेट के लिए बाहर कॉल।

इसमें कई तरीके और verify_property_line_added() उन के बीच में, क्योंकि यह प्रत्येक पंक्ति है कि एक फ़ाइल पर एक संपत्ति में जोड़ा जाता है के लिए कहा जाता है।

+0

ऐसा लगता है कि यह सबसे संभावित समाधान होने वाला है और इस प्रकार बाउंटी विजेता, जब तक कि कोई और कुछ नहीं आ सकता। – Charles

+0

वैसे, आपके प्रश्न के बाद मैंने एसवीएन हुक में दिलचस्पी शुरू की, और मैं कुछ लागू करने जा रहा हूं (बिना लॉग संदेश वाले काम करने से मना कर रहा हूं), और शायद प्रतिबद्धता पर जांच गुणों तक पहुंच जाएगा - फिर यहां एक और अपडेट डालेगा । – pmod

0

आप सर्वर पर CPAN कर सकते हैं:

https://github.com/gnustavo/SVN-Hooks/blob/master/examples/check-mergeinfo.pl

यदि नहीं (http://comments.gmane.org/gmane.comp.version-control.subversion.user/118969 के आधार पर):

REPOS="$1" 
TXN="$2" 
SVNLOOK=/usr/bin/svnlook 

if !($SVNLOOK log -t "$TXN" "$REPOS" | grep -q '\[override] ';) then 

    # Get list of paths which have changed  
    TXN_PATHS=$($SVNLOOK changed -t "$TXN" "$REPOS") 

    # Filter those which are allowed: /trunk, /branches/*,... 
    TXN_PATHS=$(echo "$TXN_PATHS" | grep -Ev "^....(trunk/|branches/[^/]+/)$") 

    # Iterate over all paths, which are not allowed to have mergeinfo 
    while IFS= read -r TXN_PATH; do 
     ELEM_PATH=$(echo "$TXN_PATH" | cut -c 5-) 

     MERGEINFO=$($SVNLOOK propget "$REPOS" svn:mergeinfo -t "$TXN" "$ELEM_PATH" 2>/dev/null) 
     if [ ! "$MERGEINFO" = "" ]; then 
     echo " Cannot merge into directory that is not trunk or a branch:" >&2; 
     echo " $ELEM_PATH" >&2; 
     echo " Override by using [override]." >&2; 
     exit 1; 
     fi  
    done <<< "$TXN_PATHS" 

    # echo "Merge info check: OK" 
fi 
संबंधित मुद्दे