X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/988c686d312986760a42cc7edd9a79a8f31c4769..00491e1dcb19a795867249471ca5bb95efcd8cd3:/src/black_primer/lib.py diff --git a/src/black_primer/lib.py b/src/black_primer/lib.py index 39ae93b..ecc704f 100644 --- a/src/black_primer/lib.py +++ b/src/black_primer/lib.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - import asyncio import errno import json @@ -13,6 +11,7 @@ from platform import system from shutil import rmtree, which from subprocess import CalledProcessError from sys import version_info +from tempfile import TemporaryDirectory from typing import Any, Callable, Dict, NamedTuple, Optional, Sequence, Tuple from urllib.parse import urlparse @@ -121,28 +120,36 @@ async def black_run( cmd.extend(*project_config["cli_arguments"]) cmd.extend(["--check", "--diff", "."]) - try: - _stdout, _stderr = await _gen_check_output(cmd, cwd=repo_path) - except asyncio.TimeoutError: - results.stats["failed"] += 1 - LOG.error(f"Running black for {repo_path} timed out ({cmd})") - except CalledProcessError as cpe: - # TODO: Tune for smarter for higher signal - # If any other return value than 1 we raise - can disable project in config - if cpe.returncode == 1: - if not project_config["expect_formatting_changes"]: + with TemporaryDirectory() as tmp_path: + # Prevent reading top-level user configs by manipulating envionment variables + env = { + **os.environ, + "XDG_CONFIG_HOME": tmp_path, # Unix-like + "USERPROFILE": tmp_path, # Windows (changes `Path.home()` output) + } + + try: + _stdout, _stderr = await _gen_check_output(cmd, cwd=repo_path, env=env) + except asyncio.TimeoutError: + results.stats["failed"] += 1 + LOG.error(f"Running black for {repo_path} timed out ({cmd})") + except CalledProcessError as cpe: + # TODO: Tune for smarter for higher signal + # If any other return value than 1 we raise - can disable project in config + if cpe.returncode == 1: + if not project_config["expect_formatting_changes"]: + results.stats["failed"] += 1 + results.failed_projects[repo_path.name] = cpe + else: + results.stats["success"] += 1 + return + elif cpe.returncode > 1: results.stats["failed"] += 1 results.failed_projects[repo_path.name] = cpe - else: - results.stats["success"] += 1 - return - elif cpe.returncode > 1: - results.stats["failed"] += 1 - results.failed_projects[repo_path.name] = cpe - return + return - LOG.error(f"Unknown error with {repo_path}") - raise + LOG.error(f"Unknown error with {repo_path}") + raise # If we get here and expect formatting changes something is up if project_config["expect_formatting_changes"]: