2010-05-10 7 views
8

में उपयोग के लिए Mercurial वर्तमान परिवर्तन संख्या कैसे प्राप्त करें मैंने हाल ही में जावा प्रोजेक्ट में संस्करण नियंत्रण के लिए Mercurial का उपयोग करना शुरू कर दिया है। जब मैं अपना प्रोग्राम चलाता हूं, तो इनपुट पैरामीटर जो कुछ निश्चित आउटपुट उत्पन्न करने के लिए उपयोग किया जाता है, को एक विशिष्ट फ़ाइल में लिखा जाता है। यह अच्छा होगा अगर मैं वर्तमान आउटपुट फ़ाइल में वर्तमान Mercurial परिवर्तन संख्या (मेरे प्रोग्राम के संस्करण को इंगित करता है) जोड़ सकता हूं।जावा: प्रोग्राम

विंडोज पर ऐसा करने का सबसे आसान तरीका क्या होगा? hg log -l 1 कमांड की पहली पंक्ति के आउटपुट को लाने के लिए मैं एक साधारण जावा पार्सर लिख सकता था, लेकिन शायद एक आसान तरीका है (यानी, कम कोड लाइनें)?

उत्तर

10

आप hg identify का उपयोग कर सकते हैं।

hg id पैकेजिंग चरण के दौरान होना चाहिए, जब स्रोत किए गए हैं और आप अपने आवेदन के पैक किए गए (जार) संस्करण उत्पन्न करते हैं।
उस चरण के दौरान, आप उस प्रकार की जानकारी के साथ एक संस्करण.txt फ़ाइल जेनरेट कर सकते हैं।

$ MY_VERSION=$(hg id) 
$ echo $MY_VERSION 
53efa13dec6f+ tip 

(उदाहरण "build identification" for Python के लिए देखें)

+2

धन चिह्न अनुगामी इसका मतलब है कि VonC स्थानीय, अप्रतिबद्ध परिवर्तन, जो भी नोट करने के लिए अच्छा हो सकता है। –

+0

किसके बारे में बात करते हुए, यह प्रवास कैसे आ रहा है? – Santa

+0

आपका मतलब एचजी पहचान है; और नकारात्मकता यह है कि यह पूर्ण 40 वर्ण sha1 –

2

यहाँ मर्क्युरियल डेवलपर्स को ध्यान में रखते है: Keyword Substitution - Why You Don't Need It

+0

हम्म की बजाय छोटे मानव पठनीय हैश दिखाता है, मुझे बिंदु नहीं मिलता है। कीवर्ड विस्तार से क्या मतलब है? केवल एक चीज जिसे मैं सोच सकता हूं उदा। कि आप 'एचजी पहचान' के बजाय 'एचजी आईडी' लिख सकते हैं, लेकिन यह अवधारणा यहां लागू नहीं होती है। – Rabarberski

+3

अन्य वीसीएस आपको विशेष आईडी जैसे $ आईडी $, $ Rev $, $ $ $ को फ़ाइल की जांच के दौरान विस्तारित करने की अनुमति देता है। इसने आपको कॉन्स char * version = "$ Rev $" जैसी चीजें लिखने की अनुमति दी; जो फाइल को चेक आउट होने पर कॉन्स char * version = "$ Rev: 1.2 $" जैसा कुछ बन जाएगा। –

7

चूंकि आप एक जावा परियोजना में कर रहे हैं, यह आप के लिए प्रासंगिक हो सकता है। मैं टॉमकैट प्रबंधक पृष्ठ में एप्लिकेशन सूची में संस्करण जानकारी (Mercurial परिवर्तन आईडी) प्रदर्शित करने के लिए इस चींटी लक्ष्य का उपयोग करता हूं। मैं बस अपने वेब.एक्सएमएल में डिस्प्ले-नाम xml तत्व के अंदर परिवर्तन आईडी डालता हूं।

<target name="build.release"> 
    <exec executable="/usr/local/bin/hg" outputproperty="scm.version.tag.id"> 
     <arg value="id"/> 
     <arg value="-i"/> 
    </exec> 
    <filter token="build.version.tag" value="${scm.version.tag.id}" /> 
    <copy file="${web.home}/WEB-INF/web.xml" todir="${build.home}" filtering="true" /> 
</target> 

web.xml के अंदर, वहाँ इस तरह प्रदर्शन नाम एक्सएमएल तत्व में एक टोकन दिया गया है:

<display-name>My Webapp @[email protected]</display-name> 
2

मर्क्युरियल कीवर्ड विस्तार के लिए एक विस्तार है। निर्देशों और चेतावनियों के लिए KeywordExtension देखें।

+0

यह बहुत अच्छा है। मुझे लगता है कि प्रत्येक फाइल को हालिया प्रतिबद्धता से जानकारी मिलती है जो वास्तव में व्यक्तिगत फ़ाइल को बदल देती है?(और हाँ, मुझे * डीओ * कीवर्ड विस्तार की आवश्यकता है, अगर मैं ट्रैक करना चाहता हूं कि अन्य लोग अनजाने में क्या कर रहे हैं (पूरी तरह से संशोधन नियंत्रण के बाहर परिवर्तन, अलस)। केवल जब आपकी रिलीज सिस्टम वास्तव में सही तरीके से पालन की जा रही है तो पूरक की आवश्यकता है कीवर्ड की तरह जानकारी दूर हो जाती है। – Roboprog

+0

इसे "अंतिम उपाय की सुविधा" के रूप में मैप किया गया है और इसका उपयोग नहीं किया जाना चाहिए – RS1980

2

एचजी शाखा | xargs hg log -l1 --template {rev} -b

यह आपको वर्तमान शाखा के लिए संशोधन संख्या देगा जिसमें आप काम कर रहे हैं - विभिन्न शाखाओं के निर्माण के लिए बहुत महत्वपूर्ण है।

एक चींटी फ़ाइल इस आपको क्या चाहिए है में ...

<exec dir="${basedir}" 
     executable="/usr/local/bin/hg" 
     outputproperty="branch"> 

      <arg value="branch"/> 
    </exec> 

    <exec dir="${basedir}" 
      executable="/usr/local/bin/hg" 
      outputproperty="version"> 

      <arg value="log"/> 
      <arg line="-l1 --template {rev} -b${branch}" /> 
    </exec>