#!/bin/sh """": # -*-python-*- bup_exec="$(dirname "$0")/bup-exec" || exit $? exec "$bup_exec" "$0" ${1+"$@"} """ from __future__ import absolute_import, print_function import os.path, sys from bup.compat import argv_bytes, get_argvb from bup.helpers import handle_ctrl_c, readpipe from bup.io import byte_stream from bup import options optspec = """ subtree-hash ROOT_HASH [PATH_ITEM...] -- """ handle_ctrl_c() o = options.Options(optspec) opt, flags, extra = o.parse_bytes(get_argvb()[1:]) if len(extra) < 1: o.fatal('must specify a root hash') tree_hash = argv_bytes(extra[0]) path = [argv_bytes(x) for x in extra[1:]] while path: target_name = path[0] subtree_items = readpipe([b'git', b'ls-tree', b'-z', tree_hash]) target_hash = None for entry in subtree_items.split(b'\0'): if not entry: break info, name = entry.split(b'\t', 1) if name == target_name: _, _, target_hash = info.split(b' ') break if not target_hash: print("Can't find %r in %s" % (target_name, tree_hash.decode('ascii')), file=sys.stderr) break tree_hash = target_hash path = path[1:] if path: sys.exit(1) sys.stdout.flush() out = byte_stream(sys.stdout) out.write(tree_hash + b'\n')