| 12345678910111213141516171819202122232425262728293031323334 |
- """Git utilities."""
- # Used also from setup.py, so don't pull in anything additional here (like mypy or typing):
- from __future__ import annotations
- import os
- import subprocess
- def is_git_repo(dir: str) -> bool:
- """Is the given directory version-controlled with git?"""
- return os.path.exists(os.path.join(dir, ".git"))
- def have_git() -> bool:
- """Can we run the git executable?"""
- try:
- subprocess.check_output(["git", "--help"])
- return True
- except subprocess.CalledProcessError:
- return False
- except OSError:
- return False
- def git_revision(dir: str) -> bytes:
- """Get the SHA-1 of the HEAD of a git repository."""
- return subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=dir).strip()
- def is_dirty(dir: str) -> bool:
- """Check whether a git repository has uncommitted changes."""
- output = subprocess.check_output(["git", "status", "-uno", "--porcelain"], cwd=dir)
- return output.strip() != b""
|