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