2025-12-08 18:11:39 +01:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
Helpers to generate changelog information from Git history.
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
from typing import Optional
|
|
|
|
|
|
2025-12-16 09:41:35 +01:00
|
|
|
from pkgmgr.core.git.queries import (
|
|
|
|
|
get_changelog,
|
|
|
|
|
GitChangelogQueryError,
|
|
|
|
|
)
|
2025-12-08 18:11:39 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def generate_changelog(
|
|
|
|
|
cwd: str,
|
|
|
|
|
from_ref: Optional[str] = None,
|
|
|
|
|
to_ref: Optional[str] = None,
|
|
|
|
|
include_merges: bool = False,
|
|
|
|
|
) -> str:
|
|
|
|
|
"""
|
|
|
|
|
Generate a plain-text changelog between two Git refs.
|
|
|
|
|
|
2025-12-16 09:41:35 +01:00
|
|
|
Returns a human-readable message instead of raising.
|
2025-12-08 18:11:39 +01:00
|
|
|
"""
|
|
|
|
|
if to_ref is None:
|
|
|
|
|
to_ref = "HEAD"
|
|
|
|
|
|
2025-12-16 09:41:35 +01:00
|
|
|
rev_range = f"{from_ref}..{to_ref}" if from_ref else to_ref
|
2025-12-08 18:11:39 +01:00
|
|
|
try:
|
2025-12-16 09:41:35 +01:00
|
|
|
output = get_changelog(
|
|
|
|
|
cwd=cwd,
|
|
|
|
|
from_ref=from_ref,
|
|
|
|
|
to_ref=to_ref,
|
|
|
|
|
include_merges=include_merges,
|
|
|
|
|
)
|
|
|
|
|
except GitChangelogQueryError as exc:
|
2025-12-08 18:11:39 +01:00
|
|
|
return (
|
|
|
|
|
f"[ERROR] Failed to generate changelog in {cwd!r} "
|
|
|
|
|
f"for range {rev_range!r}:\n{exc}"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if not output.strip():
|
|
|
|
|
return f"[INFO] No commits found for range {rev_range!r}."
|
|
|
|
|
|
|
|
|
|
return output.strip()
|