28 lines
840 B
Python
28 lines
840 B
Python
|
import git
|
||
|
from PyTeX.format.repo_status_info import RepoStatusInfo
|
||
|
from .recent import get_latest_commit
|
||
|
from pathlib import Path
|
||
|
|
||
|
|
||
|
def get_repo_status_info_from_file(file: Path) -> RepoStatusInfo:
|
||
|
try:
|
||
|
repo = git.Repo(file, search_parent_directories=True)
|
||
|
except git.InvalidGitRepositoryError:
|
||
|
return RepoStatusInfo()
|
||
|
return get_repo_status_info(repo)
|
||
|
|
||
|
|
||
|
def get_repo_status_info(repo: git.Repo) -> RepoStatusInfo:
|
||
|
info = RepoStatusInfo()
|
||
|
try:
|
||
|
info.branch = repo.active_branch
|
||
|
except TypeError: # No branch available
|
||
|
pass
|
||
|
try:
|
||
|
info.version = repo.git.describe()
|
||
|
except git.GitCommandError: # No tags available to describe commit
|
||
|
pass
|
||
|
info.commit_hash = get_latest_commit(repo).hexsha
|
||
|
info.dirty = repo.is_dirty(untracked_files=True)
|
||
|
return info
|