Add types to objects

This commit is contained in:
David Doblas Jiménez 2024-02-15 20:20:00 +01:00
parent 36f6f88990
commit 2556bde16f
2 changed files with 14 additions and 6 deletions

View File

@ -43,4 +43,4 @@ def hash_object(args):
def cat_file(args):
sys.stdout.flush()
sys.stdout.buffer.write(data.get_object(args.object))
sys.stdout.buffer.write(data.get_object(args.object), expected=None)

View File

@ -10,13 +10,21 @@ def init():
Path.mkdir(f"{GIT_DIR}/objects")
def hash_object(data):
oid = hashlib.sha1(data).hexdigest()
def hash_object(data, type_="blob"):
obj = type_.encode() + b"\x00" + data
oid = hashlib.sha1(obj).hexdigest()
with open(f"{GIT_DIR}/objects/{oid}", "wb") as out:
out.write(data)
out.write(obj)
return oid
def get_object(oid):
def get_object(oid, expected="blob"):
with open(f"{GIT_DIR}/objects/{oid}", "rb") as f:
return f.read()
obj = f.read()
type_, _, content = obj.partition(b"\x00")
type_ = type_.decode()
if expected is not None:
assert type_ == expected, f"Expected {expected}, got {type_}"
return content