Source code for fury.pkg_info
from __future__ import annotations
from subprocess import run
from packaging.version import Version
from fury.decorators import warn_on_args_to_kwargs
try:
from ._version import __version__
except ImportError:
__version__ = "0+unknown"
COMMIT_HASH = "$Format:%h$"
[docs]
@warn_on_args_to_kwargs()
def pkg_commit_hash(pkg_path: str | None = None) -> tuple[str, str]:
"""Get short form of commit hash
In this file is a variable called COMMIT_HASH. This contains a substitution
pattern that may have been filled by the execution of ``git archive``.
We get the commit hash from (in order of preference):
* A substituted value in ``archive_subst_hash``
* A truncated commit hash value that is part of the local portion of the
version
* git's output, if we are in a git repository
If all these fail, we return a not-found placeholder tuple
Parameters
----------
pkg_path : str
directory containing package
Returns
-------
hash_from : str
Where we got the hash from - description
hash_str : str
short form of hash
"""
if not COMMIT_HASH.startswith("$Format"): # it has been substituted
return "archive substitution", COMMIT_HASH
ver = Version(__version__)
if ver.local is not None and ver.local.startswith("g"):
return "installation", ver.local[1:8]
# maybe we are in a repository
proc = run(
("git", "rev-parse", "--short", "HEAD"),
capture_output=True,
cwd=pkg_path,
)
if proc.stdout:
return "repository", proc.stdout.decode().strip()
return "(none found)", "<not found>"