summaryrefslogtreecommitdiffstats
path: root/src/g2h/cli.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/g2h/cli.py')
-rw-r--r--src/g2h/cli.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/g2h/cli.py b/src/g2h/cli.py
new file mode 100644
index 0000000..9eb869c
--- /dev/null
+++ b/src/g2h/cli.py
@@ -0,0 +1,42 @@
+import argparse
+import os
+
+from .git import Git
+from .page_factory import PageFactory
+
+def parse_args():
+ parser = argparse.ArgumentParser(
+ prog='g2h',
+ description='Convert a git repository into markdown files Hugo can understand.')
+ # TODO: Defaults for these two values should be $PWD.
+ parser.add_argument('--repo', help='Path to the root of git repository', default=os.getcwd())
+ parser.add_argument('--out', help='Path to where the generated files should be stored', default=os.getcwd())
+ parser.add_argument('--name', help='Name of the project. Default: directory name of repo')
+ parser.add_argument('--content-subdir', help='Subdir(s) where the page will be served from. Default: None', default='')
+
+ return parser.parse_args()
+
+def main():
+ args = parse_args()
+ git = Git(args.repo)
+
+ branches = sorted(git.get_branches(), key=lambda b: b.commit.committed_date, reverse=True)
+ commits = git.get_commits()
+ head = git.get_head()
+ # TODO: Fix this for repo=(.|~)
+ project_name = args.name if args.name is not None else os.path.basename(args.repo)
+ tags = sorted(git.get_tags(), key=lambda t: t.commit.committed_date, reverse=True)
+
+ factory = PageFactory(args.out, project_name, args.content_subdir)
+ factory.new_overview(branches, tags, head).render()
+ factory.new_log(commits, branches, tags, head).render()
+ for commit in commits:
+ factory.new_commit(commit).render()
+ tree = factory.new_tree(commit, '', git.get_repo())
+ for tree_page in tree.build_pages(factory):
+ tree_page.render()
+ for file in tree_page.get_files():
+ factory.new_file(commit, file).render()
+
+if __name__ == '__main__':
+ main()