172
171
def test_not_clean(self):
173
172
wt = self.create_branch()
174
173
self.build_tree(['branch/c'])
175
stanza = self.regen(wt, check_for_clean=True, include_file_revisions=True)
174
stanza = self.regen(wt, check_for_clean=True,
175
include_file_revisions=True)
176
176
self.assertEqual(['False'], stanza.get_all('clean'))
178
178
def test_file_revisions(self):
179
179
wt = self.create_branch()
180
180
self.build_tree(['branch/c'])
181
stanza = self.regen(wt, check_for_clean=True, include_file_revisions=True)
181
stanza = self.regen(wt, check_for_clean=True,
182
include_file_revisions=True)
182
183
# This assumes it's being run against a tree that does not update the
183
184
# root revision on every commit.
184
185
file_rev_stanza = self.get_one_stanza(stanza, 'file-revisions')
185
186
self.assertEqual(['', 'a', 'b', 'c'], file_rev_stanza.get_all('path'))
186
187
self.assertEqual(['r1', 'r3', 'r2', 'unversioned'],
187
file_rev_stanza.get_all('revision'))
188
file_rev_stanza.get_all('revision'))
189
190
def test_revision_history(self):
190
191
wt = self.create_branch()
191
192
stanza = self.regen(wt, include_revision_history=True)
192
193
revision_stanza = self.get_one_stanza(stanza, 'revisions')
193
194
self.assertEqual(['r1', 'r2', 'r3'], revision_stanza.get_all('id'))
194
self.assertEqual(['a', 'b', u'\xe52'], revision_stanza.get_all('message'))
195
self.assertEqual(['a', 'b', u'\xe52'],
196
revision_stanza.get_all('message'))
195
197
self.assertEqual(3, len(revision_stanza.get_all('date')))
197
199
def test_file_revisions_with_rename(self):
200
202
self.build_tree(['branch/a', 'branch/c'])
202
204
wt.rename_one('b', 'd')
203
stanza = self.regen(wt, check_for_clean=True, include_file_revisions=True)
205
stanza = self.regen(wt, check_for_clean=True,
206
include_file_revisions=True)
204
207
file_rev_stanza = self.get_one_stanza(stanza, 'file-revisions')
205
208
self.assertEqual(['', 'a', 'b', 'c', 'd'],
206
file_rev_stanza.get_all('path'))
209
file_rev_stanza.get_all('path'))
207
210
self.assertEqual(['r1', 'modified', 'renamed to d', 'new',
208
211
'renamed from b'],
209
212
file_rev_stanza.get_all('revision'))
219
222
wt.remove(['c', 'd'])
220
223
os.remove('branch/d')
221
stanza = self.regen(wt, check_for_clean=True, include_file_revisions=True)
224
stanza = self.regen(wt, check_for_clean=True,
225
include_file_revisions=True)
222
226
file_rev_stanza = self.get_one_stanza(stanza, 'file-revisions')
223
227
self.assertEqual(['', 'a', 'c', 'd'], file_rev_stanza.get_all('path'))
224
228
self.assertEqual(['r1', 'r4', 'unversioned', 'removed'],
231
235
wt.rename_one('b', 'd')
233
stanza = self.regen(wt, check_for_clean=True,
234
include_file_revisions=True, revision_id=wt.last_revision())
238
wt, check_for_clean=True, include_file_revisions=True,
239
revision_id=wt.last_revision())
235
240
file_rev_stanza = self.get_one_stanza(stanza, 'file-revisions')
236
241
self.assertEqual(['', 'a', 'b'], file_rev_stanza.get_all('path'))
237
242
self.assertEqual(['r1', 'r3', 'r2'],
295
300
tvi = self.regen(wt, include_revision_history=True)
297
302
rev_info = [(rev, message) for rev, message, timestamp, timezone
299
self.assertEqual([(b'r1', 'a'), (b'r2', 'b'), (b'r3', u'\xe52')], rev_info)
304
self.assertEqual([(b'r1', 'a'), (b'r2', 'b'),
305
(b'r3', u'\xe52')], rev_info)
301
307
# a was modified, so it should show up modified again
302
308
self.build_tree(['branch/a', 'branch/c'])
304
310
wt.rename_one('b', 'd')
305
311
tvi = self.regen(wt, check_for_clean=True, include_file_revisions=True)
306
312
self.assertEqual(['', 'a', 'b', 'c', 'd'],
307
sorted(tvi['file_revisions'].keys()))
313
sorted(tvi['file_revisions'].keys()))
308
314
self.assertEqual('modified', tvi['file_revisions']['a'])
309
315
self.assertEqual('renamed to d', tvi['file_revisions']['b'])
310
316
self.assertEqual('new', tvi['file_revisions']['c'])
315
321
os.remove('branch/d')
316
322
tvi = self.regen(wt, check_for_clean=True, include_file_revisions=True)
317
323
self.assertEqual(['', 'a', 'c', 'd'],
318
sorted(tvi['file_revisions'].keys()))
324
sorted(tvi['file_revisions'].keys()))
319
325
self.assertEqual(b'r4', tvi['file_revisions']['a'])
320
326
self.assertEqual('unversioned', tvi['file_revisions']['c'])
321
327
self.assertEqual('removed', tvi['file_revisions']['d'])
328
334
wt = self.make_branch_and_tree('branch')
329
335
builder = CustomVersionInfoBuilder(wt.branch, working_tree=wt,
330
template='revno: {revno}')
336
template='revno: {revno}')
331
337
builder.generate(sio)
332
338
self.assertEqual("revno: 0", sio.getvalue())
334
builder = CustomVersionInfoBuilder(wt.branch, working_tree=wt,
340
builder = CustomVersionInfoBuilder(
341
wt.branch, working_tree=wt,
335
342
template='{revno} revid: {revision_id}')
336
343
# revision_id is not available yet
337
344
self.assertRaises(MissingTemplateVariable, builder.generate, sio)
339
346
def test_custom_dotted_revno(self):
341
348
wt = self.create_tree_with_dotted_revno()
342
builder = CustomVersionInfoBuilder(wt.branch, working_tree=wt,
349
builder = CustomVersionInfoBuilder(
350
wt.branch, working_tree=wt,
343
351
template='{revno} revid: {revision_id}')
344
352
builder.generate(sio)
345
353
self.assertEqual("1.1.1 revid: o2", sio.getvalue())
402
410
def test_register_remove(self):
403
411
registry = version_info_formats.format_registry
404
412
registry.register('testbuilder',
405
TestBuilder, 'a simple test builder')
413
TestBuilder, 'a simple test builder')
406
414
self.assertIs(TestBuilder, registry.get('testbuilder'))
407
415
self.assertEqual('a simple test builder',
408
416
registry.get_help('testbuilder'))