diff options
author | paugier <pierre.augier@univ-grenoble-alpes.fr> | 2022-06-24 23:03:05 +0200 |
---|---|---|
committer | paugier <pierre.augier@univ-grenoble-alpes.fr> | 2022-06-24 23:03:05 +0200 |
commit | 8a63dde177eaeaaf2ce6a4b0f9b5c7afc4eb9d10 (patch) | |
tree | e9045171809cd5fddc4038a10b3d0a5c3cd9fa99 /src/setuptools_scm | |
parent | bfcd8e1ba700d6a94817470650d56cbe9e87e7ea (diff) | |
download | setuptools-scm-8a63dde177eaeaaf2ce6a4b0f9b5c7afc4eb9d10.tar.gz |
Improve debug logging (indent and commands can be copy/pasted)
Diffstat (limited to 'src/setuptools_scm')
-rw-r--r-- | src/setuptools_scm/hg_git.py | 8 | ||||
-rw-r--r-- | src/setuptools_scm/utils.py | 20 |
2 files changed, 17 insertions, 11 deletions
diff --git a/src/setuptools_scm/hg_git.py b/src/setuptools_scm/hg_git.py index 1b48462..bde71ec 100644 --- a/src/setuptools_scm/hg_git.py +++ b/src/setuptools_scm/hg_git.py @@ -29,18 +29,18 @@ class GitWorkdirHgClient(GitWorkdir, HgWorkdir): return cls(root) def is_dirty(self) -> bool: - out, _, _ = self.do_ex("hg id -T '{dirty}'") + out, _, _ = self.do_ex('hg id -T "{dirty}"') return bool(out) def get_branch(self) -> str | None: - res = self.do_ex("hg id -T {bookmarks}") + res = self.do_ex('hg id -T "{bookmarks}"') if res.returncode: trace("branch err", res) return None return res.out def get_head_date(self) -> date | None: - date_part, err, ret = self.do_ex("hg log -r . -T {shortdate(date)}") + date_part, err, ret = self.do_ex('hg log -r . -T "{shortdate(date)}"') if ret: trace("head date err", date_part, err, ret) return None @@ -53,7 +53,7 @@ class GitWorkdirHgClient(GitWorkdir, HgWorkdir): pass def get_hg_node(self) -> str | None: - node, _, ret = self.do_ex("hg log -r . -T {node}") + node, _, ret = self.do_ex('hg log -r . -T "{node}"') if not ret: return node else: diff --git a/src/setuptools_scm/utils.py b/src/setuptools_scm/utils.py index dc1e49b..7c690b8 100644 --- a/src/setuptools_scm/utils.py +++ b/src/setuptools_scm/utils.py @@ -8,6 +8,7 @@ import platform import shlex import subprocess import sys +import textwrap import warnings from types import CodeType from types import FunctionType @@ -72,8 +73,10 @@ def avoid_pip_isolation(env: Mapping[str, str]) -> dict[str, str]: return new_env -def trace(*k: object) -> None: +def trace(*k: object, indent: bool = False) -> None: if DEBUG: + if indent and len(k) > 1: + k = (k[0],) + tuple(textwrap.indent(str(s), " ") for s in k[1:]) print(*k, file=sys.stderr, flush=True) @@ -102,20 +105,23 @@ def _run(cmd: _t.CMD_TYPE, cwd: _t.PathT) -> subprocess.CompletedProcess[str]: def do_ex(cmd: _t.CMD_TYPE, cwd: _t.PathT = ".") -> _CmdResult: - if isinstance(cmd, list): - cmd_4_trace = " ".join(cmd) - else: + if not DEBUG or not isinstance(cmd, list): cmd_4_trace = cmd - trace("----\ncmd:", repr(cmd_4_trace)) + else: + # give better results than shlex.join in our cases + cmd_4_trace = " ".join( + [s if all(c not in s for c in " {[:") else f'"{s}"' for s in cmd] + ) + trace("----\ncmd:\n", cmd_4_trace, indent=True) trace(" in:", cwd) if os.name == "posix" and not isinstance(cmd, (list, tuple)): cmd = shlex.split(cmd) res = _run(cmd, cwd) if res.stdout: - trace("out:\n", res.stdout) + trace("out:\n", res.stdout, indent=True) if res.stderr: - trace("err:\n", res.stderr) + trace("err:\n", res.stderr, indent=True) if res.returncode: trace("ret:", res.returncode) return _CmdResult( |