diff options
Diffstat (limited to 'g2h')
| -rw-r--r-- | g2h/cli.py | 9 | ||||
| -rw-r--r-- | g2h/gen.py | 22 | ||||
| -rw-r--r-- | g2h/git.py | 11 |
3 files changed, 40 insertions, 2 deletions
@@ -1,16 +1,21 @@ import argparse +from .git import Git +from .gen import Generator def parse_args(): parser = argparse.ArgumentParser( prog='g2h', description='Convert a git repository into markdown files Hugo can understand.') - parser.add_argument('repo-path', help='Path to the root of git repository') - parser.add_argument('out-dir', help='Path to where the generated files should be stored') + parser.add_argument('repo_path', help='Path to the root of git repository') + parser.add_argument('out_dir', help='Path to where the generated files should be stored') return parser.parse_args() def main(): args = parse_args() + git = Git(args.repo_path) + gen = Generator(args.out_dir) + gen.render_overview(git.get_all_commits()) if __name__ == '__main__': main() diff --git a/g2h/gen.py b/g2h/gen.py new file mode 100644 index 0000000..4884072 --- /dev/null +++ b/g2h/gen.py @@ -0,0 +1,22 @@ +from jinja2 import Environment, FileSystemLoader +import os + +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_overview(self, commits): + context = { + 'commits': commits + } + self._render('overview.md', context, '_index.md') diff --git a/g2h/git.py b/g2h/git.py new file mode 100644 index 0000000..e6984c4 --- /dev/null +++ b/g2h/git.py @@ -0,0 +1,11 @@ +import git + +class Git: + def __init__(self, repo_path): + try: + self.repo = git.Repo(repo_path) + except git.InvalidGitRepositoryError: + raise ValueError(f"Invalid git repository at {repo_path}") + + def get_all_commits(self): + return list(self.repo.iter_commits()) |