diff --git a/dennogumi_new_post.py b/dennogumi_new_post.py index b175575..02a40e3 100755 --- a/dennogumi_new_post.py +++ b/dennogumi_new_post.py @@ -8,6 +8,7 @@ from pathlib import Path from typing import List import frontmatter +from git import Repo import sarge from slugify import slugify @@ -23,16 +24,26 @@ def new_post_title(title: str) -> str: return post_title +def commit_initial_post(post_title, post_filename): + repo = Repo("./") + repo.index.add([str(post_filename)]) + template = f"New post: {post_title}" + repo.index.commit(template) + + def create_post(post_title: str, tags: List[str] = None, - categories: List[str] = None, comments: bool = True) -> bool: - cmd = ["hugo", "new", "-k", "post"] + categories: List[str] = None, + comments: bool = True, + draft: bool = True) -> Path or None: + cmd = ["hugo", "new", "-k", "posts"] title = new_post_title(post_title) path = Path(POST_PATH) / title cmd.append(str(path)) pid = sarge.run(cmd) + if pid.returncode != 0: - return False + return header = frontmatter.load(path) @@ -41,12 +52,15 @@ def create_post(post_title: str, tags: List[str] = None, if tags is not None: header["tags"] = tags + header["draft"] = draft header["comments"] = comments + header["title"] = post_title - with path.open("w") as handle: - frontmatter.dump(header, handle) + frontmatter.dump(header, path) - return True + print(f"{path} created.") + + return path def main(): @@ -59,12 +73,19 @@ def main(): parser.add_argument("--disable_comments", action="store_false", help="Disable comments for the post") parser.add_argument("--commit", action="store_true", - help="Commit and push to the remote repository") + help="Commit to the repository") parser.add_argument("--draft", action="store_true", help="Create the post as draft") parser.add_argument("title", help="Title of the new post") - pass + options = parser.parse_args() + + post_path = create_post(options.title, options.tags, + options.categories, + comments=options.disable_comments) + + if post_path is not None and options.commit: + commit_initial_post(options.title, post_path) if __name__ == "__main__":