summaryrefslogtreecommitdiffstats
path: root/g2h/gen.py
blob: 9591d8734ae20185c73b136e44f3f737f597c78f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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
        template_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'templates'))
        self.templates = Environment(loader=FileSystemLoader(template_dir))

    def _render(self, template, context, out_path):
        template = self.templates.get_template(template)
        content = template.render(context)
        out_file = os.path.join(self.output_dir, out_path)
        os.makedirs(os.path.dirname(out_file), exist_ok=True)
        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 + ': Log'
        }
        self._render('log.md', context, 'l.md')

    def render_overview(self, name, branches, tags):
        context = {
            'branches': branches,
            'tags': tags,
            'title': name
        }
        self._render('overview.md', context, '_index.md')