DIY_GIT_in_Python/ugit/cli.py

88 lines
2.0 KiB
Python
Raw Normal View History

2024-02-14 20:24:33 +01:00
import argparse
import sys
2024-03-20 19:43:58 +01:00
import textwrap
from pathlib import Path
2024-02-14 20:24:33 +01:00
2024-02-21 20:46:59 +01:00
from . import base
2024-02-10 19:09:11 +01:00
from . import data
2024-02-10 18:56:22 +01:00
2024-02-10 18:35:25 +01:00
def main():
2024-02-10 18:56:22 +01:00
args = parse_args()
args.func(args)
def parse_args():
parser = argparse.ArgumentParser()
commands = parser.add_subparsers(dest="command")
commands.required = True
init_parser = commands.add_parser("init")
init_parser.set_defaults(func=init)
2024-03-02 16:18:48 +01:00
hash_object_parser = commands.add_parser("hash-object")
hash_object_parser.set_defaults(func=hash_object)
hash_object_parser.add_argument("file")
2024-02-14 20:24:33 +01:00
cat_file_parser = commands.add_parser("cat-file")
cat_file_parser.set_defaults(func=cat_file)
cat_file_parser.add_argument("object")
2024-02-26 18:59:58 +01:00
write_tree_parser = commands.add_parser("write-tree")
write_tree_parser.set_defaults(func=write_tree)
2024-03-02 16:18:48 +01:00
read_tree_parser = commands.add_parser("read-tree")
read_tree_parser.set_defaults(func=read_tree)
read_tree_parser.add_argument("tree")
2024-02-12 19:35:14 +01:00
2024-03-11 19:29:15 +01:00
commit_parser = commands.add_parser("commit")
commit_parser.set_defaults(func=commit)
commit_parser.add_argument("-m", "--message", required=True)
2024-03-20 19:43:58 +01:00
log_parser = commands.add_parser("log")
log_parser.set_defaults(func=log)
2024-03-29 18:10:35 +01:00
log_parser.add_argument("oid", nargs="?")
2024-03-20 19:43:58 +01:00
2024-02-10 18:56:22 +01:00
return parser.parse_args()
def init(args):
2024-02-10 19:09:11 +01:00
data.init()
print(f"Initialized empty ugit repository in {Path.cwd()}/{data.GIT_DIR}")
2024-02-12 19:35:14 +01:00
def hash_object(args):
with open(args.file, "rb") as f:
print(data.hash_object(f.read()))
2024-02-14 20:24:33 +01:00
def cat_file(args):
sys.stdout.flush()
2024-02-15 20:20:00 +01:00
sys.stdout.buffer.write(data.get_object(args.object), expected=None)
2024-02-26 18:59:58 +01:00
def write_tree(args):
2024-03-02 16:02:42 +01:00
print(base.write_tree())
2024-03-02 16:18:48 +01:00
def read_tree(args):
base.read_tree(args.tree)
2024-03-11 19:29:15 +01:00
def commit(args):
print(base.commit(args.message))
2024-03-20 19:43:58 +01:00
def log(args):
2024-03-29 18:10:35 +01:00
oid = args.oid or data.get_HEAD()
2024-03-20 19:43:58 +01:00
while oid:
commit = base.get_commit(oid)
print(f"commit {oid}\n")
print(textwrap.indent(commit.message, " "))
print("")
oid = commit.parent