3 from bup import index, metadata
4 from bup.helpers import *
5 import bup.xstat as xstat
10 cd = os.path.realpath('../../../t')
12 sd = os.path.realpath(cd + '/sampledata')
13 WVPASSEQ(index.realpath(cd + '/sampledata'), cd + '/sampledata')
14 WVPASSEQ(os.path.realpath(cd + '/sampledata/x'), sd + '/x')
15 WVPASSEQ(os.path.realpath(cd + '/sampledata/etc'), os.path.realpath('/etc'))
16 WVPASSEQ(index.realpath(cd + '/sampledata/etc'), sd + '/etc')
23 fs = xstat.stat('tindex.py')
24 unlink('index.meta.tmp')
25 ms = index.MetaStoreWriter('index.meta.tmp');
26 tmax = (time.time() - 1) * 10**9
27 w = index.Writer('index.tmp', ms, tmax)
28 w.add('/var/tmp/sporky', fs, 0)
29 w.add('/etc/passwd', fs, 0)
38 print '%s%s %s' % (e.is_valid() and ' ' or 'M',
39 e.is_fake() and 'F' or ' ',
42 def fake_validate(*l):
45 e.validate(0100644, index.FAKE_SHA)
54 def index_negative_timestamps():
60 os.utime("foo", (-86400, -86400))
62 tstart = time.time() * ns_per_sec
63 tmax = tstart - ns_per_sec
64 e = index.BlankNewEntry("foo", 0, tmax)
65 e.from_stat(xstat.stat("foo"), 0, tstart)
66 assert len(e.packed())
70 os.utime("foo", (-0x80000000, -0x80000000))
71 e = index.BlankNewEntry("foo", 0, tmax)
72 e.from_stat(xstat.stat("foo"), 0, tstart)
73 assert len(e.packed())
81 unlink('index.meta.tmp')
82 unlink('index2.meta.tmp')
83 unlink('index3.meta.tmp')
84 default_meta = metadata.Metadata()
85 ms1 = index.MetaStoreWriter('index.meta.tmp')
86 ms2 = index.MetaStoreWriter('index2.meta.tmp')
87 ms3 = index.MetaStoreWriter('index3.meta.tmp')
88 meta_ofs1 = ms1.store(default_meta)
89 meta_ofs2 = ms2.store(default_meta)
90 meta_ofs3 = ms3.store(default_meta)
96 fs = xstat.stat('tindex.py')
97 tmax = (time.time() - 1) * 10**9
99 w1 = index.Writer('index.tmp', ms1, tmax)
100 w1.add('/a/b/x', fs, meta_ofs1)
101 w1.add('/a/b/c', fs, meta_ofs1)
102 w1.add('/a/b/', ds, meta_ofs1)
103 w1.add('/a/', ds, meta_ofs1)
107 w2 = index.Writer('index2.tmp', ms2, tmax)
108 w2.add('/a/b/n/2', fs, meta_ofs2)
112 w3 = index.Writer('index3.tmp', ms3, tmax)
113 w3.add('/a/c/n/3', fs, meta_ofs3)
122 r1all = [e.name for e in r1]
124 ['/a/b/x', '/a/b/c', '/a/b/', '/a/', '/'])
125 r2all = [e.name for e in r2]
127 ['/a/b/n/2', '/a/b/n/', '/a/b/', '/a/', '/'])
128 r3all = [e.name for e in r3]
130 ['/a/c/n/3', '/a/c/n/', '/a/c/', '/a/', '/'])
131 all = [e.name for e in index.merge(r2, r1, r3)]
133 ['/a/c/n/3', '/a/c/n/', '/a/c/',
134 '/a/b/x', '/a/b/n/2', '/a/b/n/', '/a/b/c',
135 '/a/b/', '/a/', '/'])
139 print [hex(e.flags) for e in r1]
140 WVPASSEQ([e.name for e in r1 if e.is_valid()], r1all)
141 WVPASSEQ([e.name for e in r1 if not e.is_valid()], [])
142 WVPASSEQ([e.name for e in index.merge(r2, r1, r3) if not e.is_valid()],
143 ['/a/c/n/3', '/a/c/n/', '/a/c/',
144 '/a/b/n/2', '/a/b/n/', '/a/b/', '/a/', '/'])
146 expect_invalid = ['/'] + r2all + r3all
147 expect_real = (set(r1all) - set(r2all) - set(r3all)) \
148 | set(['/a/b/n/2', '/a/c/n/3'])
149 dump(index.merge(r2, r1, r3))
150 for e in index.merge(r2, r1, r3):
151 print e.name, hex(e.flags), e.ctime
152 eiv = e.name in expect_invalid
153 er = e.name in expect_real
154 WVPASSEQ(eiv, not e.is_valid())
155 WVPASSEQ(er, e.is_real())
156 fake_validate(r2, r3)
157 dump(index.merge(r2, r1, r3))
158 WVPASSEQ([e.name for e in index.merge(r2, r1, r3) if not e.is_valid()], [])
160 e = eget(index.merge(r2, r1, r3), '/a/b/c')
163 dump(index.merge(r2, r1, r3))
164 WVPASSEQ([e.name for e in index.merge(r2, r1, r3) if not e.is_valid()],
165 ['/a/b/c', '/a/b/', '/a/', '/'])