docker.py reworked, thanks @hroncok

This commit is contained in:
Fabrice Flore-Thébault 2020-06-15 13:50:45 +02:00
parent 79528ec13e
commit b0fc24f681

View file

@ -1,6 +1,6 @@
import functools
import hashlib import hashlib
import os import os
import subprocess
from typing import Sequence from typing import Sequence
from typing import Tuple from typing import Tuple
@ -10,6 +10,7 @@ from pre_commit.languages import helpers
from pre_commit.prefix import Prefix from pre_commit.prefix import Prefix
from pre_commit.util import CalledProcessError from pre_commit.util import CalledProcessError
from pre_commit.util import clean_path_on_failure from pre_commit.util import clean_path_on_failure
from pre_commit.util import cmd_output
from pre_commit.util import cmd_output_b from pre_commit.util import cmd_output_b
ENVIRONMENT_DIR = 'docker' ENVIRONMENT_DIR = 'docker'
@ -77,18 +78,24 @@ def install_environment(
os.mkdir(directory) os.mkdir(directory)
def get_docker_user() -> Tuple[str, ...]: # pragma: win32 no cover @functools.lru_cache(maxsize=1)
output = subprocess.check_output( def docker_is_rootless() -> bool:
returncode, stdout, stderr = cmd_output(
('docker', 'system', 'info'), ('docker', 'system', 'info'),
text=True,
) )
for line in output.splitlines(): for line in stdout.splitlines():
# rootless docker has "rootless" # rootless docker has "rootless"
# rootless podman has "rootless: true" # rootless podman has "rootless: true"
if line.strip().startswith('rootless'): if line.strip().startswith('rootless'):
if 'false' not in line: if 'false' not in line:
return () # no -u for rootless return True
break break
return False
def get_docker_user() -> Tuple[str, ...]: # pragma: win32 no cover
if: docker_is_rootless():
return ()
try: try:
return ('-u', f'{os.getuid()}:{os.getgid()}') return ('-u', f'{os.getuid()}:{os.getgid()}')
except AttributeError: except AttributeError: