From 8d97fcd1d2cd21b2f1358f785a3aa5676577e4de Mon Sep 17 00:00:00 2001 From: Joe Mou Date: Thu, 18 Apr 2019 16:55:59 -0400 Subject: [PATCH] read-tree --- read-tree | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100755 read-tree diff --git a/read-tree b/read-tree new file mode 100755 index 0000000..5a5b228 --- /dev/null +++ b/read-tree @@ -0,0 +1,31 @@ +#!/usr/bin/python + +# read-tree.c:unpack_trees_rec +import struct +import subprocess +import sys + +_, tree_sha1 = sys.argv +tree = subprocess.check_output(['./cat-file', 'tree', tree_sha1]) +entries = [] +while tree: + header, rest = tree.split('\0', 1) + flags, filename = header.split(' ', 1) + rawsha1 = rest[:20] + tree = rest[20:] + # TODO handle directories + if flags != '040000': + entries.append((flags, filename, rawsha1)) + +# TODO dedup with add. this handles flags +f = open('.zit/index', 'w') +f.write('DIRC') +f.write(struct.pack('>II', 2, len(entries))) +for flags, filename, rawsha1 in entries: + f.write('\0' * 24) + f.write(struct.pack('>I', int(flags, 8))) + f.write('\0' * 12) + f.write(rawsha1) + f.write(struct.pack('>H', len(filename))) + f.write(filename) + f.write('\0' * (8 - (len(filename) + 6) % 8))