diff --git a/swh/loader/mercurial/from_disk.py b/swh/loader/mercurial/from_disk.py --- a/swh/loader/mercurial/from_disk.py +++ b/swh/loader/mercurial/from_disk.py @@ -167,9 +167,16 @@ # If set, will override the default value self._visit_status = None - self.old_environ = os.environ.copy() - os.environ.clear() - os.environ.update(get_minimum_env()) + if "PYTEST_CURRENT_TEST" not in os.environ: + # Do not execute in tests, since the tests already have a clean environment. + # Loading multiple loaders in a test will cause other tests that rely on + # environment variables to fail. + # Playing with `os.environ` is all kinds of terrible, but unfortunately + # `billiard` (which we use for subprocesses) does not appear to have a way + # of handling this any better. + self.old_environ = os.environ.copy() + os.environ.clear() + os.environ.update(get_minimum_env()) def pre_cleanup(self) -> None: """As a first step, will try and check for dangling data to cleanup. @@ -184,8 +191,10 @@ def cleanup(self) -> None: """Last step executed by the loader.""" - os.environ.clear() - os.environ.update(self.old_environ) + if "PYTEST_CURRENT_TEST" not in os.environ: + # See comment in `__init__` about this. + os.environ.clear() + os.environ.update(self.old_environ) if self._repo_directory and os.path.exists(self._repo_directory): self.log.debug(f"Cleanup up repository {self._repo_directory}") diff --git a/swh/loader/mercurial/tests/conftest.py b/swh/loader/mercurial/tests/conftest.py --- a/swh/loader/mercurial/tests/conftest.py +++ b/swh/loader/mercurial/tests/conftest.py @@ -47,3 +47,4 @@ """ os.environ["HGPLAIN"] = "" os.environ["HGRCPATH"] = "" + os.environ["HGSKIPREPO"] = ""