From 49fb19170a74accf51aa13ef0600a0d15f707737 Mon Sep 17 00:00:00 2001 From: Christoph Schlosser Date: Sun, 24 Aug 2025 14:08:47 +0200 Subject: g2h: Add log page --- g2h/cli.py | 2 ++ g2h/gen.py | 25 +++++++++++++++++++++++++ g2h/git.py | 6 +++--- 3 files changed, 30 insertions(+), 3 deletions(-) (limited to 'g2h') diff --git a/g2h/cli.py b/g2h/cli.py index 301203c..fc14582 100644 --- a/g2h/cli.py +++ b/g2h/cli.py @@ -20,12 +20,14 @@ def main(): git = Git(args.repo_path) branches = git.get_branches() + commits = git.get_commits() # TODO: Fix this for repo_path=(.|~) project_name = args.name if args.name is not None else os.path.basename(args.repo_path) tags = git.get_tags() gen = Generator(args.out_dir) gen.render_overview(project_name, branches, tags) + gen.render_log(project_name, commits, branches, tags) if __name__ == '__main__': main() diff --git a/g2h/gen.py b/g2h/gen.py index 02162e8..91fab82 100644 --- a/g2h/gen.py +++ b/g2h/gen.py @@ -1,6 +1,14 @@ from jinja2 import Environment, FileSystemLoader import os +def ref_names_for_commit(refs, commit_sha): + ref_names = [] + for ref in refs: + if ref.commit.hexsha == commit_sha: + ref_names.append(ref.name) + + return ref_names + class Generator: def __init__(self, output_dir): self.output_dir = output_dir @@ -15,6 +23,23 @@ class Generator: with open(out_file, 'w', encoding='utf-8') as f: f.write(content) + def render_log(self, name, commits, branches, tags): + commits_context = [] + for commit in commits: + refs = ref_names_for_commit(branches, commit.hexsha) + ref_names_for_commit(tags, commit.hexsha) + commit_context = { + 'committed_datetime': commit.committed_datetime, + 'refs': refs, + 'summary': commit.summary + } + commits_context.append(commit_context) + + context = { + 'commits': commits_context, + 'title': name + } + self._render('log.md', context, 'l.md') + def render_overview(self, name, branches, tags): context = { 'branches': branches, diff --git a/g2h/git.py b/g2h/git.py index 9f3bba8..f3f4809 100644 --- a/g2h/git.py +++ b/g2h/git.py @@ -7,11 +7,11 @@ class Git: except git.InvalidGitRepositoryError: raise ValueError(f"Invalid git repository at {repo_path}") - def get_all_commits(self): - return list(self.repo.iter_commits()) - def get_branches(self): return sorted(self.repo.branches, key=lambda b: b.commit.committed_date, reverse=True) + def get_commits(self): + return list(self.repo.iter_commits()) + def get_tags(self): return sorted(self.repo.tags, key=lambda b: b.commit.committed_date, reverse=True) -- cgit v1.2.3