3 new commits in tox: https://bitbucket.org/hpk42/tox/commits/babdb9c26786/ Changeset: babdb9c26786 User: Anthon van der Neut Date: 2013-08-08 09:41:18 Summary: dash_e: fixes #109 and #111
Behaviour of -e has not changed, but can be set by passing True or False as a parameter multi_dash_e to tox/_config.py: prepare_parse() This parameter should come from a user specifyable default value for backwards compatibility. Default should preferable be True after that is implemented. _split_env() was factored out of class parseini to enable testing The issue #111: error on specifying same env twice ("tox -e py27,py27") fixed. Multiple specifications of the same environment result in multiple invocation (this could also be selectable in a configuration file) Affected #: 3 files diff -r c44e2c27e2e09e71ab9270c15333baa1333502df -r babdb9c26786160c2cfbfdc9759e9fb86de5c0c9 tests/test_config.py --- a/tests/test_config.py +++ b/tests/test_config.py @@ -7,6 +7,7 @@ import py from tox._config import IniReader, CommandParser from tox._config import parseconfig +from tox._config import prepare_parse, _split_env class TestVenvConfig: def test_config_parsing_minimal(self, tmpdir, newconfig): @@ -927,6 +928,42 @@ "*ERROR*tox.ini*not*found*", ]) + +class TestArgumentParser: + + def test_dash_e_silent1(self): + parser = prepare_parse('testpkg', None) + args = parser.parse_args('-e py26 -e py33'.split()) + envlist = _split_env(args.env) + assert envlist == ['py33'] + + def test_dash_e_silent2(self): + parser = prepare_parse('testpkg', None) + args = parser.parse_args('-e py26,py33'.split()) + envlist = _split_env(args.env) + assert envlist == ['py26', 'py33'] + + def test_dash_e_silent3(self): + parser = prepare_parse('testpkg', None) + args = parser.parse_args('-e py26,py26'.split()) + envlist = _split_env(args.env) + assert envlist == ['py26', 'py26'] + + def test_dash_e_warn(self, capsys): + parser = prepare_parse('testpkg', False) + args = parser.parse_args('-e py26,py32 -e py33'.split()) + envlist = _split_env(args.env) + out, err = capsys.readouterr() + assert 'WARNING: previous optional argument "-e py26' in out + assert envlist == ['py33'] + + def test_dash_e_combine(self): + parser = prepare_parse('testpkg', True) + args = parser.parse_args('-e py26,py25,py33 -e py33,py27'.split()) + envlist = _split_env(args.env) + assert envlist == ['py26', 'py25', 'py33', 'py33', 'py27'] + + class TestCommandParser: def test_command_parser_for_word(self): diff -r c44e2c27e2e09e71ab9270c15333baa1333502df -r babdb9c26786160c2cfbfdc9759e9fb86de5c0c9 tox/_config.py --- a/tox/_config.py +++ b/tox/_config.py @@ -66,7 +66,25 @@ else: setattr(namespace, self.dest, 0) -def prepare_parse(pkgname): +class CheckSingleStoreAction(argparse.Action): + """issue a warning when the store action is called multiple times""" + def __call__(self, parser, namespace, values, option_string=None): + if getattr(namespace, self.dest, None) is not None: + py.builtin.print_( + 'WARNING: previous optional argument "' + option_string + " " + + getattr(namespace, self.dest) + '" overwritten by "' + + option_string + " " + values + '"') + setattr(namespace, self.dest, values) + + +def prepare_parse(pkgname, multi_dash_e=None): + """setup ArgumentParser + + multi_dash_e: + None -> silently ignore all but last -e pyXY option (old behaviour + False -> take last -e pyXY option, but warn on sys.stdout + True -> concatenate + """ parser = argparse.ArgumentParser(description=__doc__,) #formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.pkgname = pkgname @@ -83,7 +101,13 @@ parser.add_argument("-c", action="store", default="tox.ini", dest="configfile", help="use the specified config file name.") - parser.add_argument("-e", action="store", dest="env", + if multi_dash_e is None: + dash_e_action = "store" + elif multi_dash_e is False: + dash_e_action = CheckSingleStoreAction + elif multi_dash_e is True: + dash_e_action = "append" + parser.add_argument("-e", action=dash_e_action, dest="env", metavar="envlist", help="work against specified environments (ALL selects all).") parser.add_argument("--notest", action="store_true", dest="notest", @@ -346,9 +370,21 @@ envlist = list(self.config.envconfigs) envlist.sort() else: - envlist = env.split(",") + envlist = _split_env(env) return envlist +def _split_env(env): + """if handed a list, action="append" was used for -e """ + envlist = [] + if not isinstance(env, list): + env = [env] + for to_split in env: + for single_env in to_split.split(","): + # "remove True or", if not allowing multiple same runs, update tests + if True or single_env not in envlist: + envlist.append(single_env) + return envlist + class DepConfig: def __init__(self, name, indexserver=None): self.name = name diff -r c44e2c27e2e09e71ab9270c15333baa1333502df -r babdb9c26786160c2cfbfdc9759e9fb86de5c0c9 tox/_venv.py --- a/tox/_venv.py +++ b/tox/_venv.py @@ -325,7 +325,10 @@ self.session.make_emptydir(self.envconfig.envtmpdir) cwd = self.envconfig.changedir for i, argv in enumerate(self.envconfig.commands): - message = "commands[%s] | %s" % (i, ' '.join(argv)) + # have to make strings as _pcall changes argv[0] to a local() + # happens if the same environment is invoked twice + message = "commands[%s] | %s" % (i, ' '.join( + [str(x) for x in argv])) action.setactivity("runtests", message) try: self._pcall(argv, cwd=cwd, action=action, redirect=redirect) https://bitbucket.org/hpk42/tox/commits/96e1ba41e1c0/ Changeset: 96e1ba41e1c0 User: Anthon van der Neut Date: 2013-08-08 11:29:48 Summary: dash_e: fixes #109 and #111 Behaviour of -e has not changed, but can be set by passing True or False as a parameter multi_dash_e to tox/_config.py: prepare_parse() This parameter should come from a user specifyable default value for backwards compatibility. Default should preferable be True after that is implemented. _split_env() was factored out of class parseini to enable testing The issue #111: error on specifying same env twice ("tox -e py27,py27") fixed. Multiple specifications of the same environment result in multiple invocation (this could also be selectable in a configuration file) Affected #: 2 files diff -r babdb9c26786160c2cfbfdc9759e9fb86de5c0c9 -r 96e1ba41e1c080148fe8baf5c03ba27febd2a330 tests/test_config.py --- a/tests/test_config.py +++ b/tests/test_config.py @@ -931,34 +931,26 @@ class TestArgumentParser: - def test_dash_e_silent1(self): - parser = prepare_parse('testpkg', None) - args = parser.parse_args('-e py26 -e py33'.split()) + def test_dash_e_single_1(self): + parser = prepare_parse('testpkg') + args = parser.parse_args('-e py26'.split()) envlist = _split_env(args.env) - assert envlist == ['py33'] + assert envlist == ['py26'] - def test_dash_e_silent2(self): - parser = prepare_parse('testpkg', None) + def test_dash_e_single_2(self): + parser = prepare_parse('testpkg') args = parser.parse_args('-e py26,py33'.split()) envlist = _split_env(args.env) assert envlist == ['py26', 'py33'] - def test_dash_e_silent3(self): - parser = prepare_parse('testpkg', None) + def test_dash_e_same(self): + parser = prepare_parse('testpkg') args = parser.parse_args('-e py26,py26'.split()) envlist = _split_env(args.env) assert envlist == ['py26', 'py26'] - def test_dash_e_warn(self, capsys): - parser = prepare_parse('testpkg', False) - args = parser.parse_args('-e py26,py32 -e py33'.split()) - envlist = _split_env(args.env) - out, err = capsys.readouterr() - assert 'WARNING: previous optional argument "-e py26' in out - assert envlist == ['py33'] - def test_dash_e_combine(self): - parser = prepare_parse('testpkg', True) + parser = prepare_parse('testpkg') args = parser.parse_args('-e py26,py25,py33 -e py33,py27'.split()) envlist = _split_env(args.env) assert envlist == ['py26', 'py25', 'py33', 'py33', 'py27'] diff -r babdb9c26786160c2cfbfdc9759e9fb86de5c0c9 -r 96e1ba41e1c080148fe8baf5c03ba27febd2a330 tox/_config.py --- a/tox/_config.py +++ b/tox/_config.py @@ -66,18 +66,7 @@ else: setattr(namespace, self.dest, 0) -class CheckSingleStoreAction(argparse.Action): - """issue a warning when the store action is called multiple times""" - def __call__(self, parser, namespace, values, option_string=None): - if getattr(namespace, self.dest, None) is not None: - py.builtin.print_( - 'WARNING: previous optional argument "' + option_string + " " + - getattr(namespace, self.dest) + '" overwritten by "' + - option_string + " " + values + '"') - setattr(namespace, self.dest, values) - - -def prepare_parse(pkgname, multi_dash_e=None): +def prepare_parse(pkgname): """setup ArgumentParser multi_dash_e: @@ -101,13 +90,7 @@ parser.add_argument("-c", action="store", default="tox.ini", dest="configfile", help="use the specified config file name.") - if multi_dash_e is None: - dash_e_action = "store" - elif multi_dash_e is False: - dash_e_action = CheckSingleStoreAction - elif multi_dash_e is True: - dash_e_action = "append" - parser.add_argument("-e", action=dash_e_action, dest="env", + parser.add_argument("-e", action="append", dest="env", metavar="envlist", help="work against specified environments (ALL selects all).") parser.add_argument("--notest", action="store_true", dest="notest", @@ -376,8 +359,6 @@ def _split_env(env): """if handed a list, action="append" was used for -e """ envlist = [] - if not isinstance(env, list): - env = [env] for to_split in env: for single_env in to_split.split(","): # "remove True or", if not allowing multiple same runs, update tests https://bitbucket.org/hpk42/tox/commits/abcc1ea8aee7/ Changeset: abcc1ea8aee7 User: Anthon van der Neut Date: 2013-08-08 11:32:15 Summary: dash_e: fixes #109 and #111 Behaviour of -e has not changed, but can be set by passing True or False as a parameter multi_dash_e to tox/_config.py: prepare_parse() This parameter should come from a user specifyable default value for backwards compatibility. Default should preferable be True after that is implemented. _split_env() was factored out of class parseini to enable testing The issue #111: error on specifying same env twice ("tox -e py27,py27") fixed. Multiple specifications of the same environment result in multiple invocation (this could also be selectable in a configuration file) Affected #: 1 file diff -r 96e1ba41e1c080148fe8baf5c03ba27febd2a330 -r abcc1ea8aee7aad33494dba87bee100f0467787d tox/_config.py --- a/tox/_config.py +++ b/tox/_config.py @@ -67,13 +67,6 @@ setattr(namespace, self.dest, 0) def prepare_parse(pkgname): - """setup ArgumentParser - - multi_dash_e: - None -> silently ignore all but last -e pyXY option (old behaviour - False -> take last -e pyXY option, but warn on sys.stdout - True -> concatenate - """ parser = argparse.ArgumentParser(description=__doc__,) #formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.pkgname = pkgname Repository URL: https://bitbucket.org/hpk42/tox/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. _______________________________________________ pytest-commit mailing list pytest-commit@python.org http://mail.python.org/mailman/listinfo/pytest-commit