2010-03-24 11 views
8

मेरे पास एक उभरती हुई बग है जिसे मुझे कल ट्रैक करना है। मुझे एक पिछला एचजी संशोधन पता है जो अच्छा था इसलिए मैं एचजी बिसेक्ट का उपयोग करने के बारे में सोच रहा हूं।क्या "hg bisect --command" के लिए कोई अनुशंसित कमांड है?

हालांकि, मैं विंडोज़ पर हूं और डॉस स्क्रिप्टिंग में नहीं जाना चाहता हूं।

आदर्श रूप में, मैं एक पायथन यूनिट परीक्षण लिखने में सक्षम हूं और इसका उपयोग करने के लिए hg bisect है। यह मेरा पहला प्रयास है।

bisector.py

#!/usr/bin/env python 

import sys 
import unittest 

class TestCase(unittest.TestCase): 

    def test(self): 
     #raise Exception('Exception for testing.') 
     #self.fail("Failure for testing.") 
     pass 


def main(): 
    suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestCase) 
    result = unittest.TestResult() 
    suite.run(result) 

    if result.errors: 
     # Skip the revision 
     return 125 

    if result.wasSuccessful(): 
     return 0 
    else: 
     return 1 


if '__main__' == __name__: 
    sys.exit(main()) 

शायद मैं तो चला सकते हैं:

hg bisect --reset 
hg bisect --bad 
hg bisect --good -r 1 
hg bisect --command=bisector.py 

वहाँ यह करने का एक बेहतर तरीका है? किसी भी सलाह के लिए धन्यवाद।

+2

आपको आदेश के रूप में 'python bisector.py' निर्दिष्ट करने की आवश्यकता हो सकती है; मुझे यकीन नहीं है कि एचजी खिड़कियों पर ठीक से शेबांग को पहचान लेगा या नहीं (या क्या वह शेबैंग आपके विंडोज सिस्टम पर भी मान्य है;))। – Amber

+1

क्या बेहतर है? आपके दृष्टिकोण में क्या गलत है, इसमें सुधार की जरूरत है? – nosklo

उत्तर

10

सभी के लिए धन्यवाद, खासकर विल मैकक्यूचन के लिए। सबसे अच्छा काम करने वाला समाधान नीचे है।

bisector.py

एचजी
#!/usr/bin/env python 

import unittest 

class TestCase(unittest.TestCase): 

    def test(self): 
     # Raise an assertion error to mark the revision as bad 
     pass 


if '__main__' == __name__: 
    unittest.main() 

कठिन हिस्सा हो रही थी द्विभाजित सही कमांड:

hg update tip 
hg bisect --reset 
hg bisect --bad 
hg bisect --good 0 
hg bisect --command ./bisector.py 

या Windows पर, पिछले आदेश है:

hg bisect --command bisector.py 
+0

बिल्कुल जो मैं खोज रहा था, धन्यवाद! :) – Mizipzor

4

मुझे लगता है कि आप अपने main() समारोह को हटाने और परीक्षण चलाने के लिए निम्नलिखित ब्लॉक का उपयोग कर सकते हैं:

if __name__ == '__main__': 
    unittest.main() 

unittest.main() करने के लिए कॉल के आधार एक उपयुक्त स्थिति कोड के साथ परीक्षण इस फाइल और बाहर निकलने में यह पाता है चलेंगे क्या सभी परीक्षण पास या असफल होते हैं।

1

मामले में आपके पास अपने निपटान में कुछ यूनिक्स उपकरण हैं, ध्यान दें कि 'grep' एक उपयोगी तरीके से अपनी निकास स्थिति सेट करता है। इसलिए यदि आपका यूनिट टेस्ट प्रिंट करता है तो "पास" प्रिंट करता है, तो आप यह कर सकते हैं:

hg bisect -c './unittest | grep PASS' 

और यह अच्छी तरह से अच्छी तरह से काम करेगा।

+0

अच्छा विचार। दुर्भाग्य से यह प्रोजेक्ट विंडोज पर है लेकिन आपका सुझाव जानने योग्य है। धन्यवाद। – blokeley

+0

विंडोज समकक्ष (साइगविन और स्टैंडअलोन) हैं जो एक ही काम करेंगे :) – awwaiid

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