Update object_find to accept more object spec types

This commit is contained in:
Nathan McRae 2024-07-07 12:07:24 -07:00
parent cd2aca3ca5
commit 9365c473fd

View File

@ -284,7 +284,34 @@ def cat_file(repo, obj, fmt=None):
sys.stdout.buffer.write(obj.serialize()) sys.stdout.buffer.write(obj.serialize())
def object_find(repo, name, fmt=None, follow=True): def object_find(repo, name, fmt=None, follow=True):
return name sha = object_resolve(repo, name)
if not sha:
raise Exception(f"No such reference {name}")
if len(sha) > 1:
raise Exception(f"Ambiguous reference {0}: Candidates are:\n - {1}.".format(name, "\n - ".join(sha)))
sha = sha[0]
if not fmt:
return sha
while True:
obj = object_read(repo, sha)
if obj.fmt == fmt:
return sha
if not follow:
return None
if obj.fmt == b'tag':
sha = obj.kvlm[b'object'].decode("ascii")
elif obj.fmt == b'commit' and fmt == b'tree':
sha = obj.kvlm[b'tree'].decode("ascii")
else:
return None
argsp = argsubparsers.add_parser( argsp = argsubparsers.add_parser(
"hash-object", "hash-object",