1 import struct, os, tempfile, time
3 from bup.helpers import *
14 WVPASSEQ(git.mangle_name("a", adir2, adir), "a")
15 WVPASSEQ(git.mangle_name(".bup", adir2, adir), ".bup.bupl")
16 WVPASSEQ(git.mangle_name("a.bupa", adir2, adir), "a.bupa.bupl")
17 WVPASSEQ(git.mangle_name("b.bup", alink, alink), "b.bup.bupl")
18 WVPASSEQ(git.mangle_name("b.bu", alink, alink), "b.bu")
19 WVPASSEQ(git.mangle_name("f", afile, afile2), "f")
20 WVPASSEQ(git.mangle_name("f.bup", afile, afile2), "f.bup.bupl")
21 WVPASSEQ(git.mangle_name("f.bup", afile, adir), "f.bup.bup")
22 WVPASSEQ(git.mangle_name("f", afile, adir), "f.bup")
24 WVPASSEQ(git.demangle_name("f.bup"), ("f", git.BUP_CHUNKED))
25 WVPASSEQ(git.demangle_name("f.bupl"), ("f", git.BUP_NORMAL))
26 WVPASSEQ(git.demangle_name("f.bup.bupl"), ("f.bup", git.BUP_NORMAL))
28 # for safety, we ignore .bup? suffixes we don't recognize. Future
29 # versions might implement a .bup[a-z] extension as something other
31 WVPASSEQ(git.demangle_name("f.bupa"), ("f.bupa", git.BUP_NORMAL))
37 looseb = ''.join(git._encode_looseobj('blob', s))
38 looset = ''.join(git._encode_looseobj('tree', s))
39 loosec = ''.join(git._encode_looseobj('commit', s))
40 packb = ''.join(git._encode_packobj('blob', s))
41 packt = ''.join(git._encode_packobj('tree', s))
42 packc = ''.join(git._encode_packobj('commit', s))
43 WVPASSEQ(git._decode_looseobj(looseb), ('blob', s))
44 WVPASSEQ(git._decode_looseobj(looset), ('tree', s))
45 WVPASSEQ(git._decode_looseobj(loosec), ('commit', s))
46 WVPASSEQ(git._decode_packobj(packb), ('blob', s))
47 WVPASSEQ(git._decode_packobj(packt), ('tree', s))
48 WVPASSEQ(git._decode_packobj(packc), ('commit', s))
53 subprocess.call(['rm','-rf', 'pybuptest.tmp'])
54 git.init_repo('pybuptest.tmp')
58 w.new_blob(os.urandom(100))
59 w.new_blob(os.urandom(100))
66 hashes.append(w.new_blob(str(i)))
68 nameprefix = w.close()
69 print repr(nameprefix)
70 WVPASS(os.path.exists(nameprefix + '.pack'))
71 WVPASS(os.path.exists(nameprefix + '.idx'))
73 r = git.open_idx(nameprefix + '.idx')
77 WVPASS(r.find_offset(hashes[i]) > 0)
78 WVPASS(r.exists(hashes[99]))
79 WVFAIL(r.exists('\0'*20))
82 for h in sorted(hashes):
83 WVPASSEQ(str(pi.next()).encode('hex'), h.encode('hex'))
85 WVFAIL(r.find_offset('\0'*20))
87 r = git.PackIdxList('pybuptest.tmp/objects/pack')
88 WVPASS(r.exists(hashes[5]))
89 WVPASS(r.exists(hashes[6]))
90 WVFAIL(r.exists('\0'*20))
94 def test_pack_name_lookup():
95 os.environ['BUP_MAIN_EXE'] = bupmain = '../../../bup'
96 os.environ['BUP_DIR'] = bupdir = 'pybuptest.tmp'
97 subprocess.call(['rm','-rf', bupdir])
106 hashes.append(w.new_blob(str(i)))
108 idxnames.append(w.close() + '.idx')
112 hashes.append(w.new_blob(str(i)))
114 idxnames.append(w.close() + '.idx')
116 idxnames = [os.path.basename(ix) for ix in idxnames]
120 WVPASSEQ(r.exists(hashes[i], want_source=True), idxnames[0])
122 WVPASSEQ(r.exists(hashes[i], want_source=True), idxnames[1])
124 r = git.PackIdxList('pybuptest.tmp/objects/pack')
125 WVPASSEQ(len(r.packs), 2)
129 subprocess.call([bupmain, 'midx', '-f'])
131 r = git.PackIdxList('pybuptest.tmp/objects/pack')
132 WVPASSEQ(len(r.packs), 1)
137 def test_long_index():
139 obj_bin = struct.pack('!IIIII',
140 0x00112233, 0x44556677, 0x88990011, 0x22334455, 0x66778899)
141 obj2_bin = struct.pack('!IIIII',
142 0x11223344, 0x55667788, 0x99001122, 0x33445566, 0x77889900)
143 obj3_bin = struct.pack('!IIIII',
144 0x22334455, 0x66778899, 0x00112233, 0x44556677, 0x88990011)
145 pack_bin = struct.pack('!IIIII',
146 0x99887766, 0x55443322, 0x11009988, 0x77665544, 0x33221100)
147 idx = list(list() for i in xrange(256))
148 idx[0].append((obj_bin, 1, 0xfffffffff))
149 idx[0x11].append((obj2_bin, 2, 0xffffffffff))
150 idx[0x22].append((obj3_bin, 3, 0xff))
151 (fd,name) = tempfile.mkstemp(suffix='.idx', dir=git.repo('objects'))
152 f = os.fdopen(fd, 'w+b')
153 r = w._write_pack_idx_v2(f, idx, pack_bin)
155 i = git.PackIdxV2(name, f)
156 WVPASSEQ(i.find_offset(obj_bin), 0xfffffffff)
157 WVPASSEQ(i.find_offset(obj2_bin), 0xffffffffff)
158 WVPASSEQ(i.find_offset(obj3_bin), 0xff)
164 hashes = [os.urandom(20) for i in range(100)]
169 ix.shatable = ''.join(hashes)
171 b = git.ShaBloom.create('pybuptest.bloom', expected=100, k=k)
173 WVPASSLT(b.pfalse_positive(), .1)
175 b = git.ShaBloom('pybuptest.bloom')
178 all_present &= b.exists(h)
181 for h in [os.urandom(20) for i in range(1000)]:
184 WVPASSLT(false_positives, 5)
185 os.unlink('pybuptest.bloom')
187 tf = tempfile.TemporaryFile()
188 b = git.ShaBloom.create('bup.bloom', f=tf, expected=100)
189 WVPASSEQ(b.rwfile, tf)
191 tf = tempfile.TemporaryFile()
192 b = git.ShaBloom.create('bup.bloom', f=tf, expected=2**28,