rlsbl.commands.unreleased

Unreleased command: list commits since last tag and check changelog coverage.

Functions

_get_last_tag

def _get_last_tag()

Get the most recent tag. Returns None if no tags exist.

_get_commits_since

def _get_commits_since(tag)

Get commits since the given tag (or all commits if tag is None).

Returns a list of dicts with keys: hash, subject, author, date. Uses NUL as field separator for safe parsing.

_get_unreleased_changelog_text

def _get_unreleased_changelog_text(changelog_path)

Extract changelog text that covers unreleased changes.

Looks for an "## Unreleased" section first, then falls back to the first section in the file (the one above the last released version). Returns the text content or empty string if nothing found.

_extract_keywords

def _extract_keywords(subject)

Extract significant keywords from a commit subject for matching.

Strips conventional-commit prefixes (fix:, feat:, etc.) and common noise words, returns lowercase keywords of length >= 3.

_is_covered

def _is_covered(subject, changelog_text)

Check if a commit subject is covered by changelog text.

Uses keyword matching: if any significant keyword from the subject appears in the changelog text, we consider it covered.

run_cmd

def run_cmd(registry, args, flags)

List unreleased commits and their changelog coverage.

Usage: rlsbl unreleased [--json]