jmou/zit
git clone https://github.com/jmou/zit.git
git clone git@github.com:jmou/zit.git
Loading…
(top)/read-tree
language: Python
681 Bytes / 25 lines / 21 loc
History
View raw
#!/usr/bin/python

# read-tree.c:unpack_trees_rec
import struct
import subprocess
import sys

import index

def unpack_trees(tree_sha1, base):
    tree = subprocess.check_output(['cat-file', 'tree', tree_sha1])
    entries = []
    while tree:
        header, rest = tree.split('\0', 1)
        mode, filename = header.split(' ', 1)
        rawsha1 = rest[:20]
        tree = rest[20:]
        if mode == '40000': # for directories
            entries += unpack_trees(rawsha1.encode('hex'), filename + '/')
        else:
            entries.append((base + filename, int(mode, 8), rawsha1))
    return entries

_, tree_sha1 = sys.argv
index.write_index(unpack_trees(tree_sha1, ''))