diff --git a/ugit/cli.py b/ugit/cli.py index 8f7817b..5c6bd3c 100644 --- a/ugit/cli.py +++ b/ugit/cli.py @@ -18,9 +18,18 @@ def parse_args(): init_parser = commands.add_parser("init") init_parser.set_defaults(func=init) + hash_object_parser = commands.add_parser("hash-object") + hash_object_parser.set_defaults(func=hash_object) + hash_object_parser.add_argument("file") + return parser.parse_args() def init(args): data.init() print(f"Initialized empty ugit repository in {Path.cwd()}/{data.GIT_DIR}") + + +def hash_object(args): + with open(args.file, "rb") as f: + print(data.hash_object(f.read())) diff --git a/ugit/data.py b/ugit/data.py index 6e6d553..684f1a2 100644 --- a/ugit/data.py +++ b/ugit/data.py @@ -1,7 +1,17 @@ from pathlib import Path +import hashlib + GIT_DIR = ".ugit" def init(): Path.mkdir(GIT_DIR) + Path.mkdir(f"{GIT_DIR}/objects") + + +def hash_object(data): + oid = hashlib.sha1(data).hexdigest() + with open(f"{GIT_DIR}/objects/{oid}", "wb") as out: + out.write(data) + return oid