2011-01-17 9 views
5

में पूर्व-प्रतिबद्ध उपयोगकर्ताओं को एक संदेश प्रदर्शित करना हम स्रोत नियंत्रण के लिए टोर्टोइस एसवीएन का उपयोग करते हैं, और पहले ही एक प्रतिबद्ध संदेश टेम्पलेट सेट कर चुके हैं।टोर्टोइस एसवीएन

मैं उपयोगकर्ता को कुछ पाठ प्रदर्शित करना भी पसंद करूंगा, जो "प्रतिबद्ध करने के लिए मत भूलना" के आधार पर उनके प्रतिबद्ध संदेश में शामिल नहीं होता है।

क्या यह संभव है?

उत्तर

3

मैंने Tortoise Docs का उपयोग करके एक समान वातावरण स्थापित किया है और कह सकता है: हाँ, यह है!

प्रारंभ-कमिट हुक
यह हुक तीन पैरामीटर पारित हो:
ऑपरेशन एक हुक प्रारंभ-कमिट कि लाइनों में भर जाता है कि उपयोगकर्ता पढ़ा जाएगा और एक पूर्व प्रतिबद्ध हुक कि तुझे फिर से लाइनों को हटा शामिल PATH MESSAGEFILE CWDMESSAGEFILE एक अस्थायी फ़ाइल का पथ है जिसका उपयोग प्रतिबद्ध संदेश संग्रहीत करने के लिए किया जाएगा। आप इस अस्थायी फ़ाइल को अपने संदेश से भर सकते हैं एक्स को मत भूलना! या, आप अपने संदेश को उस चीज़ के साथ उपसर्ग करते हैं जिसे आप प्रतिबद्ध संदेश में टिप्पणी के रूप में देखेंगे और फ़िल्टर हो जाएंगे। चूंकि गिट # को प्रतिबद्ध संदेश में टिप्पणी के रूप में उपयोग करता है, इसलिए मैंने वही किया: # से शुरू होने वाली प्रत्येक पंक्ति को प्रतिबद्ध संदेश से फ़िल्टर किया जाता है। और इसलिए मैं # Don't forget to do X! संदेश लिखूंगा। पर्ल (untested) में नमूना कार्यान्वयन:

use strict;       # what we always have 
use warnings;      # what we always have 
use Fcntl ':flock';     # lock files when writing 
use Carp;       # use croak instead of die 
use English qw(-no_match_vars); # words instad of cryptic variables 

sub startcommit_hook{ 
    # open the logfile 
    my $logfilename  = $ARGV[1]; 
    # write hint line about supported tags 
    open my $handle, '>:utf8', $logfilename 
    or croak "Opening $logfilename for writing failed\n"; 
    flock $handle, LOCK_EX; 
    print {$handle} "# Don't forget to do X!\n"; 
    flock $handle, LOCK_UN; 
    return close $handle or croak "unable to close $OS_ERROR"; 
} 

startcommit_hook(); 

पूर्व प्रतिबद्ध हुक
यह हुक चार मापदंडों पारित हो: PATH DEPTH MESSAGEFILE CWD। प्री-प्रतिबद्ध हुक का काम उस संदेश को फ़िल्टर करना है जिसे आपने MESSAGEFILE में स्टार्ट-प्रतिबद्ध हुक में भर दिया है (अन्यथा यह सर्वर पर प्रतिबद्ध संदेश के हिस्से के रूप में जाएगा और यह शायद आप जो चाहते हैं वह नहीं है) । या तो बस अपना संदेश हटाएं एक्स करना न भूलें! या –   यदि आप के रूप में मैं   – ऊपर लिखा हर पंक्ति है कि एक # हस्ताक्षर के साथ शुरू होता है (या उस पैटर्न ^\s*# मेल खाता है) के बाद से यह हमारी दुनिया में एक टिप्पणी है हटाना टिप्पणी दृष्टिकोण का उपयोग करें।

हम पूर्व-प्रतिबद्ध सामग्री को संभालने के लिए स्टार्ट-प्रतिबद्ध हुक के लिए हमारी फ़ाइल का विस्तार कर सकते हैं क्योंकि पैरामीटर की संख्या अलग है।

use strict;       # what we always have 
use warnings;      # what we always have 
use feature 'switch';    # for given-when construct 
use Fcntl ':flock';     # lock files when writing 
use Carp;       # use croak instead of die 
use English qw(-no_match_vars); # words instad of cryptic variables 

sub startcommit_hook{ 
    # open the logfile 
    my $logfilename  = $ARGV[1]; 
    # write hint line about supported tags 
    open my $handle, '>:utf8', $logfilename 
    or croak "Opening $logfilename for writing failed\n"; 
    flock $handle, LOCK_EX; 
    print {$handle} "# Don't forget to do X!\n"; 
    flock $handle, LOCK_UN; 
    return close $handle or croak "unable to close $OS_ERROR"; 
} 

sub precommit_hook{ 
    my $logfilename  = $ARGV[2]; 
    # first, read the logfile 
    open my $handle,'<:utf8',$logfilename or croak "Error reading file contents of $logfilename: $OS_ERROR\n"; 
    my @content = <$handle>; 
    close $handle or croak "unable to close: $OS_ERROR"; 
    chomp @content; 

    # now, write it, ignoring the comment lines 
    open my $handle, '>:utf8', $logfilename 
    or croak "Opening $logfilename for writing failed\n"; 
    flock $handle, LOCK_EX; 

    foreach my $line(@content){ 
    if($line !~ /^\s*#/){ # line has no comment, print it. 
     print {$handle} $line . "\n"; 
    } 
    } 

    flock $handle, LOCK_UN; 
    close $handle or croak "unable to close $OS_ERROR"; 
    return; 
} 

given($#ARGV){ 
    when (3){startcommit_hook();} 
    when (4) {precommit_hook();} # no user supplied -> auto lookup 
    default {croak "Invalid number of parameters";} 
} 

हुक को सक्रिय करने के TortoiseSVN की सेटिंग खोलने के लिए, hook scripts के पास जाओ और के रूप में एक बार स्क्रिप्ट जोड़ने: जो हुक कॉल करने के लिए पर निर्णय स्क्रिप्ट (यह भी अपरीक्षित) के लिए पारित गिनती पैरामीटर से बना है स्टार्ट-प्रतिबद्ध हुक और एक बार पूर्व-प्रतिबद्ध हुक के रूप में। कॉल करने के लिए कमांड लाइन perl /path/to/script होगी। और Wait for the script to finish और Hide script while running भी देखें।

नोट
आप अधिक जानकारी हुक के लिए पारित की जरूरत है, तो आप भी जब आप TortoiseSVN की सेटिंग में हुक आवंटित कस्टम पैरामीटर गुजर सकता है। यदि आप कस्टम पैरामीटर असाइन करते हैं, तो ये से डिफ़ॉल्ट पैरामीटर (जैसा कि docs में बताया गया है) से पहले हुक पर पास हो जाता है।