(top)/checkout-index
language: Python
742 Bytes / 22 lines / 19 loc
#!/usr/bin/python
import os
import subprocess
import index
entries = index.read_index()
# entry.c:checkout_entry
for filename, mode, sha1 in entries:
assert not filename.startswith('/') # basic safety checks
assert '..' not in filename
subprocess.check_call(['mkdir', '-p', './' + os.path.dirname(filename)])
# TODO git 1.0 doesn't seem to unlink deleted files
subprocess.check_call(['cat-file', 'blob', sha1.encode('hex')], stdout=open(filename, 'w'))
if mode == 0100755: # for executable files
os.chmod(filename, 0755)
elif mode == 0120000: # for symlinks
target = open(filename).read()
if os.path.exists(filename):
os.unlink(filename)
os.symlink(target, filename)