विंडोज़ में उपversण के लिए हुक लिखने की सर्वश्रेष्ठ रणनीति

सबवर्सन विंडोज़ में हुक के लिए हुक लिखने का सबसे अच्छा तरीका क्या है? जहां तक ​​मुझे पता है, केवल निष्पादन योग्य फ़ाइलों का उपयोग किया जा सकता है। तो सबसे अच्छा विकल्प क्या है?

  • सादा बैच फ़ाइलें (बहुत सीमित समाधान के लिए बहुत सीमित लेकिन शायद ठीक है)
  • समर्पित संकलित निष्पादन योग्य अनुप्रयोग (संक्षेप में क्रैक करने के लिए स्लेजहैमर?)
  • कुछ अन्य हाइब्रिड विकल्प (जैसे बैच फ़ाइल एक पावरहेल स्क्रिप्ट चला रहा है)
0
ro fr bn

6 उत्तर

जटिलता के आधार पर, प्रत्येक स्थिति अलग होती है, अगर मैं बस फाइलों को बस ले जा रहा हूं, तो मैं एक त्वरित बैच फ़ाइल लिखूंगा। अगर मैं कुछ और जटिल करना चाहता हूं तो आम तौर पर केवल स्क्रिप्टिंग भाग को छोड़ दें और एक त्वरित सी # प्रोग्राम लिखें जो इसे संभाल सके।

सवाल यह है कि क्या आप उस सी # प्रोग्राम को svn में डालते हैं और इसे संस्करणित करते हैं :)

edit: The benefits of a dedicated C# application is that I can reuse code fragments to create new hooks later, including a simple log output I created to handle hook logging.

0
जोड़ा

मैंने अभी इस सवाल के बारे में कई दिन बिताए हैं। तीसरे पक्ष के उत्पाद उपलब्ध हैं और बहुत सारे PERL और पायथन स्क्रिप्ट हैं लेकिन मैं कुछ सरल और एक भाषा चाहता था जिसे मैं परिचित था, बस एक सी # कंसोल ऐप में हुक लिखना समाप्त हो गया। यह बहुत सीधी आगे है:

public void Main(string[] args)
{
  string repositories = args[0];
  string transaction = args[1];

  var processStartInfo = new ProcessStartInfo
                           {
                             FileName = "svnlook.exe",
                             UseShellExecute = false,
                             CreateNoWindow = true,
                             RedirectStandardOutput = true,
                             RedirectStandardError = true,
                             Arguments = String.Format("log -t \"{0}\" \"{1}\"", transaction, repositories)
                           };

  var p = Process.Start(processStartInfo);
  var s = p.StandardOutput.ReadToEnd();
  p.WaitForExit();

  if (s == string.Empty)
  {
    Console.Error.WriteLine("Message must be provided");
    Environment.Exit(1);
  }

  Environment.Exit(0);
}

इसके बाद आप निम्नलिखित पंक्ति के साथ रेपो के हुक फ़ोल्डर में प्री-प्रतिबद्ध.cmd फ़ाइल जोड़ कर पूर्व प्रतिबद्धता पर इसका आह्वान कर सकते हैं:

[path]\PreCommit.exe %1 %2

आप इस ओवरकिल पर विचार कर सकते हैं लेकिन आखिरकार यह कोडिंग के कुछ ही मिनटों में है। और क्या, आपको .NET भाषा सुइट का लाभ मिलता है जो IMHO विकल्पों के लिए बहुत बेहतर है। मैं अपने हुक को काफी हद तक विस्तारित करूँगा और उनके खिलाफ उचित परीक्षण भी लिखूंगा? एक डॉस बैच फ़ाइल के साथ ऐसा करने के लिए थोड़ा मुश्किल है!

बीटीडब्लू, कोड को इस पोस्ट से अनुकूलित किया गया है।

0
जोड़ा

कैप्टनहूक , ".NET का उपयोग करके सबवर्जन हुक लिखने के लिए एक साधारण प्लगइन ढांचा" देखें।

0
जोड़ा
सुनिश्चित करें कि पैच फ़ाइल भी प्राप्त करें। यह 2x कीड़े को ठीक करता है
जोड़ा लेखक Greg Woods, स्रोत

