utils: report additional git repo data
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
parent
c609060352
commit
cd4fdfb7b6
|
@ -21,7 +21,7 @@ from . import confighelper
|
||||||
from .eventloop import EventLoop
|
from .eventloop import EventLoop
|
||||||
from .app import MoonrakerApp
|
from .app import MoonrakerApp
|
||||||
from .klippy_connection import KlippyConnection
|
from .klippy_connection import KlippyConnection
|
||||||
from .utils import ServerError, Sentinel, get_software_version
|
from .utils import ServerError, Sentinel, get_software_info
|
||||||
from .loghelper import LogManager
|
from .loghelper import LogManager
|
||||||
|
|
||||||
# Annotation imports
|
# Annotation imports
|
||||||
|
@ -526,7 +526,7 @@ def main(from_package: bool = True) -> None:
|
||||||
}
|
}
|
||||||
|
|
||||||
# Setup Logging
|
# Setup Logging
|
||||||
version = get_software_version()
|
app_args.update(get_software_info())
|
||||||
if cmd_line_args.nologfile:
|
if cmd_line_args.nologfile:
|
||||||
app_args["log_file"] = ""
|
app_args["log_file"] = ""
|
||||||
elif cmd_line_args.logfile:
|
elif cmd_line_args.logfile:
|
||||||
|
@ -534,7 +534,6 @@ def main(from_package: bool = True) -> None:
|
||||||
os.path.expanduser(cmd_line_args.logfile))
|
os.path.expanduser(cmd_line_args.logfile))
|
||||||
else:
|
else:
|
||||||
app_args["log_file"] = str(data_path.joinpath("logs/moonraker.log"))
|
app_args["log_file"] = str(data_path.joinpath("logs/moonraker.log"))
|
||||||
app_args["software_version"] = version
|
|
||||||
app_args["python_version"] = sys.version.replace("\n", " ")
|
app_args["python_version"] = sys.version.replace("\n", " ")
|
||||||
log_manager = LogManager(app_args, startup_warnings)
|
log_manager = LogManager(app_args, startup_warnings)
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ from typing import (
|
||||||
TYPE_CHECKING,
|
TYPE_CHECKING,
|
||||||
List,
|
List,
|
||||||
Optional,
|
Optional,
|
||||||
ClassVar,
|
Any,
|
||||||
Tuple,
|
Tuple,
|
||||||
Dict,
|
Dict,
|
||||||
Union
|
Union
|
||||||
|
@ -57,7 +57,9 @@ def _run_git_command(cmd: str) -> str:
|
||||||
retcode = process.wait()
|
retcode = process.wait()
|
||||||
if retcode == 0:
|
if retcode == 0:
|
||||||
return ret.strip().decode()
|
return ret.strip().decode()
|
||||||
raise Exception(f"Failed to run git command: {cmd}")
|
raise Exception(
|
||||||
|
f"Failed to run git command '{cmd}': {err.decode(errors='ignore')}"
|
||||||
|
)
|
||||||
|
|
||||||
def _retrieve_git_tag(source_path: str) -> str:
|
def _retrieve_git_tag(source_path: str) -> str:
|
||||||
cmd = f"git -C {source_path} rev-list --tags --max-count=1"
|
cmd = f"git -C {source_path} rev-list --tags --max-count=1"
|
||||||
|
@ -82,24 +84,72 @@ def retrieve_git_version(source_path: str) -> str:
|
||||||
tag = _retrieve_git_tag(source_path)
|
tag = _retrieve_git_tag(source_path)
|
||||||
return f"t{tag}-g{ver}-shallow"
|
return f"t{tag}-g{ver}-shallow"
|
||||||
|
|
||||||
def get_software_version() -> str:
|
def get_repo_info(source_path: str) -> Dict[str, Any]:
|
||||||
|
repo_info: Dict[str, Any] = {
|
||||||
|
"software_version": "?",
|
||||||
|
"git_branch": "?",
|
||||||
|
"git_remote": "?",
|
||||||
|
"git_repo_url": "?",
|
||||||
|
"modified_files": [],
|
||||||
|
"unofficial_components": []
|
||||||
|
}
|
||||||
|
try:
|
||||||
|
repo_info["software_version"] = retrieve_git_version(source_path)
|
||||||
|
cmd = f"git -C {source_path} branch --no-color"
|
||||||
|
branch_list = _run_git_command(cmd)
|
||||||
|
for line in branch_list.split("\n"):
|
||||||
|
if line[0] == "*":
|
||||||
|
repo_info["git_branch"] = line[1:].strip()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
return repo_info
|
||||||
|
if repo_info["git_branch"].startswith("(HEAD detached"):
|
||||||
|
parts = repo_info["git_branch"] .strip("()").split()[-1]
|
||||||
|
remote, _, _ = parts.partition("/")
|
||||||
|
if not remote:
|
||||||
|
return repo_info
|
||||||
|
repo_info["git_remote"] = remote
|
||||||
|
else:
|
||||||
|
branch = repo_info["git_branch"]
|
||||||
|
cmd = f"git -C {source_path} config --get branch.{branch}.remote"
|
||||||
|
repo_info["git_remote"] = _run_git_command(cmd)
|
||||||
|
cmd = f"git -C {source_path} remote get-url {repo_info['git_remote']}"
|
||||||
|
repo_info["git_repo_url"] = _run_git_command(cmd)
|
||||||
|
cmd = f"git -C {source_path} status --porcelain --ignored"
|
||||||
|
status = _run_git_command(cmd)
|
||||||
|
for line in status.split("\n"):
|
||||||
|
parts = line.strip().split(maxsplit=1)
|
||||||
|
if len(parts) != 2:
|
||||||
|
continue
|
||||||
|
if parts[0] == "M":
|
||||||
|
repo_info["modified_files"].append(parts[1])
|
||||||
|
elif (
|
||||||
|
parts[0] in ("??", "!!")
|
||||||
|
and parts[1].endswith(".py")
|
||||||
|
and parts[1].startswith("components")
|
||||||
|
):
|
||||||
|
comp = parts[1].split("/", maxsplit=1)[-1]
|
||||||
|
repo_info["unofficial_components"].append(comp)
|
||||||
|
except Exception:
|
||||||
|
logging.exception("Error Retreiving Git Repo Info")
|
||||||
|
return repo_info
|
||||||
|
|
||||||
|
def get_software_info() -> Dict[str, Any]:
|
||||||
|
src_path = source_info.source_path()
|
||||||
|
if source_info.is_git_repo():
|
||||||
|
return get_repo_info(str(src_path))
|
||||||
pkg_ver = source_info.package_version()
|
pkg_ver = source_info.package_version()
|
||||||
if pkg_ver is not None:
|
if pkg_ver is not None:
|
||||||
return pkg_ver
|
return {"software_version": pkg_ver}
|
||||||
version: str = "?"
|
version: str = "?"
|
||||||
src_path = source_info.source_path()
|
vfile = src_path.joinpath("moonraker/.version")
|
||||||
try:
|
if vfile.exists():
|
||||||
version = retrieve_git_version(str(src_path))
|
try:
|
||||||
except Exception:
|
version = vfile.read_text().strip()
|
||||||
vfile = src_path.joinpath("moonraker/.version")
|
except Exception:
|
||||||
if vfile.exists():
|
logging.exception("Unable to extract version from file")
|
||||||
try:
|
version = "?"
|
||||||
version = vfile.read_text().strip()
|
return {"software_version": version}
|
||||||
except Exception:
|
|
||||||
logging.exception("Unable to extract version from file")
|
|
||||||
version = "?"
|
|
||||||
return version
|
|
||||||
|
|
||||||
|
|
||||||
def hash_directory(
|
def hash_directory(
|
||||||
dir_path: Union[str, pathlib.Path],
|
dir_path: Union[str, pathlib.Path],
|
||||||
|
|
Loading…
Reference in New Issue