2011-04-05 8 views
6

पर विस्तार करने के लिए Mercurial कीवर्ड एक्सटेंशन मुझे निर्माण दिनांक और स्रोत फ़ाइल में संशोधन को एम्बेड करने के लिए hg कीवर्ड एक्सटेंशन का उपयोग करने की आवश्यकता है। पूरी तरह से छोड़कर "आप वास्तव में ऐसा नहीं करना चाहते हैं" तर्क, मैं यह कैसे कर सकता हूं?प्रत्येक प्रतिबद्धता

यहां मेरी स्रोत फ़ाइल (lib/foo/version.rb) दिखती है (जो रूबी होने लगता है, लेकिन यह केवल इस दृष्टिकोण से प्रासंगिक है कि मेरे पास मेरे निर्माण में "संकलन" चरण नहीं है जो मैं कर सकता हूं - DREVISION = "$ (Hg आईडी)" में):

module Foo 
    VERSION = { 
    :date => "$Date$", 
    :changeset => "$Revision$" 
    } 
end 

समस्या यह है कि $ संशोधन $ और $ तिथि $, changeset साथ विस्तार किया है और उस फ़ाइल की तारीख प्रतिबद्ध हैं, जबकि मैं क्या जरूरत है टिप चेंजेट और पूरे भंडार की तारीख प्रतिबद्ध करें।

मुझे एक स्पष्ट टेम्पलेट दिखाई नहीं देता है जिसका उपयोग मैं hg help templates में कर सकता हूं, न ही कीवर्ड एक्सटेंशन वैश्विक दायरे के साथ कुछ भी उल्लेख करता है। क्या मैं संभव करने की कोशिश कर रहा हूं?

+1

मैं समझता हूँ कि आप लेकिन किसी और इस पढ़ने के लिए, एक तरफ छोड़ भाग "क्या आप यह करने के लिए नहीं करना चाहते हैं" करना चाहते हैं: कीवर्ड विस्तार पेज के लिए एक महान काम करता है यह समझाते हुए कि यह शायद एक बुरा विचार क्यों है। संक्षेप में: एक डीवीसीएस के साथ चेकआउट में सभी फाइलें एक ही संशोधन से हैं इसलिए 'एचजी माता-पिता' के आउटपुट की जांच करना या '.hg_archive.txt' की सामग्री लगभग हमेशा एक बेहतर योजना है। आपकी सभी फाइलों को हर समय 'एचजी स्थिति' और डीवीसीएस उपयोग के साथ हर समय शिकंजा संशोधित करना पड़ता है। –

उत्तर

3

आप एक post-commit हुक उस फ़ाइल को अद्यतन करता स्थापित कर सकते हैं। कोई बात नहीं क्या तारीख और changeset यह वास्तव में होता है है, मर्क्युरियल यह के रूप में देखेंगे -

[encode] 
lib/foo/version.rb = sed -e "s|\$Date.*\$|\$Date\$|" \ 
          -e "s|\$Version.*\$|\$Version\$|" 

यह स्क्रिप्ट कर देगा मर्क्युरियल फ़ाइल देखें के रूप में साफ: आप भी एक एनकोड फिल्टर उस संस्करण फ़ाइल को साफ करेंगे जोड़ सकते हैं युक्त अन-विस्तार $Date$ और $Version$ कीवर्ड:

 
$ hg commit -m test 
$ hg tip 
changeset: 7:df81c9ddc9ad 
tag:   tip 
user:  Martin Geisler 
date:  Wed Apr 06 14:39:26 2011 +0200 
summary:  test 

$ hg status 
$ hg cat version.py 
date = "$Date$" 
version = "$Version$" 
$ cat version.py 
date = "$Date: Wed Apr 6 14:39:26 CEST 2011$" 
version = "$Version: df81c9ddc9ad$" 
+0

ठीक है, मैं इसे आज़मा दूंगा। ऐसा लगता है कि कीवर्ड एक्सटेंशन हूड के नीचे क्या कर रहा है, बस प्रति फ़ाइल आधार के बजाय प्रति-संग्रह पर एक बहुत ही सरल संस्करण की तरह दिखता है। – regularfry

+0

ग्रेट सॉल्यूशन, लेकिन विंडोज़ बॉक्स पर इसे हासिल करने का कोई तरीका है, बिना अतिरिक्त libs इंस्टॉल किए? –

+0

@ जोन: कोई अंतर्निहित तरीका नहीं है लेकिन आप इसे करने के लिए Mercurial के लिए एक छोटा पायथन एक्सटेंशन लिख सकते हैं। –

0

यदि आप चेकआउट से अपना कोड चला रहे हैं तो आप सीधे एचजी का आह्वान कर सकते हैं और मूल्य कैश कर सकते हैं। कुछ की तरह:

module Foo 
    VERSION = { 
    :version => system("hg log --template '{note|short}-{latesttag}-{latesttagdistance}' -r .") 
    } 
end 

और आप एक प्रणाली मर्क्युरियल के साथ स्थापित किया पर एक चेकआउट अंदर से कोड चल रहा नहीं कर रहे हैं, तो अपने तैनाती स्क्रिप्ट आसानी से मिल/मान का उपयोग कर सकते हैं - शायद hg archive का उपयोग कर पाने के लिए द्वारा टैरबॉल भेजने के लिए जो स्वचालित रूप से .hg_archive.txt शामिल करता है।

मैं गारंटी देता हूं कि कीवर्ड एक्सटेंशन से ऐसा करने का कोई शानदार तरीका है चाहे आपका सेटअप क्या हो। हमेशा हर प्रतिबद्ध के बाद यह बदल जाएगा और इस तरह गंदा हो -

[hooks] 
post-commit = sed -i lib/foo/version.rb \ 
    -e "s|\$Date.*\$|\$Date: $(date)\$|" \ 
    -e "s|\$Version.*\$|\$Version: $(hg id -i)\$|" 

फिर आप शायद .hgignore फाइल करने के लिए संस्करण फ़ाइल जोड़ना चाहिए:

+0

हाँ, यह मेरे लिए काम नहीं करेगा। मुझे यह भी पता नहीं है कि तैनाती होने पर मुझे एक अलग फ़ाइल के रूप में lib/foo/version.rb होगा (जो मैं नियंत्रण में नहीं हूं), अकेले रहने दो कि मैं एक भंडार के भीतर से चल रहा हूं। मुझे लगता है कि पोस्ट-प्रतिबद्ध एकमात्र तरीका हो सकता है जो मैं कर रहा हूं। – regularfry

संबंधित मुद्दे