1
# Copyright (C) 2005 Canonical Limited
2
# Authors: Robert Collins <robert.collins@canonical.com>
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; either version 2 of the License, or
7
# (at your option) any later version.
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
# GNU General Public License for more details.
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
from bzrlib.tests import TestCaseInTempDir, TestCase
19
from bzrlib.osutils import has_symlinks
25
from bzrlib.plugins.bzrtools.baz_import import (import_version, revision_id,
27
from bzrlib.errors import NoSuchRevision
29
from StringIO import StringIO
31
from testresources import (TestResource, TestLoader, OptimisingTestSuite,
34
from bzrlib.plugins.bzrtools.fai import namespace_previous
35
from bzrlib.branch import Branch
39
from unittest import TestSuite
41
return TestLoader().loadTestsFromName(__name__)
44
class BazTreeResource(TestResource):
47
os.environ['HOME'] = self._oldhome
48
shutil.rmtree(self._tmpdir)
51
self._tmpdir = tempfile.mkdtemp()
52
self._homedir = os.path.join(self._tmpdir, 'home')
53
self._oldhome = os.environ['HOME']
54
os.mkdir(self._homedir)
55
os.environ['HOME'] = self._homedir
57
self._archiveroot = os.path.join(self._tmpdir, 'archive')
58
self._archive = pybaz.make_archive('demo@DONOTUSE', str(self._archiveroot))
59
pybaz.set_my_id("Test User<test@example.org>")
61
self.make_empty_import()
63
self._empty_tag = 'demo@DONOTUSE/c--empty-tag--0'
64
self._empty_tag_bzr = revision_id(self._empty_tag + '--base-0')
65
pybaz.Revision('demo@DONOTUSE/c--import--0--base-0').make_continuation(
66
pybaz.Version(self._empty_tag))
68
self._empty_merged_tag = 'demo@DONOTUSE/c--empty-merged-tag--0'
69
self._empty_merged_tag_bzr_base = revision_id(self._empty_merged_tag
71
self._empty_merged_tag_bzr = revision_id(self._empty_merged_tag
73
pybaz.Revision('demo@DONOTUSE/c--import--0--base-0').make_continuation(
74
pybaz.Version(self._empty_merged_tag))
75
tree = pybaz.Revision(self._empty_merged_tag + '--base-0').get(
76
os.path.join(self._tmpdir, 'tree'))
77
tree.star_merge(self._empty_tag,
78
pybaz.Version('demo@DONOTUSE/c--import--0'))
79
msg = tree.log_message()
80
msg["summary"]="did a merge, yarh"
82
shutil.rmtree(os.path.join(self._tmpdir, 'tree'))
84
# tree, two commits, includes merge of other branch
85
self._empty_merged_tag_2 = 'demo@DONOTUSE/c--empty-tag-2--0'
86
self._empty_merged_tag_2_bzr_base = revision_id(self._empty_merged_tag_2 + '--base-0')
87
self._empty_merged_tag_2_bzr = revision_id(self._empty_merged_tag_2 + '--patch-1')
88
pybaz.Revision('demo@DONOTUSE/c--import--0--base-0').make_continuation(
89
pybaz.Version(self._empty_merged_tag_2))
90
tree = pybaz.Revision(self._empty_merged_tag_2 + '--base-0').get (
91
os.path.join(self._tmpdir, 'tree'))
92
tree.star_merge(self._empty_merged_tag,
93
pybaz.Version('demo@DONOTUSE/c--import--0'))
94
msg = tree.log_message()
95
msg["summary"] = "merge in a merged tree."
97
shutil.rmtree(os.path.join(self._tmpdir, 'tree'))
99
self._bad_id_tag = 'demo@DONOTUSE/c--bad-id--0'
100
self._bad_id_tag_bzr_base = revision_id(self._bad_id_tag + '--base-0')
101
self._bad_id_tag_bzr = revision_id(self._bad_id_tag + '--patch-1')
102
pybaz.Revision('demo@DONOTUSE/c--import--0--base-0').make_continuation(
103
pybaz.Version(self._bad_id_tag))
104
tree = pybaz.Revision(self._bad_id_tag + '--base-0').get(
105
os.path.join(self._tmpdir, 'tree'))
106
from bzrlib.plugins.bzrtools.baz_import import add_file
107
add_file(os.path.join(self._tmpdir,'tree/path'), 'text', 'this_id/needs%escaping')
108
msg = tree.log_message()
109
msg["summary"] = "commit something which needs escaping."
111
shutil.rmtree(os.path.join(self._tmpdir, 'tree'))
113
self.make_import_symlink()
114
self.make_missing_ancestor()
116
def make_import_symlink(self):
117
self._import_symlink = 'demo@DONOTUSE/c--import-symlink--0'
118
self._import_symlink_bzr = revision_id(self._import_symlink + '--base-0')
119
os.mkdir(os.path.join(self._tmpdir, 'tree'))
120
tree = pybaz.init_tree(os.path.join(self._tmpdir, 'tree'),
121
self._import_symlink)
122
os.symlink('missing-file-name',
123
os.path.join(self._tmpdir, 'tree', 'alink'))
124
tree.add_tag('alink')
125
id_file = open(os.path.join(tree, '.arch-ids', 'alink.id'), 'w')
126
id_file.write('symlink_tag\n')
128
msg = tree.log_message()
129
msg["summary"] = "Import with a symlink"
131
shutil.rmtree(os.path.join(self._tmpdir, 'tree'))
133
def make_empty_import(self):
134
self._import = 'demo@DONOTUSE/c--import--0'
135
os.mkdir(os.path.join(self._tmpdir, 'tree'))
136
tree = pybaz.init_tree(os.path.join(self._tmpdir, 'tree'), self._import)
137
msg = tree.log_message()
138
msg["summary"] = "I am importing now"
140
shutil.rmtree(os.path.join(self._tmpdir, 'tree'))
142
def make_missing_ancestor(self):
143
self._archivegoneroot = os.path.join(self._tmpdir, 'archivegone')
144
self._archive = pybaz.make_archive('demo-gone@DONOTUSE',
145
str(self._archivegoneroot))
146
self._missing_import = 'demo-gone@DONOTUSE/c--import--0'
147
self._missing_import_bzr = revision_id(self._missing_import
149
self._missing_ancestor = 'demo@DONOTUSE/c--gone--0'
150
self._missing_ancestor_bzr = revision_id(self._missing_ancestor
152
os.mkdir(os.path.join(self._tmpdir, 'tree'))
153
tree = pybaz.init_tree(os.path.join(self._tmpdir, 'tree'),
154
self._missing_import)
155
msg = tree.log_message()
156
msg["summary"] = "I am importing now"
158
shutil.rmtree(os.path.join(self._tmpdir, 'tree'))
159
# tag into the kept archive
160
pybaz.Revision(self._missing_import + '--base-0').make_continuation(
161
pybaz.Version(self._missing_ancestor))
163
# make an import for testing history-reuse logic.
166
# note the use of a namespace layout here.
167
self._missing_import_imported = os.path.join(self._tmpdir,
169
os.mkdir(os.path.join(self._tmpdir, 'archivegone-bzr'))
170
os.mkdir(os.path.join(self._tmpdir, 'archivegone-bzr', 'c'))
171
import_version(os.path.join(self._tmpdir, 'archivegone-bzr',
173
pybaz.Version(self._missing_import),
175
# and make it inaccessible
176
pybaz.Archive('demo-gone@DONOTUSE').unregister()
179
def _makeResource(self):
180
return BazTreeResource()
183
def _cleanResource(self, resource):
187
class TestImportBranch(TestCaseInTempDir):
189
_resources = [("_baz", BazTreeResource)]
192
TestCaseInTempDir.setUp(self)
193
ResourcedTestCase.setUpResources(self)
194
os.environ['HOME'] = self._baz._homedir
195
self.output = StringIO()
198
ResourcedTestCase.tearDownResources(self)
199
TestCaseInTempDir.tearDown(self)
201
def collect(self, text):
202
self.output.write(text)
203
self.output.write("\n")
205
def test_import_empty(self):
206
import_version('output', pybaz.Version(self._baz._import), self.collect)
208
# one commit, no files, revision identifier of 'demo@DONOTUSE_c--import--0--base-0'
209
branch = Branch.open('output')
210
self.assertEqual(branch.revision_history(),
211
['Arch-1:demo@DONOTUSE%c--import--0--base-0'])
212
rev = branch.repository.get_revision('Arch-1:demo@DONOTUSE%c--import--0--base-0')
214
import_version('output2', pybaz.Version('demo@DONOTUSE/c--import--0'),
216
branch2 = Branch.open('output2')
217
self.assertEqual(branch.revision_history(), branch2.revision_history())
218
rev2 = branch2.repository.get_revision('Arch-1:demo@DONOTUSE%c--import--0--base-0')
219
# they must be the same
220
self.assertEqual(rev, rev2)
222
# and we should get some expected values:
223
self.assertEqual(rev.committer, "Test User<test@example.org>")
224
self.assertEqual(rev.message, "I am importing now")
225
self.assertEqual(rev.revision_id,
226
"Arch-1:demo@DONOTUSE%c--import--0--base-0")
228
def test_empty_tagged(self):
229
import_version('output', pybaz.Version(self._baz._empty_tag),
232
# two commits, no files, revision identifiers of
233
# 'demo@DONOTUSE_c--import--0--base-0' and
234
# self._baz._empty_tag_bzr
235
branch = Branch.open('output')
236
self.assertEqual(branch.revision_history(),
237
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
238
self._baz._empty_tag_bzr])
239
rev = branch.repository.get_revision(self._baz._empty_tag_bzr)
241
import_version('output2', pybaz.Version(self._baz._empty_tag),
243
branch2 = Branch.open('output2')
244
self.assertEqual(branch.revision_history(), branch2.revision_history())
245
rev2 = branch2.repository.get_revision(self._baz._empty_tag_bzr)
246
# they must be the same
247
self.assertEqual(rev, rev2)
249
# and we should get some expected values:
250
self.assertEqual(rev.committer, "Test User<test@example.org>")
251
self.assertEqual(rev.message, "tag of demo@DONOTUSE/c--import--0--base-0")
252
self.assertEqual(rev.revision_id, self._baz._empty_tag_bzr)
254
def test_empty_merged_tagged(self):
255
import_version('output', pybaz.Version(self._baz._empty_merged_tag),
258
# two commits, no files, revision identifiers of
259
# 'demo@DONOTUSE_c--import--0--base-0' and
260
# self._baz._empty_merged_tag_bzr_base
261
# self._baz._empty_merged_tag_bzr
262
# and a merged revision from the latter of
263
# self._baz._empty_tag_bzr
264
branch = Branch.open('output')
265
self.assertEqual(branch.revision_history(),
266
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
267
self._baz._empty_merged_tag_bzr_base,
268
self._baz._empty_merged_tag_bzr])
270
import_version('output2', pybaz.Version(self._baz._empty_merged_tag),
272
branch2 = Branch.open('output2')
273
# and import what we should be merged up against for checking with.
274
import_version('output3', pybaz.Version(self._baz._empty_tag),
276
branch3 = Branch.open('output3')
278
self.assertEqual(branch.revision_history(), branch2.revision_history())
279
self.assertNotEqual(branch.revision_history(), branch3.revision_history())
280
# check revisions in the history.
281
rev = branch.repository.get_revision(self._baz._empty_merged_tag_bzr_base)
282
rev2 = branch2.repository.get_revision(self._baz._empty_merged_tag_bzr_base)
283
# they must be the same
284
self.assertEqual(rev, rev2)
285
# and we should get some expected values:
286
self.assertEqual(rev.committer, "Test User<test@example.org>")
287
self.assertEqual(rev.message, "tag of demo@DONOTUSE/c--import--0--base-0")
288
self.assertEqual(rev.revision_id, self._baz._empty_merged_tag_bzr_base)
289
self.assertEqual(['Arch-1:demo@DONOTUSE%c--import--0--base-0'],
292
# check next revisions in the history.
293
rev = branch.repository.get_revision(self._baz._empty_merged_tag_bzr)
294
rev2 = branch2.repository.get_revision(self._baz._empty_merged_tag_bzr)
295
# they must be the same
296
self.assertEqual(rev, rev2)
297
# and we should get some expected values:
298
self.assertEqual(rev.committer, "Test User<test@example.org>")
299
self.assertEqual(rev.message, "did a merge, yarh")
300
self.assertEqual(rev.revision_id, self._baz._empty_merged_tag_bzr)
301
self.assertEqual(rev.parent_ids[0],
302
self._baz._empty_merged_tag_bzr_base)
303
self.assertEqual(rev.parent_ids[1], self._baz._empty_tag_bzr)
305
# this tree should have nothing missing from that tree.
306
# FIXME there is no code for this right now.
307
# self.assertEqual(branch.missing_revisions(branch3), [])
309
def test_merge_branch_with_merges(self):
310
import_version('output', pybaz.Version(self._baz._empty_merged_tag_2),
313
# two commits, no files, revision identifiers of
314
# 'demo@DONOTUSE_c--import--0--base-0' and
315
# self._baz._empty_merged_tag_2_bzr_base
316
# self._baz._empty_merged_tag_2_bzr
317
# and a merged revision from the latter of
318
# self._baz._empty_merged_tag_bzr
319
branch = Branch.open('output')
320
self.assertEqual(branch.revision_history(),
321
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
322
self._baz._empty_merged_tag_2_bzr_base,
323
self._baz._empty_merged_tag_2_bzr])
325
import_version('output2', pybaz.Version(self._baz._empty_merged_tag_2),
327
branch2 = Branch.open('output2')
328
# and import what we should be merged up against for checking with.
329
import_version('output3', pybaz.Version(self._baz._empty_merged_tag),
331
branch3 = Branch.open('output3')
333
self.assertEqual(branch.revision_history(), branch2.revision_history())
334
self.assertNotEqual(branch.revision_history(), branch3.revision_history())
335
# check revisions in the history.
336
rev = branch.repository.get_revision(self._baz._empty_merged_tag_2_bzr_base)
337
rev2 = branch2.repository.get_revision(self._baz._empty_merged_tag_2_bzr_base)
338
# they must be the same
339
self.assertEqual(rev, rev2)
340
# and we should get some expected values:
341
self.assertEqual(rev.committer, "Test User<test@example.org>")
342
self.assertEqual(rev.message, "tag of demo@DONOTUSE/c--import--0--base-0")
343
self.assertEqual(rev.revision_id, self._baz._empty_merged_tag_2_bzr_base)
345
# check next revisions in the history.
346
rev = branch.repository.get_revision(self._baz._empty_merged_tag_2_bzr)
347
rev2 = branch2.repository.get_revision(self._baz._empty_merged_tag_2_bzr)
348
# they must be the same
349
self.assertEqual(rev, rev2)
350
# and we should get some expected values:
351
self.assertEqual(rev.committer, "Test User<test@example.org>")
352
self.assertEqual(rev.message, "merge in a merged tree.")
353
self.assertEqual(rev.revision_id, self._baz._empty_merged_tag_2_bzr)
354
self.assertEqual(rev.parent_ids[0],
355
self._baz._empty_merged_tag_2_bzr_base)
356
self.assertEqual(rev.parent_ids[1],
357
self._baz._empty_merged_tag_bzr)
359
# this tree should have nothing missing from that tree.
360
# FIXME there is no code for this right now.
361
# self.assertEqual(branch.missing_revisions(branch3), [])
363
def test_import_symlink(self):
364
import_version('output', pybaz.Version(self._baz._import_symlink),
367
# one commit, no files, revision identifier of 'demo@DONOTUSE_c--import--0--base-0'
368
branch = Branch.open('output')
369
self.assertEqual(branch.revision_history(),
370
[self._baz._import_symlink_bzr])
371
rev = branch.repository.get_revision(self._baz._import_symlink_bzr)
373
import_version('output2', pybaz.Version(self._baz._import_symlink),
375
branch2 = Branch.open('output2')
376
self.assertEqual(branch.revision_history(), branch2.revision_history())
377
rev2 = branch2.repository.get_revision(self._baz._import_symlink_bzr)
378
# they must be the same
379
self.assertEqual(rev, rev2)
381
# and we should get some expected values:
382
self.assertEqual(rev.committer, "Test User<test@example.org>")
383
self.assertEqual(rev.message, "Import with a symlink")
384
self.assertEqual(rev.revision_id, self._baz._import_symlink_bzr)
386
# and we want the symlink alink with target 'missing-file-name'
387
inv = branch.repository.get_inventory(rev.revision_id)
388
self.assertEqual(inv.path2id('alink'), 'x_symlink_tag')
389
entry = inv['x_symlink_tag']
390
self.assertEqual(entry.kind, 'symlink')
391
self.assertEqual(entry.symlink_target, 'missing-file-name')
393
def test_missing_ancestor(self):
394
import_version('output', pybaz.Version(self._baz._missing_ancestor),
397
# one commits, no files, revision identifiers of
398
# 'demo@DONOTUSE_c--gone--0--base-0' and
399
# a merge of demo-gone@DONOTUSE%c--import--0
400
branch = Branch.open('output')
401
self.assertEqual(branch.revision_history(),
402
[self._baz._missing_ancestor_bzr])
403
rev = branch.repository.get_revision(self._baz._missing_ancestor_bzr)
405
import_version('output2', pybaz.Version(self._baz._missing_ancestor),
407
branch2 = Branch.open('output2')
408
self.assertEqual(branch.revision_history(), branch2.revision_history())
409
rev2 = branch2.repository.get_revision(self._baz._missing_ancestor_bzr)
410
# they must be the same
411
self.assertEqual(rev, rev2)
413
# and we should get some expected values:
414
self.assertEqual(rev.committer, "Test User<test@example.org>")
415
self.assertEqual(rev.message, "tag of demo-gone@DONOTUSE/c--import--0--base-0")
416
self.assertEqual(rev.revision_id, self._baz._missing_ancestor_bzr)
417
self.assertEqual(rev.parent_ids[0], self._baz._missing_import_bzr)
418
self.assertEqual(1, len(rev.parent_ids))
420
# must NOT be able to get the merged evision
421
self.assertRaises(NoSuchRevision, branch.repository.get_revision,
422
self._baz._missing_import_bzr)
424
def test_missing_ancestor_reusing_history(self):
425
import_version('output', pybaz.Version(self._baz._missing_ancestor),
427
reuse_history_from=[self._baz._missing_import_imported])
429
# one commits, no files, revision identifiers of
430
# 'demo-gone@DONOTUSE%c--import--0--base-0' and
431
# 'demo@DONOTUSE%c--gone--0--base-0'
432
branch = Branch.open('output')
433
self.assertEqual(branch.revision_history(),
434
[self._baz._missing_import_bzr,
435
self._baz._missing_ancestor_bzr])
436
rev = branch.repository.get_revision(self._baz._missing_ancestor_bzr)
438
import_version('output2', pybaz.Version(self._baz._missing_ancestor),
440
reuse_history_from=[self._baz._missing_import_imported])
441
branch2 = Branch.open('output2')
442
self.assertEqual(branch.revision_history(), branch2.revision_history())
443
rev2 = branch2.repository.get_revision(self._baz._missing_ancestor_bzr)
444
# they must be the same
445
self.assertEqual(rev, rev2)
447
# must be able to get the missing base revision
448
branch.repository.get_revision(self._baz._missing_import_bzr)
450
# and we should get some expected values:
451
self.assertEqual(rev.committer, "Test User<test@example.org>")
452
self.assertEqual(rev.message, "tag of demo-gone@DONOTUSE/c--import--0--base-0")
453
self.assertEqual(rev.revision_id, self._baz._missing_ancestor_bzr)
454
self.assertEqual(rev.parent_ids[0], self._baz._missing_import_bzr)
455
self.assertEqual(1, len(rev.parent_ids))
457
def test_bad_file_id(self):
458
import_version('output', pybaz.Version(self._baz._bad_id_tag),
461
# three commits, one files, revision identifiers of
462
# 'demo@DONOTUSE_c--import--0--base-0' ,
463
# 'demo@DONOTUSE/c--bad-id--0--base-0' ,
464
# ''demo@DONOTUSE/c--bad-id--0--patch-1'
465
branch = Branch.open('output')
466
self.assertEqual(branch.revision_history(),
467
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
468
self._baz._bad_id_tag_bzr_base,
469
self._baz._bad_id_tag_bzr])
470
rev = branch.repository.get_revision(self._baz._bad_id_tag_bzr)
471
inv = branch.repository.get_inventory(self._baz._bad_id_tag_bzr)
472
self.assertEqual(inv.path2id('path'), 'x_this_id%2fneeds%25escaping')
473
self.assertEqual('path', inv.id2path('x_this_id%2fneeds%25escaping'))
475
def test_appending_revisions_already_present(self):
476
import_version('output', pybaz.Version(self._baz._bad_id_tag),
477
self.collect, max_count=2)
479
# three commits, one files, revision identifiers of
480
# 'demo@DONOTUSE_c--import--0--base-0' ,
481
# 'demo@DONOTUSE/c--bad-id--0--base-0' ,
482
# ''demo@DONOTUSE/c--bad-id--0--patch-1'
483
branch = Branch.open('output')
484
self.assertEqual(branch.revision_history(),
485
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
486
self._baz._bad_id_tag_bzr_base])
487
branch.set_revision_history(
488
['Arch-1:demo@DONOTUSE%c--import--0--base-0'])
490
branch = Branch.open('output')
491
self.assertEqual(branch.revision_history(),
492
['Arch-1:demo@DONOTUSE%c--import--0--base-0'])
494
import_version('output', pybaz.Version(self._baz._bad_id_tag),
496
branch = Branch.open('output')
497
self.assertEqual(branch.revision_history(),
498
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
499
self._baz._bad_id_tag_bzr_base,
500
self._baz._bad_id_tag_bzr])
501
rev = branch.repository.get_revision(self._baz._bad_id_tag_bzr)
502
inv = branch.repository.get_inventory(self._baz._bad_id_tag_bzr)
503
self.assertEqual(inv.path2id('path'), 'x_this_id%2fneeds%25escaping')
504
self.assertEqual('path', inv.id2path('x_this_id%2fneeds%25escaping'))
506
def test_appending_revisions_all_already_present(self):
507
import_version('output', pybaz.Version(self._baz._bad_id_tag),
510
# three commits, one files, revision identifiers of
511
# 'demo@DONOTUSE_c--import--0--base-0' ,
512
# 'demo@DONOTUSE/c--bad-id--0--base-0' ,
513
# ''demo@DONOTUSE/c--bad-id--0--patch-1'
514
branch = Branch.open('output')
515
self.assertEqual(branch.revision_history(),
516
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
517
self._baz._bad_id_tag_bzr_base,
518
self._baz._bad_id_tag_bzr])
519
branch.set_revision_history(
520
['Arch-1:demo@DONOTUSE%c--import--0--base-0'])
522
branch = Branch.open('output')
523
self.assertEqual(branch.revision_history(),
524
['Arch-1:demo@DONOTUSE%c--import--0--base-0'])
526
import_version('output', pybaz.Version(self._baz._bad_id_tag),
528
branch = Branch.open('output')
529
self.assertEqual(branch.revision_history(),
530
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
531
self._baz._bad_id_tag_bzr_base,
532
self._baz._bad_id_tag_bzr])
533
rev = branch.repository.get_revision(self._baz._bad_id_tag_bzr)
534
inv = branch.repository.get_inventory(self._baz._bad_id_tag_bzr)
535
self.assertEqual(inv.path2id('path'), 'x_this_id%2fneeds%25escaping')
536
self.assertEqual('path', inv.id2path('x_this_id%2fneeds%25escaping'))
539
class TestNamespacePrevious(TestCase):
543
self.version = pybaz.Version('foo@example.com/c--b--0')
545
def test_base0_none(self):
546
self.assertEqual(namespace_previous(self.version['base-0']), None)
548
def test_patch1_base0(self):
549
self.assertEqual(namespace_previous(self.version['patch-1']),
550
self.version['base-0'])
552
def test_patch3000_patch2999(self):
553
self.assertEqual(namespace_previous(self.version['patch-3000']),
554
self.version['patch-2999'])
556
def test_version0_raises(self):
557
self.assertRaises(RuntimeError, namespace_previous,
558
self.version['version-0'])
560
def test_version1_version0(self):
561
self.assertEqual(namespace_previous(self.version['versionfix-1']),
562
self.version['version-0'])
564
def test_version3000_patch2999(self):
565
self.assertEqual(namespace_previous(self.version['versionfix-3000']),
566
self.version['versionfix-2999'])
568
class TestNamespaceMapping(TestCase):
570
def test_namespace_mapping_branch(self):
571
from bzrlib.plugins.bzrtools.baz_import import map_namespace
572
branch = pybaz.Branch('foo@example.com/c--b')
573
self.assertRaises(pybaz.errors.NamespaceError, map_namespace, branch)
574
self.assertEqual('c/b', map_namespace(branch['0']))
575
self.assertEqual('c/0.1/b', map_namespace(branch['0.1']))
577
def test_namespace_mapping_no_branch(self):
578
from bzrlib.plugins.bzrtools.baz_import import map_namespace
579
category = pybaz.Category('foo@example.com/c')
580
self.assertRaises(pybaz.errors.NamespaceError, map_namespace, category)
581
self.assertEqual('c/+trunk',
582
map_namespace(pybaz.Version("%s--0" % category)))
583
self.assertEqual('c/0.1/+trunk',
584
map_namespace(pybaz.Version('%s--0.1' % category)))
587
class TestFileIdMapping(TestCase):
589
def test_slash(self):
590
from bzrlib.plugins.bzrtools.baz_import import map_file_id
591
self.assertEqual('c%2fc', map_file_id('c/c'))
592
self.assertEqual('c%25c', map_file_id('c%c'))
595
class TestImport(TestCaseInTempDir):
598
TestCaseInTempDir.setUp(self)
599
self._oldhome = os.environ['HOME']
600
self._tmpdir = tempfile.mkdtemp()
601
self._homedir = os.path.join(self._tmpdir, 'home')
602
os.mkdir(self._homedir)
603
os.environ['HOME'] = self._homedir
604
self._archiveroot = os.path.join(self._tmpdir, 'archive')
605
self._archive = pybaz.make_archive('demo@DONOTUSE',
606
str(self._archiveroot))
609
os.environ['HOME'] = self._oldhome
610
shutil.rmtree(self._tmpdir)
611
TestCaseInTempDir.tearDown(self)
613
def make_import(self, namespace):
614
self._import = 'demo@DONOTUSE/%s' % namespace
615
os.mkdir(os.path.join(self._tmpdir, 'tree'))
616
tree = pybaz.init_tree(os.path.join(self._tmpdir, 'tree'), self._import)
617
msg = tree.log_message()
618
msg["summary"] = "I am importing now"
620
shutil.rmtree(os.path.join(self._tmpdir, 'tree'))
622
def test_cmd_exists(self):
623
from bzrlib.plugins.bzrtools.baz_import import cmd_baz_import
625
def test_empty_archive(self):
626
command = cmd_baz_import()
627
command.run(os.path.join(self._tmpdir, 'output'), 'demo@DONOTUSE')
628
self.failUnless(os.path.exists(os.path.join(self._tmpdir,'output')))
630
len(list(os.walk(os.path.join(self._tmpdir,'output')))))
632
def test_two_branches(self):
633
self.make_import('c--0')
634
self.make_import('c1--branch--0.2')
635
command = cmd_baz_import()
636
command.run(os.path.join(self._tmpdir, 'output'), 'demo@DONOTUSE')
637
self.failUnless(os.path.exists(os.path.join(self._tmpdir,'output')))
638
self.failUnless(os.path.exists(os.path.join(self._tmpdir,'output', 'c','+trunk')))
639
self.failUnless(os.path.exists(os.path.join(self._tmpdir,'output', 'c1', '0.2','branch')))
641
len(list(os.walk(os.path.join(self._tmpdir,'output')))))
643
def test_run_twice(self):
644
self.make_import('c--0')
645
command = cmd_baz_import()
646
command.run(os.path.join(self._tmpdir, 'output'), 'demo@DONOTUSE')
647
command.run(os.path.join(self._tmpdir, 'output'), 'demo@DONOTUSE')
649
def test_accepts_reuse_history(self):
650
self.make_import('c--0')
651
self.run_bzr('baz-import', os.path.join(self._tmpdir, 'output'),
652
'demo@DONOTUSE', '.', '.')
654
def test_does_not_need_reuse_history(self):
655
self.make_import('c--0')
656
self.run_bzr('baz-import', os.path.join(self._tmpdir, 'output'),