From b0fc24f681e885428650e77e9f48955757a971de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabrice=20Flore-Th=C3=A9bault?= Date: Mon, 15 Jun 2020 13:50:45 +0200 Subject: [PATCH] docker.py reworked, thanks @hroncok --- pre_commit/languages/docker.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/pre_commit/languages/docker.py b/pre_commit/languages/docker.py index 72a98ea5..c0a00488 100644 --- a/pre_commit/languages/docker.py +++ b/pre_commit/languages/docker.py @@ -1,6 +1,6 @@ +import functools import hashlib import os -import subprocess from typing import Sequence from typing import Tuple @@ -10,6 +10,7 @@ from pre_commit.languages import helpers from pre_commit.prefix import Prefix from pre_commit.util import CalledProcessError from pre_commit.util import clean_path_on_failure +from pre_commit.util import cmd_output from pre_commit.util import cmd_output_b ENVIRONMENT_DIR = 'docker' @@ -77,18 +78,24 @@ def install_environment( os.mkdir(directory) -def get_docker_user() -> Tuple[str, ...]: # pragma: win32 no cover - output = subprocess.check_output( +@functools.lru_cache(maxsize=1) +def docker_is_rootless() -> bool: + returncode, stdout, stderr = cmd_output( ('docker', 'system', 'info'), - text=True, ) - for line in output.splitlines(): + for line in stdout.splitlines(): # rootless docker has "rootless" # rootless podman has "rootless: true" if line.strip().startswith('rootless'): if 'false' not in line: - return () # no -u for rootless + return True break + return False + + +def get_docker_user() -> Tuple[str, ...]: # pragma: win32 no cover + if: docker_is_rootless(): + return () try: return ('-u', f'{os.getuid()}:{os.getgid()}') except AttributeError: