3 from bup import index, metadata
4 from bup.helpers import *
5 import bup.xstat as xstat
8 lib_t_dir = os.getcwd()
9 bup_tmp = os.path.realpath('../../../t/tmp')
14 cd = os.path.realpath('../../../t')
16 sd = os.path.realpath(cd + '/sampledata')
17 WVPASSEQ(index.realpath(cd + '/sampledata'), sd)
18 WVPASSEQ(os.path.realpath(cd + '/sampledata/x'), sd + '/x')
19 WVPASSEQ(os.path.realpath(cd + '/sampledata/abs-symlink'),
20 sd + '/abs-symlink-target')
21 WVPASSEQ(index.realpath(cd + '/sampledata/abs-symlink'),
27 initial_failures = wvfailure_count()
28 tmpdir = tempfile.mkdtemp(dir=bup_tmp, prefix='bup-tindex-')
29 orig_cwd = os.getcwd()
33 fs = xstat.stat(lib_t_dir + '/tindex.py')
34 ms = index.MetaStoreWriter('index.meta.tmp');
35 tmax = (time.time() - 1) * 10**9
36 w = index.Writer('index.tmp', ms, tmax)
37 w.add('/var/tmp/sporky', fs, 0)
38 w.add('/etc/passwd', fs, 0)
45 if wvfailure_count() == initial_failures:
46 subprocess.call(['rm', '-rf', tmpdir])
51 print '%s%s %s' % (e.is_valid() and ' ' or 'M',
52 e.is_fake() and 'F' or ' ',
55 def fake_validate(*l):
58 e.validate(0100644, index.FAKE_SHA)
67 def index_negative_timestamps():
68 initial_failures = wvfailure_count()
69 tmpdir = tempfile.mkdtemp(dir=bup_tmp, prefix='bup-tindex-')
75 os.utime("foo", (-86400, -86400))
77 tstart = time.time() * ns_per_sec
78 tmax = tstart - ns_per_sec
79 e = index.BlankNewEntry("foo", 0, tmax)
80 e.from_stat(xstat.stat("foo"), 0, tstart)
81 assert len(e.packed())
85 os.utime("foo", (-0x80000000, -0x80000000))
86 e = index.BlankNewEntry("foo", 0, tmax)
87 e.from_stat(xstat.stat("foo"), 0, tstart)
88 assert len(e.packed())
90 if wvfailure_count() == initial_failures:
91 subprocess.call(['rm', '-rf', tmpdir])
96 initial_failures = wvfailure_count()
97 orig_cwd = os.getcwd()
98 tmpdir = tempfile.mkdtemp(dir=bup_tmp, prefix='bup-tindex-')
101 default_meta = metadata.Metadata()
102 ms1 = index.MetaStoreWriter('index.meta.tmp')
103 ms2 = index.MetaStoreWriter('index2.meta.tmp')
104 ms3 = index.MetaStoreWriter('index3.meta.tmp')
105 meta_ofs1 = ms1.store(default_meta)
106 meta_ofs2 = ms2.store(default_meta)
107 meta_ofs3 = ms3.store(default_meta)
109 ds = xstat.stat(lib_t_dir)
110 fs = xstat.stat(lib_t_dir + '/tindex.py')
111 tmax = (time.time() - 1) * 10**9
113 w1 = index.Writer('index.tmp', ms1, tmax)
114 w1.add('/a/b/x', fs, meta_ofs1)
115 w1.add('/a/b/c', fs, meta_ofs1)
116 w1.add('/a/b/', ds, meta_ofs1)
117 w1.add('/a/', ds, meta_ofs1)
121 w2 = index.Writer('index2.tmp', ms2, tmax)
122 w2.add('/a/b/n/2', fs, meta_ofs2)
126 w3 = index.Writer('index3.tmp', ms3, tmax)
127 w3.add('/a/c/n/3', fs, meta_ofs3)
136 r1all = [e.name for e in r1]
138 ['/a/b/x', '/a/b/c', '/a/b/', '/a/', '/'])
139 r2all = [e.name for e in r2]
141 ['/a/b/n/2', '/a/b/n/', '/a/b/', '/a/', '/'])
142 r3all = [e.name for e in r3]
144 ['/a/c/n/3', '/a/c/n/', '/a/c/', '/a/', '/'])
145 all = [e.name for e in index.merge(r2, r1, r3)]
147 ['/a/c/n/3', '/a/c/n/', '/a/c/',
148 '/a/b/x', '/a/b/n/2', '/a/b/n/', '/a/b/c',
149 '/a/b/', '/a/', '/'])
153 print [hex(e.flags) for e in r1]
154 WVPASSEQ([e.name for e in r1 if e.is_valid()], r1all)
155 WVPASSEQ([e.name for e in r1 if not e.is_valid()], [])
156 WVPASSEQ([e.name for e in index.merge(r2, r1, r3) if not e.is_valid()],
157 ['/a/c/n/3', '/a/c/n/', '/a/c/',
158 '/a/b/n/2', '/a/b/n/', '/a/b/', '/a/', '/'])
160 expect_invalid = ['/'] + r2all + r3all
161 expect_real = (set(r1all) - set(r2all) - set(r3all)) \
162 | set(['/a/b/n/2', '/a/c/n/3'])
163 dump(index.merge(r2, r1, r3))
164 for e in index.merge(r2, r1, r3):
165 print e.name, hex(e.flags), e.ctime
166 eiv = e.name in expect_invalid
167 er = e.name in expect_real
168 WVPASSEQ(eiv, not e.is_valid())
169 WVPASSEQ(er, e.is_real())
170 fake_validate(r2, r3)
171 dump(index.merge(r2, r1, r3))
172 WVPASSEQ([e.name for e in index.merge(r2, r1, r3) if not e.is_valid()], [])
174 e = eget(index.merge(r2, r1, r3), '/a/b/c')
177 dump(index.merge(r2, r1, r3))
178 WVPASSEQ([e.name for e in index.merge(r2, r1, r3) if not e.is_valid()],
179 ['/a/b/c', '/a/b/', '/a/', '/'])
185 if wvfailure_count() == initial_failures:
186 subprocess.call(['rm', '-rf', tmpdir])