57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
from abc import ABC, abstractmethod, abstractclassmethod
|
|
import argparse
|
|
import os
|
|
|
|
import git
|
|
|
|
|
|
class CliCommand(ABC):
|
|
@abstractclassmethod
|
|
def setup_arguments(self, parser: argparse.ArgumentParser) -> None:
|
|
raise NotImplementedError
|
|
|
|
@abstractmethod
|
|
def execute(self, parser: argparse.ArgumentParser) -> None:
|
|
raise NotImplementedError
|
|
|
|
|
|
class CommitCommand(CliCommand):
|
|
cmd = "commit"
|
|
help = "Commit all changes to the wiki repository."
|
|
|
|
@classmethod
|
|
def setup_arguments(self, parser: argparse.ArgumentParser) -> None:
|
|
parser.add_argument(
|
|
"-m", "--message",
|
|
metavar="MSG",
|
|
help="Commit message to use.",
|
|
default="daily checkpoint"
|
|
)
|
|
parser.add_argument(
|
|
"-l", "--local",
|
|
help="Don't push the results to any configured remote repository.",
|
|
action="store_true"
|
|
)
|
|
|
|
def execute(self, args: argparse.Namespace) -> None:
|
|
git.exec("add", "-A")
|
|
git.exec("commit", "-m", args.message)
|
|
if not args.local:
|
|
git.exec("push", "backup")
|
|
|
|
|
|
import config
|
|
|
|
os.chdir("zk-wiki")
|
|
# TODO: confirm we're in the right directory
|
|
|
|
parser = argparse.ArgumentParser()
|
|
subparsers = parser.add_subparsers()
|
|
for command in CliCommand.__subclasses__():
|
|
subparser = subparsers.add_parser(command.cmd, help=command.help)
|
|
subparser.set_defaults(_cls=command)
|
|
command.setup_arguments(subparser)
|
|
|
|
args = parser.parse_args()
|
|
args._cls().execute(args)
|