94
113
shutil.rmtree(os.path.join(self._tmpdir, 'tree'))
115
self._bad_id_tag = 'demo@DONOTUSE/c--bad-id--0'
116
self._bad_id_tag_bzr_base = revision_id(self._bad_id_tag + '--base-0',
118
self._bad_id_tag_bzr = revision_id(self._bad_id_tag + '--patch-1',
120
pybaz.Revision('demo@DONOTUSE/c--import--0--base-0').make_continuation(
121
pybaz.Version(self._bad_id_tag))
122
tree = pybaz.Revision(self._bad_id_tag + '--base-0').get(
123
os.path.join(self._tmpdir, 'tree'))
124
from bzrlib.plugins.bzrtools.baz_import import add_file
125
add_file(os.path.join(self._tmpdir,'tree/path'), 'text',
126
'this_id/needs%escaping')
127
msg = tree.log_message()
128
msg["summary"] = "commit something which needs escaping."
130
shutil.rmtree(os.path.join(self._tmpdir, 'tree'))
96
132
self.make_import_symlink()
97
133
self.make_missing_ancestor()
134
self.make_inbranch_continuation()
99
136
def make_import_symlink(self):
100
137
self._import_symlink = 'demo@DONOTUSE/c--import-symlink--0'
101
self._import_symlink_bzr = revision_id(self._import_symlink + '--base-0')
138
self._import_symlink_bzr = revision_id(
139
self._import_symlink + '--base-0', None)
102
140
os.mkdir(os.path.join(self._tmpdir, 'tree'))
103
141
tree = pybaz.init_tree(os.path.join(self._tmpdir, 'tree'),
104
142
self._import_symlink)
105
os.symlink('missing-file-name',
106
os.path.join(self._tmpdir, 'tree', 'alink'))
143
link_path = os.path.join(self._tmpdir, 'tree', 'alink')
144
os.symlink('missing-file-name', link_path)
107
145
tree.add_tag('alink')
108
146
id_file = open(os.path.join(tree, '.arch-ids', 'alink.id'), 'w')
109
147
id_file.write('symlink_tag\n')
162
241
TestCaseInTempDir.setUp(self)
163
242
ResourcedTestCase.setUpResources(self)
164
self.output = StringIO()
243
os.environ['HOME'] = self._baz._homedir
166
245
def tearDown(self):
167
246
ResourcedTestCase.tearDownResources(self)
168
247
TestCaseInTempDir.tearDown(self)
170
def collect(self, text):
171
self.output.write(text)
172
self.output.write("\n")
249
def test_import_utf8(self):
250
import_version('output', pybaz.Version(self._baz._utf8), None)
251
branch = Branch.open('output')
252
plain_revid = 'Arch-1:demo@DONOTUSE%c--utf8--0--base-0'
253
self.assertEqual([plain_revid], branch.revision_history())
254
self.assertEqual(u'I am importing now\ufffd\ufffd\ufffd',
255
branch.repository.get_revision(plain_revid).message)
256
import_version('output2', pybaz.Version(self._baz._utf8), 'utf-8')
257
branch2 = Branch.open('output2')
258
utf8_revid = 'Arch-1-utf-8:demo@DONOTUSE%c--utf8--0--base-0'
259
self.assertEqual([utf8_revid], branch2.revision_history())
260
self.assertEqual(u'I am importing now\u1234',
261
branch2.repository.get_revision(utf8_revid).message)
174
263
def test_import_empty(self):
175
import_version('output', pybaz.Version(self._baz._import), self.collect)
264
import_version('output', pybaz.Version(self._baz._import), None)
176
265
# expected results:
177
# one commit, no files, revision identifier of 'demo@DONOTUSE_c--import--0--base-0'
266
# one commit, no files, revision identifier of
267
# 'demo@DONOTUSE_c--import--0--base-0'
178
268
branch = Branch.open('output')
269
repo = branch.repository
179
270
self.assertEqual(branch.revision_history(),
180
271
['Arch-1:demo@DONOTUSE%c--import--0--base-0'])
181
rev = branch.get_revision('Arch-1:demo@DONOTUSE%c--import--0--base-0')
272
rev = repo.get_revision('Arch-1:demo@DONOTUSE%c--import--0--base-0')
183
274
import_version('output2', pybaz.Version('demo@DONOTUSE/c--import--0'),
185
276
branch2 = Branch.open('output2')
277
repo2 = branch2.repository
186
278
self.assertEqual(branch.revision_history(), branch2.revision_history())
187
rev2 = branch2.get_revision('Arch-1:demo@DONOTUSE%c--import--0--base-0')
279
rev2 = repo2.get_revision('Arch-1:demo@DONOTUSE%c--import--0--base-0')
188
280
# they must be the same
189
281
self.assertEqual(rev, rev2)
231
322
# and a merged revision from the latter of
232
323
# self._baz._empty_tag_bzr
233
324
branch = Branch.open('output')
325
repo = branch.repository
234
326
self.assertEqual(branch.revision_history(),
235
327
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
236
328
self._baz._empty_merged_tag_bzr_base,
237
329
self._baz._empty_merged_tag_bzr])
239
import_version('output2', pybaz.Version(self._baz._empty_merged_tag),
331
import_version('output2', pybaz.Version(self._baz._empty_merged_tag),
241
333
branch2 = Branch.open('output2')
334
repo2 = branch2.repository
242
335
# and import what we should be merged up against for checking with.
243
import_version('output3', pybaz.Version(self._baz._empty_tag),
336
import_version('output3', pybaz.Version(self._baz._empty_tag), None)
245
337
branch3 = Branch.open('output3')
247
339
self.assertEqual(branch.revision_history(), branch2.revision_history())
248
self.assertNotEqual(branch.revision_history(), branch3.revision_history())
340
self.assertNotEqual(branch.revision_history(),
341
branch3.revision_history())
249
342
# check revisions in the history.
250
rev = branch.get_revision(self._baz._empty_merged_tag_bzr_base)
251
rev2 = branch2.get_revision(self._baz._empty_merged_tag_bzr_base)
343
rev = repo.get_revision(self._baz._empty_merged_tag_bzr_base)
344
rev2 = repo2.get_revision(self._baz._empty_merged_tag_bzr_base)
252
345
# they must be the same
253
346
self.assertEqual(rev, rev2)
254
347
# and we should get some expected values:
255
348
self.assertEqual(rev.committer, "Test User<test@example.org>")
256
self.assertEqual(rev.message, "tag of demo@DONOTUSE/c--import--0--base-0")
349
self.assertEqual(rev.message,
350
"tag of demo@DONOTUSE/c--import--0--base-0")
257
351
self.assertEqual(rev.revision_id, self._baz._empty_merged_tag_bzr_base)
352
self.assertEqual(['Arch-1:demo@DONOTUSE%c--import--0--base-0'],
259
355
# check next revisions in the history.
260
rev = branch.get_revision(self._baz._empty_merged_tag_bzr)
261
rev2 = branch2.get_revision(self._baz._empty_merged_tag_bzr)
356
rev = repo.get_revision(self._baz._empty_merged_tag_bzr)
357
rev2 = repo2.get_revision(self._baz._empty_merged_tag_bzr)
262
358
# they must be the same
263
359
self.assertEqual(rev, rev2)
264
360
# and we should get some expected values:
265
361
self.assertEqual(rev.committer, "Test User<test@example.org>")
266
362
self.assertEqual(rev.message, "did a merge, yarh")
267
363
self.assertEqual(rev.revision_id, self._baz._empty_merged_tag_bzr)
268
self.assertEqual(rev.parents[0].revision_id,
364
self.assertEqual(rev.parent_ids[0],
269
365
self._baz._empty_merged_tag_bzr_base)
270
self.assertEqual(rev.parents[1].revision_id,
271
self._baz._empty_tag_bzr)
366
self.assertEqual(rev.parent_ids[1], self._baz._empty_tag_bzr)
273
368
# this tree should have nothing missing from that tree.
274
369
# FIXME there is no code for this right now.
275
370
# self.assertEqual(branch.missing_revisions(branch3), [])
277
372
def test_merge_branch_with_merges(self):
278
import_version('output', pybaz.Version(self._baz._empty_merged_tag_2),
373
import_version('output', pybaz.Version(self._baz._empty_merged_tag_2),
280
375
# expected results:
281
376
# two commits, no files, revision identifiers of
282
377
# 'demo@DONOTUSE_c--import--0--base-0' and
285
380
# and a merged revision from the latter of
286
381
# self._baz._empty_merged_tag_bzr
287
382
branch = Branch.open('output')
383
repo = branch.repository
288
384
self.assertEqual(branch.revision_history(),
289
385
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
290
386
self._baz._empty_merged_tag_2_bzr_base,
291
387
self._baz._empty_merged_tag_2_bzr])
293
389
import_version('output2', pybaz.Version(self._baz._empty_merged_tag_2),
295
391
branch2 = Branch.open('output2')
392
repo2 = branch2.repository
296
393
# and import what we should be merged up against for checking with.
297
394
import_version('output3', pybaz.Version(self._baz._empty_merged_tag),
299
396
branch3 = Branch.open('output3')
301
398
self.assertEqual(branch.revision_history(), branch2.revision_history())
302
self.assertNotEqual(branch.revision_history(), branch3.revision_history())
399
self.assertNotEqual(branch.revision_history(),
400
branch3.revision_history())
303
401
# check revisions in the history.
304
rev = branch.get_revision(self._baz._empty_merged_tag_2_bzr_base)
305
rev2 = branch2.get_revision(self._baz._empty_merged_tag_2_bzr_base)
402
rev = repo.get_revision(self._baz._empty_merged_tag_2_bzr_base)
403
rev2 = repo2.get_revision(self._baz._empty_merged_tag_2_bzr_base)
306
404
# they must be the same
307
405
self.assertEqual(rev, rev2)
308
406
# and we should get some expected values:
309
407
self.assertEqual(rev.committer, "Test User<test@example.org>")
310
self.assertEqual(rev.message, "tag of demo@DONOTUSE/c--import--0--base-0")
311
self.assertEqual(rev.revision_id, self._baz._empty_merged_tag_2_bzr_base)
408
self.assertEqual(rev.message,
409
"tag of demo@DONOTUSE/c--import--0--base-0")
410
self.assertEqual(rev.revision_id,
411
self._baz._empty_merged_tag_2_bzr_base)
313
413
# check next revisions in the history.
314
rev = branch.get_revision(self._baz._empty_merged_tag_2_bzr)
315
rev2 = branch2.get_revision(self._baz._empty_merged_tag_2_bzr)
414
rev = repo.get_revision(self._baz._empty_merged_tag_2_bzr)
415
rev2 = repo2.get_revision(self._baz._empty_merged_tag_2_bzr)
316
416
# they must be the same
317
417
self.assertEqual(rev, rev2)
318
418
# and we should get some expected values:
319
419
self.assertEqual(rev.committer, "Test User<test@example.org>")
320
420
self.assertEqual(rev.message, "merge in a merged tree.")
321
421
self.assertEqual(rev.revision_id, self._baz._empty_merged_tag_2_bzr)
322
self.assertEqual(rev.parents[0].revision_id,
422
self.assertEqual(rev.parent_ids[0],
323
423
self._baz._empty_merged_tag_2_bzr_base)
324
self.assertEqual(rev.parents[1].revision_id,
424
self.assertEqual(rev.parent_ids[1],
325
425
self._baz._empty_merged_tag_bzr)
327
427
# this tree should have nothing missing from that tree.
368
473
branch = Branch.open('output')
369
474
self.assertEqual(branch.revision_history(),
370
475
[self._baz._missing_ancestor_bzr])
371
rev = branch.get_revision(self._baz._missing_ancestor_bzr)
476
rev = branch.repository.get_revision(self._baz._missing_ancestor_bzr)
373
import_version('output2', pybaz.Version(self._baz._missing_ancestor),
478
import_version('output2', pybaz.Version(self._baz._missing_ancestor),
375
480
branch2 = Branch.open('output2')
376
481
self.assertEqual(branch.revision_history(), branch2.revision_history())
377
rev2 = branch2.get_revision(self._baz._missing_ancestor_bzr)
482
rev2 = branch2.repository.get_revision(self._baz._missing_ancestor_bzr)
378
483
# they must be the same
379
484
self.assertEqual(rev, rev2)
381
486
# and we should get some expected values:
382
487
self.assertEqual(rev.committer, "Test User<test@example.org>")
383
self.assertEqual(rev.message, "tag of demo-gone@DONOTUSE/c--import--0--base-0")
488
self.assertEqual(rev.message,
489
"tag of demo-gone@DONOTUSE/c--import--0--base-0")
384
490
self.assertEqual(rev.revision_id, self._baz._missing_ancestor_bzr)
385
self.assertEqual(rev.parents[0].revision_id,
386
self._baz._missing_import_bzr)
387
self.assertEqual(1, len(rev.parents))
491
self.assertEqual(rev.parent_ids[0], self._baz._missing_import_bzr)
492
self.assertEqual(1, len(rev.parent_ids))
389
494
# must NOT be able to get the merged evision
390
self.assertRaises(NoSuchRevision, branch.get_revision,
495
self.assertRaises(NoSuchRevision, branch.repository.get_revision,
391
496
self._baz._missing_import_bzr)
498
def test_missing_ancestor_reusing_history(self):
499
import_version('output', pybaz.Version(self._baz._missing_ancestor),
501
reuse_history_from=[self._baz._missing_import_imported])
503
# one commits, no files, revision identifiers of
504
# 'demo-gone@DONOTUSE%c--import--0--base-0' and
505
# 'demo@DONOTUSE%c--gone--0--base-0'
506
branch = Branch.open('output')
507
self.assertEqual(branch.revision_history(),
508
[self._baz._missing_import_bzr,
509
self._baz._missing_ancestor_bzr])
510
rev = branch.repository.get_revision(self._baz._missing_ancestor_bzr)
512
import_version('output2', pybaz.Version(self._baz._missing_ancestor),
514
reuse_history_from=[self._baz._missing_import_imported])
515
branch2 = Branch.open('output2')
516
self.assertEqual(branch.revision_history(), branch2.revision_history())
517
rev2 = branch2.repository.get_revision(self._baz._missing_ancestor_bzr)
518
# they must be the same
519
self.assertEqual(rev, rev2)
521
# must be able to get the missing base revision
522
branch.repository.get_revision(self._baz._missing_import_bzr)
524
# and we should get some expected values:
525
self.assertEqual(rev.committer, "Test User<test@example.org>")
526
self.assertEqual(rev.message,
527
"tag of demo-gone@DONOTUSE/c--import--0--base-0")
528
self.assertEqual(rev.revision_id, self._baz._missing_ancestor_bzr)
529
self.assertEqual(rev.parent_ids[0], self._baz._missing_import_bzr)
530
self.assertEqual(1, len(rev.parent_ids))
532
def test_bad_file_id(self):
533
import_version('output', pybaz.Version(self._baz._bad_id_tag), None)
535
# three commits, one files, revision identifiers of
536
# 'demo@DONOTUSE_c--import--0--base-0' ,
537
# 'demo@DONOTUSE/c--bad-id--0--base-0' ,
538
# ''demo@DONOTUSE/c--bad-id--0--patch-1'
539
branch = Branch.open('output')
540
self.assertEqual(branch.revision_history(),
541
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
542
self._baz._bad_id_tag_bzr_base,
543
self._baz._bad_id_tag_bzr])
544
rev = branch.repository.get_revision(self._baz._bad_id_tag_bzr)
545
inv = branch.repository.get_inventory(self._baz._bad_id_tag_bzr)
546
self.assertEqual(inv.path2id('path'), 'x_this_id%2fneeds%25escaping')
547
self.assertEqual('path', inv.id2path('x_this_id%2fneeds%25escaping'))
549
def test_appending_revisions_already_present(self):
550
import_version('output', pybaz.Version(self._baz._bad_id_tag), None,
553
# three commits, one files, revision identifiers of
554
# 'demo@DONOTUSE_c--import--0--base-0' ,
555
# 'demo@DONOTUSE/c--bad-id--0--base-0' ,
556
# ''demo@DONOTUSE/c--bad-id--0--patch-1'
557
branch = Branch.open('output')
558
self.assertEqual(branch.revision_history(),
559
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
560
self._baz._bad_id_tag_bzr_base])
561
branch.set_revision_history(
562
['Arch-1:demo@DONOTUSE%c--import--0--base-0'])
564
branch = Branch.open('output')
565
self.assertEqual(branch.revision_history(),
566
['Arch-1:demo@DONOTUSE%c--import--0--base-0'])
568
import_version('output', pybaz.Version(self._baz._bad_id_tag), None)
569
branch = Branch.open('output')
570
self.assertEqual(branch.revision_history(),
571
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
572
self._baz._bad_id_tag_bzr_base,
573
self._baz._bad_id_tag_bzr])
574
rev = branch.repository.get_revision(self._baz._bad_id_tag_bzr)
575
inv = branch.repository.get_inventory(self._baz._bad_id_tag_bzr)
576
self.assertEqual(inv.path2id('path'), 'x_this_id%2fneeds%25escaping')
577
self.assertEqual('path', inv.id2path('x_this_id%2fneeds%25escaping'))
579
def test_appending_revisions_all_already_present(self):
580
import_version('output', pybaz.Version(self._baz._bad_id_tag), None)
582
# three commits, one files, revision identifiers of
583
# 'demo@DONOTUSE_c--import--0--base-0' ,
584
# 'demo@DONOTUSE/c--bad-id--0--base-0' ,
585
# ''demo@DONOTUSE/c--bad-id--0--patch-1'
586
branch = Branch.open('output')
587
self.assertEqual(branch.revision_history(),
588
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
589
self._baz._bad_id_tag_bzr_base,
590
self._baz._bad_id_tag_bzr])
591
branch.set_revision_history(
592
['Arch-1:demo@DONOTUSE%c--import--0--base-0'])
594
branch = Branch.open('output')
595
self.assertEqual(branch.revision_history(),
596
['Arch-1:demo@DONOTUSE%c--import--0--base-0'])
598
import_version('output', pybaz.Version(self._baz._bad_id_tag), None)
599
branch = Branch.open('output')
600
self.assertEqual(branch.revision_history(),
601
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
602
self._baz._bad_id_tag_bzr_base,
603
self._baz._bad_id_tag_bzr])
604
rev = branch.repository.get_revision(self._baz._bad_id_tag_bzr)
605
inv = branch.repository.get_inventory(self._baz._bad_id_tag_bzr)
606
self.assertEqual(inv.path2id('path'), 'x_this_id%2fneeds%25escaping')
607
self.assertEqual('path', inv.id2path('x_this_id%2fneeds%25escaping'))
609
def test_inbranch_conversion(self):
610
import_version('output', pybaz.Version(self._baz._inbranch_tag), None)
612
# three commits, no files, revision identifiers of
613
# 'demo@DONOTUSE_c--import--0--base-0' and
614
# self._baz._inbranch_tag_base_bzr
615
# self._baz._inbranch_tag_head_bzr
617
branch = Branch.open('output')
618
self.assertEqual(branch.revision_history(),
619
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
620
self._baz._inbranch_tag_base_bzr,
621
self._baz._inbranch_tag_head_bzr])
623
import_version('output2', pybaz.Version(self._baz._inbranch_tag), None)
624
branch2 = Branch.open('output2')
626
self.assertEqual(branch.revision_history(), branch2.revision_history())
627
# check revisions in the history.
628
rev = branch.repository.get_revision(self._baz._inbranch_tag_base_bzr)
629
rev2 = branch2.repository.get_revision(self._baz._inbranch_tag_base_bzr)
630
# they must be the same
631
self.assertEqual(rev, rev2)
632
# and we should get some expected values:
633
self.assertEqual(rev.committer, "Test User<test@example.org>")
634
self.assertEqual(rev.message, "tag of demo@DONOTUSE/c--import--0--base-0")
635
self.assertEqual(rev.revision_id, self._baz._inbranch_tag_base_bzr)
637
# check next revisions in the history.
638
rev = branch.repository.get_revision(self._baz._inbranch_tag_head_bzr)
639
rev2 = branch2.repository.get_revision(self._baz._inbranch_tag_head_bzr)
640
# they must be the same
641
self.assertEqual(rev, rev2)
642
# and we should get some expected values:
643
self.assertEqual(rev.committer, "Test User<test@example.org>")
644
self.assertEqual(rev.message, "tag of demo@DONOTUSE/c--inbranch-tag--0--base-0")
645
self.assertEqual(rev.revision_id, self._baz._inbranch_tag_head_bzr)
646
self.assertEqual(rev.parent_ids,
647
[self._baz._inbranch_tag_base_bzr])
649
def test_no_commits_same_as_missing(self):
652
branch = bzrlib.bzrdir.BzrDir.create_branch_convenience(path)
653
import_version(path, pybaz.Version(self._baz._import), None)
655
# one commit, revision identifier of
656
# 'demo@DONOTUSE_c--import--0--base-0'
657
self.assertEqual(branch.revision_history(),
658
['Arch-1:demo@DONOTUSE%c--import--0--base-0'])
394
661
class TestNamespacePrevious(TestCase):
482
757
command = cmd_baz_import()
483
758
command.run(os.path.join(self._tmpdir, 'output'), 'demo@DONOTUSE')
484
759
self.failUnless(os.path.exists(os.path.join(self._tmpdir,'output')))
485
self.failUnless(os.path.exists(os.path.join(self._tmpdir,'output', 'c','+trunk')))
486
self.failUnless(os.path.exists(os.path.join(self._tmpdir,'output', 'c1', '0.2','branch')))
488
len(list(os.walk(os.path.join(self._tmpdir,'output')))))
760
self.failUnless(os.path.exists(os.path.join(self._tmpdir,'output',
762
self.failUnless(os.path.exists(os.path.join(self._tmpdir,'output',
763
'c1', '0.2','branch')))
764
default_format = repository.RepositoryFormat.get_default_format()
765
if getattr(default_format, 'rich_root_data', False):
769
walk_len = len(list(os.walk(os.path.join(self._tmpdir,'output'))))
770
self.assertEqual(num_files, walk_len)
490
772
def test_run_twice(self):
491
773
self.make_import('c--0')
492
774
command = cmd_baz_import()
493
775
command.run(os.path.join(self._tmpdir, 'output'), 'demo@DONOTUSE')
494
776
command.run(os.path.join(self._tmpdir, 'output'), 'demo@DONOTUSE')
778
def test_accepts_reuse_history(self):
779
self.make_import('c--0')
780
self.run_bzr('baz-import', os.path.join(self._tmpdir, 'output'),
781
'demo@DONOTUSE', '.', '.')
783
def test_does_not_need_reuse_history(self):
784
self.make_import('c--0')
785
self.run_bzr('baz-import', os.path.join(self._tmpdir, 'output'),
788
def test_does_not_need_reuse_history(self):
789
self.make_import('c--0')
790
self.run_bzr('baz-import', os.path.join(self._tmpdir, 'output'),
793
def test_encoding_flag(self):
794
self.make_import('c--0')
795
self.run_bzr('baz-import', os.path.join(self._tmpdir, 'output'),
797
self.assertEqual(['Arch-1:demo@DONOTUSE%c--0--base-0'],
798
Branch.open(os.path.join(self._tmpdir,
799
'output/c/+trunk')).revision_history())
800
self.run_bzr('baz-import', os.path.join(self._tmpdir, 'output2'),
801
'demo@DONOTUSE', '--encoding', 'utf-8')
802
self.assertEqual(['Arch-1-utf-8:demo@DONOTUSE%c--0--base-0'],
803
Branch.open(os.path.join(self._tmpdir,
804
'output2/c/+trunk')).revision_history())
805
self.run_bzr('baz-import-branch', os.path.join(self._tmpdir, 'output3'),
806
'demo@DONOTUSE/c--0')
807
self.assertEqual(['Arch-1:demo@DONOTUSE%c--0--base-0'],
808
Branch.open(os.path.join(self._tmpdir,
809
'output3')).revision_history())
810
self.run_bzr('baz-import-branch', os.path.join(self._tmpdir,
811
'output4'), 'demo@DONOTUSE/c--0', '--encoding', 'utf-8')
812
self.assertEqual(['Arch-1-utf-8:demo@DONOTUSE%c--0--base-0'],
813
Branch.open(os.path.join(self._tmpdir,
814
'output4')).revision_history())