jmou/zit
git clone https://github.com/jmou/zit.git
git clone git@github.com:jmou/zit.git
Loading…
(top)/write-tree
language: Python
930 Bytes / 33 lines / 27 loc
History
View raw
#!/usr/bin/python

# write-tree.c
import subprocess

import index

def write_tree(entries, base):
    i = 0
    buf = ''
    while i < len(entries):
        filename, mode, rawsha1 = entries[i]

        # for directories
        if not filename.startswith(base):
            break
        filename = filename[len(base):]
        if '/' in filename:
            filename = filename.split('/', 1)[0]
            num_written, sha1 = write_tree(entries[i:], base + filename + '/')
            i += num_written
            i -= 1 # write the directory entry, but don't count it
            mode = 040000
            rawsha1 = bytearray.fromhex(sha1)

        buf += '{:o} {}\0{}'.format(mode, filename, rawsha1)
        i += 1
    with open('.zit/tree.tmp', 'w') as f:
        f.write(buf)
    return i, subprocess.check_output(['hash-object', 'tree', '.zit/tree.tmp']).strip()

_, sha1 = write_tree(index.read_index(), '')
print sha1