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
|
|
|
|
|
2024-04-20 21:38:04 +02:00
|
|
|
oid = base.get_oid
|
|
|
|
|
2024-02-10 18:56:22 +01:00
|
|
|
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)
|
2024-04-20 21:38:04 +02:00
|
|
|
cat_file_parser.add_argument("object", type=oid)
|
2024-02-14 20:24:33 +01:00
|
|
|
|
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)
|
2024-04-20 21:38:04 +02:00
|
|
|
read_tree_parser.add_argument("tree", type=oid)
|
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-05-05 21:04:28 +02:00
|
|
|
log_parser.add_argument("oid", default="@", type=oid, nargs="?")
|
2024-03-20 19:43:58 +01:00
|
|
|
|
2024-03-29 18:27:10 +01:00
|
|
|
checkout_parser = commands.add_parser("checkout")
|
|
|
|
checkout_parser.set_defaults(func=checkout)
|
2024-04-20 21:38:04 +02:00
|
|
|
checkout_parser.add_argument("oid", type=oid)
|
2024-03-29 18:27:10 +01:00
|
|
|
|
2024-04-03 19:47:53 +02:00
|
|
|
tag_parser = commands.add_parser("tag")
|
|
|
|
tag_parser.set_defaults(func=tag)
|
|
|
|
tag_parser.add_argument("name")
|
2024-05-05 21:04:28 +02:00
|
|
|
tag_parser.add_argument("oid", default="@", type=oid, nargs="?")
|
2024-04-03 19:47:53 +02: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-05-05 21:04:28 +02:00
|
|
|
oid = args.oid
|
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
|
2024-03-29 18:27:10 +01:00
|
|
|
|
|
|
|
|
|
|
|
def checkout(args):
|
|
|
|
base.checkout(args.oid)
|
2024-04-03 19:47:53 +02:00
|
|
|
|
|
|
|
|
|
|
|
def tag(args):
|
2024-05-05 21:04:28 +02:00
|
|
|
base.create_tag(args.name, args.oid)
|