summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--g2h/cli.py9
-rw-r--r--g2h/gen.py22
-rw-r--r--g2h/git.py11
-rw-r--r--requirements.txt1
-rw-r--r--templates/overview.md7
-rw-r--r--test_repo/.gitignore1
-rw-r--r--test_repo/git.tgzbin16070 -> 16086 bytes
7 files changed, 48 insertions, 3 deletions
diff --git a/g2h/cli.py b/g2h/cli.py
index e7c66fc..1979045 100644
--- a/g2h/cli.py
+++ b/g2h/cli.py
@@ -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
index eff0b2c..45ea338 100644
--- a/test_repo/git.tgz
+++ b/test_repo/git.tgz
Binary files differ