diff options
| -rw-r--r-- | g2h/cli.py | 9 | ||||
| -rw-r--r-- | g2h/gen.py | 22 | ||||
| -rw-r--r-- | g2h/git.py | 11 | ||||
| -rw-r--r-- | requirements.txt | 1 | ||||
| -rw-r--r-- | templates/overview.md | 7 | ||||
| -rw-r--r-- | test_repo/.gitignore | 1 | ||||
| -rw-r--r-- | test_repo/git.tgz | bin | 16070 -> 16086 bytes |
7 files changed, 48 insertions, 3 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()) diff --git a/requirements.txt b/requirements.txt index f7c9608..a04e815 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ +GitPython==3.1.45 Jinja2==3.1.6 diff --git a/templates/overview.md b/templates/overview.md new file mode 100644 index 0000000..ce3e055 --- /dev/null +++ b/templates/overview.md @@ -0,0 +1,7 @@ +--- +title: Overview +--- + +# Overview + +{{ commits }} diff --git a/test_repo/.gitignore b/test_repo/.gitignore deleted file mode 100644 index bcbb3fd..0000000 --- a/test_repo/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/git.tgz diff --git a/test_repo/git.tgz b/test_repo/git.tgz Binary files differindex eff0b2c..45ea338 100644 --- a/test_repo/git.tgz +++ b/test_repo/git.tgz |