gecko-dev/tools/tryselect/test/conftest.py
Andrew Halberstadt 0e4eda282f Bug 1471990 - Implement |mach try again| to repeat your last 'try_task_config.json' try push r=gbrown
One of the big downsides to |mach try fuzzy| is that if you use the interactive
finder, there's no way to repeat your last action. If you want to run the same
push again, you have to manually re-select all the same tasks a second time.

It is possible to save presets, but this is fairly heavy-weight and (more)
permanent. Sometimes you just want to re-run a push a few times and forget
about it. It's also possible to craft the query on the command line with -q,
but then you don't get the immediate visual feedback, so you can't be sure that
you typed out the right things without actually pushing.

With |mach try again|, everytime you generate a try_task_config.json via
'fuzzy', 'empty' or any other subcommands that may exist in the future, it'll
get stored in a history file under ~/.mozbuild. Then running |mach try again|
will simply re-run the most recent try_task_config.json.

You'll also be able to view the whole history via |mach try again --list| and
select a specific try_task_config.json (i.e not the most recent one) via
|mach try again --index <index>|.

Example usage will be:
$ ./mach try fuzzy
<select a bunch of tasks>
$ ./mach try again
<re-pushes exact same set of tasks>

MozReview-Commit-ID: 3EZjVCy08uq

Depends on D1808.

Differential Revision: https://phabricator.services.mozilla.com/D1867

--HG--
extra : moz-landing-system : lando
2018-07-16 13:35:30 +00:00

35 lines
1.3 KiB
Python

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
from __future__ import absolute_import, print_function, unicode_literals
from mozversioncontrol import HgRepository, GitRepository
import pytest
@pytest.fixture(autouse=True)
def patch_vcs(monkeypatch, tmpdir):
# Make sure we don't accidentally push to try
def fake_push_to_try(*args, **kwargs):
pass
def fake_working_directory_clean(*args, **kwargs):
return True
for cls in (HgRepository, GitRepository):
monkeypatch.setattr(cls, 'push_to_try', fake_push_to_try)
monkeypatch.setattr(cls, 'working_directory_clean', fake_working_directory_clean)
def pytest_generate_tests(metafunc):
if all(fixture in metafunc.fixturenames for fixture in ('template', 'args', 'expected')):
def load_tests():
for template, tests in metafunc.module.TEMPLATE_TESTS.items():
for args, expected in tests:
yield (template, args, expected)
tests = list(load_tests())
ids = ['{} {}'.format(t[0], ' '.join(t[1])).strip() for t in tests]
metafunc.parametrize('template,args,expected', tests, ids=ids)