मैंने विंडोज पर पायथन में हुक लिखा है क्योंकि नेट पर कई उदाहरण हैं (आमतौर पर लिनक्स के लिए लेकिन अंतर छोटे हैं)। हम एसवीएन के साथ एकीकृत Trac का भी उपयोग करते हैं और एक ट्रैक एपीआई पाइथन के माध्यम से सुलभ है जो हमें स्वचालित रूप से Trac बनाने / संशोधित करने देता है एसवीएन हुक स्क्रिप्ट से टिकट।

0
जोड़ा

हमें जटिल आवश्यकताएं मिली हैं जैसे:

  1. केवल कुछ उपयोगकर्ता एसवीएन पेड़ के कुछ हिस्सों में फ़ोल्डर्स बना सकते हैं, लेकिन हर कोई वहां फाइलों को संपादित कर सकता है
  2. कुछ फ़ाइल एक्सटेंशन में फ़ाइल में कुछ टेक्स्ट नहीं हो सकता
  3. कुछ फ़ाइल एक्सटेंशन केवल निर्देशिकाओं के सबसेट में संग्रहीत किए जा सकते हैं
  4. साथ ही साथ कई सरल जैसे, एक प्रतिबद्ध टिप्पणी होना चाहिए
  5. सभी पिछले एसवीएन प्रतिबद्धताओं के खिलाफ नया हुक चलाकर परीक्षण योग्य

# 5 हमारे लिए बहुत बड़ा है, यह जानने का कोई बेहतर तरीका नहीं है कि आप अपने नए हुक के माध्यम से सभी पिछले कामों को धक्का देने में सक्षम होने के बजाय आगे बढ़ने वाली चीजों को तोड़ने वाले नहीं हैं। हुक को समझना कि 1234 एक संशोधन था और 1234-1 लेनदेन था और प्रक्रिया के दौरान हमने सबसे अच्छा निर्णय लिया था, svnlook, आदि को कॉल करते समय उपयुक्त तर्क परिवर्तन करना था।

हमारे लिए अखरोट इतना बड़ा हो गया कि पूरी तरह से यूनिट टेस्टेबल, रिग्रेशन टेस्टेबल, सी # कंसोल एक्सई ने सबसे ज्यादा समझदारी की। हमारे पास कॉन्फ़िगरेशन फ़ाइलें हैं जो निर्देशिका प्रतिबंधों को खिलाती हैं, मौजूदा httpd_authz फ़ाइल को "विशेषाधिकार प्राप्त" उपयोगकर्ता प्राप्त करने के लिए पार्स करें। अगर हम .NET विकास कार्य बल के साथ Windows पर नहीं चल रहे थे, तो शायद मैंने इसे पाइथन में लिखा होगा, लेकिन चूंकि दूसरों को भविष्य में इसका समर्थन करने की आवश्यकता हो सकती है, इसलिए मैं .NET चला गया। बीएटी,। वीबीएस, पावरहेल सीलनेस।

व्यक्तिगत रूप से मुझे लगता है कि पावरहेल .NET से काफी अलग है जो "स्क्रिप्टिंग" भाषा के रूप में अधिक बेकार है। यह अच्छा है अगर किसी उत्पाद के लिए केवल सीएमडी लाइन समर्थन पीएस (एक्सचेंज, विंडोज 2 के 8) आदि के माध्यम से आता है, लेकिन यदि आप जो कुछ करना चाहते हैं वह कुछ पाठ को पार्स करना है या नियमित रूप से एक्सेस करना है .NET ऑब्जेक्ट्स पीएस सिर्फ एक पागल सिंटैक्स और बेवकूफ सुरक्षा आयरन जोड़ता है एक त्वरित और आसान छोटा .NET ऐप क्या हो सकता है पर पर्दा।

0
जोड़ा

If you have a PHP executable with a help of simple PHP class you may write hook script in PHP like it is shown here http://www.devhands.com/2010/01/subversion-hook-php-framework-in/

0
जोड़ा
यह विंडोज़ पर काम नहीं करता है, आपको एक बैच या एक्सई फाइल की आवश्यकता है जो PHP स्क्रिप्ट लॉन्च करे।
जोड़ा लेखक Joeri Sebrechts, स्रोत