Есть ли рекомендуемая команда для "hg bisect --command"? - PullRequest
8 голосов
/ 25 марта 2010

У меня есть новая ошибка, которую я должен отследить завтра. Я знаю предыдущую версию hg, которая была хорошей, поэтому я подумываю об использовании hg bisect.

Однако я нахожусь в Windows и не хочу вдаваться в сценарии DOS.

В идеале я мог бы написать модульный тест Python и использовать его в 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

Есть ли лучший способ сделать это? Спасибо за любой совет.

Ответы [ 3 ]

10 голосов
/ 25 марта 2010

Спасибо всем, особенно Уиллу Маккатчену. Решение, которое работало лучше всего, ниже.

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 bisect:

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

или в Windows последняя команда:

hg bisect --command bisector.py
4 голосов
/ 25 марта 2010

Я думаю, что вы можете удалить функцию main() и использовать следующий блок для запуска тестов:

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

Вызов unittest.main() запустит тесты, найденные в этом файле, и завершится с соответствующим кодом состояния в зависимости от того, пройдены все тесты или нет.

1 голос
/ 07 июня 2010

Если у вас есть некоторые инструменты Unix, обратите внимание, что «grep» устанавливает статус выхода полезным способом. Так что, если ваш тестовый модуль печатает «PASS», когда он проходит, вы можете сделать:

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

и это будет чертовски хорошо работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...