32 lines
893 B
Python
32 lines
893 B
Python
"""
|
|
Git command execution utility.
|
|
|
|
Single source of truth for running git commands across all Trellis scripts.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
|
|
def run_git(args: list[str], cwd: Path | None = None) -> tuple[int, str, str]:
|
|
"""Run a git command and return (returncode, stdout, stderr).
|
|
|
|
Uses UTF-8 encoding with -c i18n.logOutputEncoding=UTF-8 to ensure
|
|
consistent output across all platforms (Windows, macOS, Linux).
|
|
"""
|
|
try:
|
|
git_args = ["git", "-c", "i18n.logOutputEncoding=UTF-8"] + args
|
|
result = subprocess.run(
|
|
git_args,
|
|
cwd=cwd,
|
|
capture_output=True,
|
|
text=True,
|
|
encoding="utf-8",
|
|
errors="replace",
|
|
)
|
|
return result.returncode, result.stdout, result.stderr
|
|
except Exception as e:
|
|
return 1, "", str(e)
|