1 import struct, os, tempfile, time
3 from bup.helpers import *
6 bup_tmp = os.path.realpath('../../../t/tmp')
16 WVPASSEQ(git.mangle_name("a", adir2, adir), "a")
17 WVPASSEQ(git.mangle_name(".bup", adir2, adir), ".bup.bupl")
18 WVPASSEQ(git.mangle_name("a.bupa", adir2, adir), "a.bupa.bupl")
19 WVPASSEQ(git.mangle_name("b.bup", alink, alink), "b.bup.bupl")
20 WVPASSEQ(git.mangle_name("b.bu", alink, alink), "b.bu")
21 WVPASSEQ(git.mangle_name("f", afile, afile2), "f")
22 WVPASSEQ(git.mangle_name("f.bup", afile, afile2), "f.bup.bupl")
23 WVPASSEQ(git.mangle_name("f.bup", afile, adir), "f.bup.bup")
24 WVPASSEQ(git.mangle_name("f", afile, adir), "f.bup")
26 WVPASSEQ(git.demangle_name("f.bup"), ("f", git.BUP_CHUNKED))
27 WVPASSEQ(git.demangle_name("f.bupl"), ("f", git.BUP_NORMAL))
28 WVPASSEQ(git.demangle_name("f.bup.bupl"), ("f.bup", git.BUP_NORMAL))
30 # for safety, we ignore .bup? suffixes we don't recognize. Future
31 # versions might implement a .bup[a-z] extension as something other
33 WVPASSEQ(git.demangle_name("f.bupa"), ("f.bupa", git.BUP_NORMAL))
39 looseb = ''.join(git._encode_looseobj('blob', s))
40 looset = ''.join(git._encode_looseobj('tree', s))
41 loosec = ''.join(git._encode_looseobj('commit', s))
42 packb = ''.join(git._encode_packobj('blob', s))
43 packt = ''.join(git._encode_packobj('tree', s))
44 packc = ''.join(git._encode_packobj('commit', s))
45 WVPASSEQ(git._decode_looseobj(looseb), ('blob', s))
46 WVPASSEQ(git._decode_looseobj(looset), ('tree', s))
47 WVPASSEQ(git._decode_looseobj(loosec), ('commit', s))
48 WVPASSEQ(git._decode_packobj(packb), ('blob', s))
49 WVPASSEQ(git._decode_packobj(packt), ('tree', s))
50 WVPASSEQ(git._decode_packobj(packc), ('commit', s))
55 initial_failures = wvfailure_count()
56 tmpdir = tempfile.mkdtemp(dir=bup_tmp, prefix='bup-tgit-')
57 os.environ['BUP_MAIN_EXE'] = bupmain = '../../../bup'
58 os.environ['BUP_DIR'] = bupdir = tmpdir + "/bup"
63 w.new_blob(os.urandom(100))
64 w.new_blob(os.urandom(100))
71 hashes.append(w.new_blob(str(i)))
73 nameprefix = w.close()
74 print repr(nameprefix)
75 WVPASS(os.path.exists(nameprefix + '.pack'))
76 WVPASS(os.path.exists(nameprefix + '.idx'))
78 r = git.open_idx(nameprefix + '.idx')
82 WVPASS(r.find_offset(hashes[i]) > 0)
83 WVPASS(r.exists(hashes[99]))
84 WVFAIL(r.exists('\0'*20))
87 for h in sorted(hashes):
88 WVPASSEQ(str(pi.next()).encode('hex'), h.encode('hex'))
90 WVFAIL(r.find_offset('\0'*20))
92 r = git.PackIdxList(bupdir + '/objects/pack')
93 WVPASS(r.exists(hashes[5]))
94 WVPASS(r.exists(hashes[6]))
95 WVFAIL(r.exists('\0'*20))
96 if wvfailure_count() == initial_failures:
97 subprocess.call(['rm', '-rf', tmpdir])
100 def test_pack_name_lookup():
101 initial_failures = wvfailure_count()
102 tmpdir = tempfile.mkdtemp(dir=bup_tmp, prefix='bup-tgit-')
103 os.environ['BUP_MAIN_EXE'] = bupmain = '../../../bup'
104 os.environ['BUP_DIR'] = bupdir = tmpdir + "/bup"
105 git.init_repo(bupdir)
107 packdir = git.repo('objects/pack')
112 for start in range(0,28,2):
114 for i in range(start, start+2):
115 hashes.append(w.new_blob(str(i)))
117 idxnames.append(os.path.basename(w.close() + '.idx'))
119 r = git.PackIdxList(packdir)
120 WVPASSEQ(len(r.packs), 2)
121 for e,idxname in enumerate(idxnames):
122 for i in range(e*2, (e+1)*2):
123 WVPASSEQ(r.exists(hashes[i], want_source=True), idxname)
124 if wvfailure_count() == initial_failures:
125 subprocess.call(['rm', '-rf', tmpdir])
129 def test_long_index():
130 initial_failures = wvfailure_count()
131 tmpdir = tempfile.mkdtemp(dir=bup_tmp, prefix='bup-tgit-')
132 os.environ['BUP_MAIN_EXE'] = bupmain = '../../../bup'
133 os.environ['BUP_DIR'] = bupdir = tmpdir + "/bup"
134 git.init_repo(bupdir)
136 obj_bin = struct.pack('!IIIII',
137 0x00112233, 0x44556677, 0x88990011, 0x22334455, 0x66778899)
138 obj2_bin = struct.pack('!IIIII',
139 0x11223344, 0x55667788, 0x99001122, 0x33445566, 0x77889900)
140 obj3_bin = struct.pack('!IIIII',
141 0x22334455, 0x66778899, 0x00112233, 0x44556677, 0x88990011)
142 pack_bin = struct.pack('!IIIII',
143 0x99887766, 0x55443322, 0x11009988, 0x77665544, 0x33221100)
144 idx = list(list() for i in xrange(256))
145 idx[0].append((obj_bin, 1, 0xfffffffff))
146 idx[0x11].append((obj2_bin, 2, 0xffffffffff))
147 idx[0x22].append((obj3_bin, 3, 0xff))
148 (fd,name) = tempfile.mkstemp(suffix='.idx', dir=git.repo('objects'))
151 r = w._write_pack_idx_v2(name, idx, pack_bin)
152 i = git.PackIdxV2(name, open(name, 'rb'))
153 WVPASSEQ(i.find_offset(obj_bin), 0xfffffffff)
154 WVPASSEQ(i.find_offset(obj2_bin), 0xffffffffff)
155 WVPASSEQ(i.find_offset(obj3_bin), 0xff)
156 if wvfailure_count() == initial_failures:
158 subprocess.call(['rm', '-rf', tmpdir])
162 def test_check_repo_or_die():
163 initial_failures = wvfailure_count()
164 orig_cwd = os.getcwd()
165 tmpdir = tempfile.mkdtemp(dir=bup_tmp, prefix='bup-tgit-')
166 os.environ['BUP_DIR'] = bupdir = tmpdir + "/bup"
169 git.init_repo(bupdir)
170 git.check_repo_or_die()
171 WVPASS('check_repo_or_die') # if we reach this point the call above passed
173 os.rename(bupdir + '/objects/pack', bupdir + '/objects/pack.tmp')
174 open(bupdir + '/objects/pack', 'w').close()
176 git.check_repo_or_die()
177 except SystemExit, e:
181 os.unlink(bupdir + '/objects/pack')
182 os.rename(bupdir + '/objects/pack.tmp', bupdir + '/objects/pack')
185 git.check_repo_or_die('nonexistantbup.tmp')
186 except SystemExit, e:
192 if wvfailure_count() == initial_failures:
193 subprocess.call(['rm', '-rf', tmpdir])