2010-03-24 14 views
8

Mam powstały błąd, który muszę wyśledzić jutro. Znam poprzednią wersję hg, która była dobra, więc myślę o użyciu hg bisect.Czy jest zalecane polecenie "hg bisect --command"?

Jednak jestem w systemie Windows i nie chcę wchodzić w skrypty DOS.

Idealnie byłoby móc napisać test jednostkowy w Pythonie i użyć go przez półtorej godziny. To moja pierwsza próba.

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()) 

Może mógłbym wtedy uruchomić:

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

Czy istnieje lepszy sposób to zrobić? Dzięki za jakąkolwiek radę.

+2

Może być konieczne podanie 'python bisector.py' jako polecenia; Nie jestem pewien, czy hg poprawnie rozpoznaje shebang w oknach, czy nie (lub czy ten shebang jest nawet ważny w twoim systemie Windows;)). – Amber

+1

lepiej w czym? Co jest nie tak w twoim podejściu, które wymaga poprawy? – nosklo

Odpowiedz

10

Dziękuję wszystkim, szczególnie Willowi McCutchenowi. Rozwiązanie, które działało najlepiej, znajduje się poniżej.

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() 

Najtrudniejsze było coraz HG przepoławiać polecenia prawej:

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

lub w systemie Windows, ostatnie polecenie brzmi:

hg bisect --command bisector.py 
+0

Dokładnie to, czego szukałem, dzięki! :) – Mizipzor

4

myślę, że można usunąć funkcję main() i stosować następujące blok uruchomić testy:

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

Wezwanie do unittest.main() będzie uruchomić testy znalezione w tym pliku i wyjście z odpowiednim kodem stanu zależności o tym, czy wszystkie testy przejdą, czy nie.

1

W przypadku masz do dyspozycji kilka narzędzi uniksowych, zwróć uwagę, że grep ustawia swój status wyjścia w użyteczny sposób. Jeśli więc Twój test urządzenia drukuje "PASS", kiedy mija, możesz zrobić:

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

i to będzie działać bardzo dobrze.

+0

Dobry pomysł. Niestety ten projekt jest w systemie Windows, ale twoja sugestia jest warta poznania. Dzięki. – blokeley

+0

Istnieją odpowiedniki okien (cygwin i standalone), które wykonają to samo :) – awwaiid

Powiązane problemy