Skip to content

Commit

Permalink
WIP: --no-provision
Browse files Browse the repository at this point in the history
  • Loading branch information
hroncok committed Feb 17, 2021
1 parent 5c494a8 commit b4b691d
Showing 1 changed file with 32 additions and 2 deletions.
34 changes: 32 additions & 2 deletions src/tox/config/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -572,6 +572,17 @@ def tox_addoption(parser):
action="store_true",
help="override alwayscopy setting to True in all envs",
)
parser.add_argument(
"--no-provision",
action="store",
nargs="?",
default=False,
const=True,
metavar="REQUIRES_JSON",
help="Prevent tox provision, fail when requires are missing. "
"If a path is provided as a value and provisioning fails, "
"tox will save requires information in the file, in JSON format.",
)

cli_skip_missing_interpreter(parser)
parser.add_argument("--workdir", metavar="PATH", help="tox working directory")
Expand Down Expand Up @@ -1318,8 +1329,8 @@ def handle_provision(self, config, reader):
# raise on unknown args
self.config._parser.parse_cli(args=self.config.args, strict=True)

@staticmethod
def ensure_requires_satisfied(config, requires, min_version):
@classmethod
def ensure_requires_satisfied(cls, config, requires, min_version):
missing_requirements = []
failed_to_parse = False
deps = []
Expand All @@ -1346,12 +1357,31 @@ def ensure_requires_satisfied(config, requires, min_version):
missing_requirements.append(str(requirements.Requirement(require)))
if failed_to_parse:
raise tox.exception.BadRequirement()
if config.option.no_provision and missing_requirements:
msg = "Provisioning explicitly disabled within {}, but missing {}"
if config.option.no_provision is not True: # it's a path
msg += ". Requires written to {}."
cls.write_requires_to_json_file(config)
raise tox.exception.Error(
msg.format(sys.executable, missing_requirements, config.option.no_provision)
)
if WITHIN_PROVISION and missing_requirements:
msg = "break infinite loop provisioning within {} missing {}"
raise tox.exception.Error(msg.format(sys.executable, missing_requirements))
config.run_provision = bool(len(missing_requirements))
return deps

@staticmethod
def write_requires_to_json_file(config):
import json

requires_dict = {
"minversion": config.minversion,
"requires": config.requires,
}
with open(config.option.no_provision, "w", encoding="utf-8") as outfile:
json.dump(requires_dict, outfile, indent=4)

def parse_build_isolation(self, config, reader):
config.isolated_build = reader.getbool("isolated_build", False)
config.isolated_build_env = reader.getstring("isolated_build_env", ".package")
Expand Down

0 comments on commit b4b691d

Please sign in to comment.