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
}
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')
|