]> arthur.barton.de Git - bup.git/blob - t/subtree-hash
926303f4f2acb30c1e3af03d49d3d20abc2342c9
[bup.git] / t / subtree-hash
1 #!/bin/sh
2 """": # -*-python-*-
3 bup_python="$(dirname "$0")/../cmd/bup-python" || exit $?
4 exec "$bup_python" "$0" ${1+"$@"}
5 """
6 # end of bup preamble
7
8 import os, sys
9
10 argv = sys.argv
11 exe = os.path.realpath(argv[0])
12 exepath = os.path.split(exe)[0] or '.'
13 exeprefix = os.path.split(os.path.abspath(exepath))[0]
14
15 # fix the PYTHONPATH to include our lib dir
16 libpath = os.path.join(exepath, '..', 'lib')
17 sys.path[:0] = [libpath]
18 os.environ['PYTHONPATH'] = libpath + ':' + os.environ.get('PYTHONPATH', '')
19
20 from bup.helpers import handle_ctrl_c, readpipe
21 from bup import options
22
23 optspec = """
24 subtree-hash ROOT_HASH [PATH_ITEM...]
25 --
26 """
27
28 handle_ctrl_c()
29
30 o = options.Options(optspec)
31 (opt, flags, extra) = o.parse(sys.argv[1:])
32
33 if len(extra) < 1:
34     o.fatal('must specify a root hash')
35
36 tree_hash = extra[0]
37 path = extra[1:]
38
39 while path:
40     target_name = path[0]
41     subtree_items = readpipe(['git', 'ls-tree', '-z', tree_hash])
42     target_hash = None
43     for entry in subtree_items.split('\0'):
44         if not entry:
45             break
46         info, name = entry.split('\t', 1)
47         if name == target_name:
48             _, _, target_hash = info.split(' ')
49             break
50     if not target_hash:
51         print >> sys.stderr, "Can't find %r in %s" % (target_name, tree_hash)
52         break
53     tree_hash = target_hash
54     path = path[1:]
55
56 if path:
57     sys.exit(1)
58
59 print tree_hash