2012-01-19 16 views
9

मैं एक अद्यतन स्क्रिप्ट लिखने की प्रक्रिया हूं, जो कई रिपॉजिटरीज़ का नवीनतम संस्करण खींचता है, और परियोजनाओं का पुनर्निर्माण करता है। मैं निर्माण सशर्त बनाना चाहते थे, इसलिए मैंMercurial: जांचें कि आखिरी पुल/अपडेट में बदलाव हुए बदलाव

hg pull -u && ant clean build 

और विभिन्नता

hg pull; hg update && ant clean build 

हालांकि, चींटी निर्माण हमेशा शुरू हो जाती है की कोशिश की, तब भी जब कुछ भी नहीं बदला है। मुझे पता है कि खींचने से पहले परिवर्तनों की जांच के लिए मैं hg incoming का उपयोग कर सकता हूं, लेकिन यह मेरे लिए अपर्याप्त लगता है।

मैं दो बार सर्वर से संपर्क किए बिना नए बदलावों की जांच कैसे कर सकता हूं (एक बार hg incoming के लिए, एक बार hg pull के लिए)?

अद्यतन: यह अब अपने निर्माण स्क्रिप्ट है:

update() { 
    TIP=$(hg tip --template "{node"}) 
    hg pull -u 
    if test "$TIP" != $(hg tip --template "{node}"); then 
    ant clean build 
    fi 
} 

(cd repo1; update) 
(cd repo2; update) 

और सोच कारण है कि मैं एक साफ निर्माण हर बार करते हैं, उसके लिए दो कारण हैं लोगों के लिए:

  1. खजाने एक-दूसरे पर निर्भर करते हैं, और जब उनमें से एक में एपीआई बदलती है, तो मुझे उन जगहों को खोजने के लिए एक पूर्ण पुनर्निर्माण करने की आवश्यकता होती है जहां इन एपीआई ब्रेक कोड
  2. जावा कंपाइलर इनलाइनों को भी रेखांकित करता है अन्य वर्ग फाइलें। अब, जब मैं कक्षा में एक स्थिर क्षेत्र को फिर से बदलता हूं जो बदल सकता है, तो उस निरंतर उपयोग की जाने वाली सभी अन्य क्लास फाइलें निर्माण द्वारा छूटे रहती हैं, और इससे सूक्ष्म बग हो सकती हैं जिन्हें मैं टालना चाहता हूं।
+1

उचित बिल्ड सिस्टम नहीं होना चाहिए, पढ़ना: चींटी नहीं, वृद्धिशील बिल्ड करने में सक्षम हो? – jmg

+0

चींटी वृद्धिशील बिल्ड कर सकती है, लेकिन मैं सूक्ष्म बग से बचना चाहता हूं, इसलिए मैं हर बार एक साफ निर्माण करता हूं। –

+1

तो कैसे अपने स्वयं के वृद्धिशील निर्माण रोलिंग सूक्ष्म बग से बचने में मदद करते हैं? –

उत्तर

9

आप न सिर्फ दो बार hg incoming चलाने के बाद से यह वास्तव में सभी changesets दो बार तो डाउनलोड करेगा चाहिए। ऐसा इसलिए है क्योंकि आप रिमोट रिपोजिटरी पर एक पूर्ण hg pull चलाए बिना चुपके से नहीं देख सकते हैं। निम्न कमांड के लिए एक गार्ड के रूप

hg incoming --bundle incoming.hg && hg pull --update incoming.hg && echo "Go!" 

hg incoming आदेश में कार्य करता है:

तो एक बंडल में भेजे changesets बचाने के लिए और है कि बजाय से खींच && तो पहला आदेश है कि एक वापसी सर्किटिंग कम है गैर-शून्य निकास कोड पूरे निकास को उस निकास कोड के साथ विफल कर देगा। इसका अर्थ यह है कि hg pull और hg incoming सिग्नल जब कोई भी खींचने के लिए कुछ भी नहीं है, तो निम्न आदेशों को निष्पादित नहीं किया जाता है।

+2

वह वास्तव में आने वाले दो बार कॉल नहीं कर रहा था। लेकिन मुझे एहसास नहीं हुआ कि इनकमिंग पूर्ण परिवर्तन को डाउनलोड करता है, इसलिए आने वाली और खींचने से चीजों को दो बार डाउनलोड करना पड़ता है। –

+0

अजीब, 'एचजी पुल - अपडेट और & echo "जाओ" हमेशा 'echo' करता है, लेकिन' hg pull --update आने वाली.hg && echo" go "केवल तभी जब नए बदलाव पेश किए जाते हैं। क्या इसके लिए कोई कारण है? –

+0

@AdamHouldsworth: हाँ, आने वाली और खींच वास्तव में एक ही चीज़ है (आने वाले बदलाव केवल बदलावों को फेंक देते हैं)। दस्तावेज इस पर बहुत स्पष्ट नहीं है, इसलिए आपको यह सोचने के लिए दोषी नहीं ठहराया जा सकता है कि आने वाली दौड़ना सस्ता है। –

3

--bundle changesets डाउनलोड करने टाल दो बार करता है, तो आने वाले एक पुल द्वारा पीछा किया जाता का उपयोग करने से hg help incoming

उद्धरण @Adam करने के लिए दूरस्थ भंडार के लिए ऊपर का पालन करें।

...

रिटर्न 0 अगर वहाँ भेजे परिवर्तन कर रहे हैं, 1 अन्यथा।

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