#!/usr/bin/env python from subprocess import check_output import argparse import sys parser = argparse.ArgumentParser() parser.add_argument("ROOT_HASH", help="root tree for the search") parser.add_argument("PATH_ITEM", help="path component", nargs='*') opts = parser.parse_args() tree_hash = opts.ROOT_HASH path = opts.PATH_ITEM while path: target_name = path[0] subtree_items = check_output(['git', 'ls-tree', '-z', tree_hash]) target_hash = None for entry in subtree_items.split('\0'): if not entry: break info, name = entry.split('\t', 1) if name == target_name: _, _, target_hash = info.split(' ') break if not target_hash: print >> sys.stderr, "Can't find %r in %s" % (target_name, tree_hash) break tree_hash = target_hash path = path[1:] if path: sys.exit(1) print tree_hash