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