~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_upgrade.py

  • Committer: Vincent Ladeuil
  • Date: 2012-02-14 17:22:37 UTC
  • mfrom: (6466 +trunk)
  • mto: This revision was merged to the branch mainline in revision 6468.
  • Revision ID: v.ladeuil+lp@free.fr-20120214172237-7dv7er3n4uy8d5m4
Merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
from bzrlib import (
26
26
    branch,
27
27
    bzrdir,
28
 
    repository,
29
28
    tests,
30
29
    upgrade,
31
30
    workingtree,
35
34
 
36
35
class TestUpgrade(tests.TestCaseWithTransport):
37
36
 
38
 
    def test_upgrade_simple(self):
39
 
        """Upgrade simple v0.0.4 format to latest format"""
40
 
        eq = self.assertEquals
41
 
        self.build_tree_contents(_upgrade1_template)
42
 
        upgrade.upgrade(u'.')
43
 
        control = bzrdir.BzrDir.open('.')
44
 
        b = control.open_branch()
45
 
        # tsk, peeking under the covers.
46
 
        self.failUnless(
47
 
            isinstance(
48
 
                control._format,
49
 
                bzrdir.BzrDirFormat.get_default_format().__class__))
50
 
        rh = b.revision_history()
51
 
        eq(rh,
52
 
           ['mbp@sourcefrog.net-20051004035611-176b16534b086b3c',
53
 
            'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd'])
54
 
        rt = b.repository.revision_tree(rh[0])
55
 
        foo_id = 'foo-20051004035605-91e788d1875603ae'
56
 
        rt.lock_read()
57
 
        try:
58
 
            eq(rt.get_file_text(foo_id), 'initial contents\n')
59
 
        finally:
60
 
            rt.unlock()
61
 
        rt = b.repository.revision_tree(rh[1])
62
 
        rt.lock_read()
63
 
        try:
64
 
            eq(rt.get_file_text(foo_id), 'new contents\n')
65
 
        finally:
66
 
            rt.unlock()
67
 
        # check a backup was made:
68
 
        backup_dir = 'backup.bzr.~1~'
69
 
        t = self.get_transport('.')
70
 
        t.stat(backup_dir)
71
 
        t.stat(backup_dir + '/README')
72
 
        t.stat(backup_dir + '/branch-format')
73
 
        t.stat(backup_dir + '/revision-history')
74
 
        t.stat(backup_dir + '/merged-patches')
75
 
        t.stat(backup_dir + '/pending-merged-patches')
76
 
        t.stat(backup_dir + '/pending-merges')
77
 
        t.stat(backup_dir + '/branch-name')
78
 
        t.stat(backup_dir + '/branch-lock')
79
 
        t.stat(backup_dir + '/inventory')
80
 
        t.stat(backup_dir + '/stat-cache')
81
 
        t.stat(backup_dir + '/text-store')
82
 
        t.stat(backup_dir + '/text-store/foo-20051004035611-1591048e9dc7c2d4.gz')
83
 
        t.stat(backup_dir + '/text-store/foo-20051004035756-4081373d897c3453.gz')
84
 
        t.stat(backup_dir + '/inventory-store/')
85
 
        t.stat(backup_dir + '/inventory-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
86
 
        t.stat(backup_dir + '/inventory-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
87
 
        t.stat(backup_dir + '/revision-store/')
88
 
        t.stat(backup_dir + '/revision-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
89
 
        t.stat(backup_dir + '/revision-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
90
 
 
91
 
    def test_upgrade_with_ghosts(self):
92
 
        """Upgrade v0.0.4 tree containing ghost references.
93
 
 
94
 
        That is, some of the parents of revisions mentioned in the branch
95
 
        aren't present in the branch's storage.
96
 
 
97
 
        This shouldn't normally happen in branches created entirely in
98
 
        bzr, but can happen in branches imported from baz and arch, or from
99
 
        other systems, where the importer knows about a revision but not
100
 
        its contents."""
101
 
        eq = self.assertEquals
102
 
        self.build_tree_contents(_ghost_template)
103
 
        upgrade.upgrade(u'.')
104
 
        b = branch.Branch.open(u'.')
105
 
        revision_id = b.revision_history()[1]
106
 
        rev = b.repository.get_revision(revision_id)
107
 
        eq(len(rev.parent_ids), 2)
108
 
        eq(rev.parent_ids[1], 'wibble@wobble-2')
109
 
 
110
 
    def test_upgrade_makes_dir_weaves(self):
111
 
        self.build_tree_contents(_upgrade_dir_template)
112
 
        old_repodir = bzrdir.BzrDir.open_unsupported('.')
113
 
        old_repo_format = old_repodir.open_repository()._format
114
 
        upgrade.upgrade('.')
115
 
        # this is the path to the literal file. As format changes
116
 
        # occur it needs to be updated. FIXME: ask the store for the
117
 
        # path.
118
 
        repo = repository.Repository.open('.')
119
 
        # it should have changed the format
120
 
        self.assertNotEqual(old_repo_format.__class__, repo._format.__class__)
121
 
        # and we should be able to read the names for the file id
122
 
        # 'dir-20051005095101-da1441ea3fa6917a'
123
 
        repo.lock_read()
124
 
        self.addCleanup(repo.unlock)
125
 
        text_keys = repo.texts.keys()
126
 
        dir_keys = [key for key in text_keys if key[0] ==
127
 
                'dir-20051005095101-da1441ea3fa6917a']
128
 
        self.assertNotEqual([], dir_keys)
129
 
 
130
 
    def test_upgrade_to_meta_sets_workingtree_last_revision(self):
131
 
        self.build_tree_contents(_upgrade_dir_template)
132
 
        upgrade.upgrade('.', bzrdir.BzrDirMetaFormat1())
133
 
        tree = workingtree.WorkingTree.open('.')
134
 
        self.assertEqual([tree.branch.revision_history()[-1]],
135
 
            tree.get_parent_ids())
136
 
 
137
 
    def test_upgrade_v6_to_meta_no_workingtree(self):
138
 
        # Some format6 branches do not have checkout files. Upgrading
139
 
        # such a branch to metadir must not setup a working tree.
140
 
        self.build_tree_contents(_upgrade1_template)
141
 
        upgrade.upgrade('.', bzrdir.BzrDirFormat6())
142
 
        t = self.get_transport('.')
143
 
        t.delete_multi(['.bzr/pending-merges', '.bzr/inventory'])
144
 
        self.assertFalse(t.has('.bzr/stat-cache'))
145
 
        # XXX: upgrade fails if a backup.bzr is already present
146
 
        # -- David Allouche 2006-08-11
147
 
        t.delete_tree('backup.bzr.~1~')
148
 
        # At this point, we have a format6 branch without checkout files.
149
 
        upgrade.upgrade('.', bzrdir.BzrDirMetaFormat1())
150
 
        # The upgrade should not have set up a working tree.
151
 
        control = bzrdir.BzrDir.open('.')
152
 
        self.assertFalse(control.has_workingtree())
153
 
        # We have covered the scope of this test, we may as well check that
154
 
        # upgrade has not eaten our data, even if it's a bit redundant with
155
 
        # other tests.
156
 
        self.failUnless(isinstance(control._format, bzrdir.BzrDirMetaFormat1))
157
 
        b = control.open_branch()
158
 
        self.assertEquals(b.revision_history(),
159
 
           ['mbp@sourcefrog.net-20051004035611-176b16534b086b3c',
160
 
            'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd'])
161
 
 
162
37
    def test_upgrade_rich_root(self):
163
38
        tree = self.make_branch_and_tree('tree', format='rich-root')
164
39
        rev_id = tree.commit('first post')
166
41
 
167
42
    def test_convert_branch5_branch6(self):
168
43
        b = self.make_branch('branch', format='knit')
169
 
        b.set_revision_history(['AB', 'CD'])
 
44
        b._set_revision_history(['CD'])
170
45
        b.set_parent('file:///EF')
171
46
        b.set_bound_location('file:///GH')
172
47
        b.set_push_location('file:///IJ')
178
53
        self.assertEqual('CD', new_branch.last_revision())
179
54
        self.assertEqual('file:///EF', new_branch.get_parent())
180
55
        self.assertEqual('file:///GH', new_branch.get_bound_location())
181
 
        branch_config = new_branch.get_config()._get_branch_data_config()
182
 
        self.assertEqual('file:///IJ',
183
 
            branch_config.get_user_option('push_location'))
 
56
        branch_config = new_branch.get_config_stack()
 
57
        self.assertEqual('file:///IJ', branch_config.get('push_location'))
184
58
 
185
59
        b2 = self.make_branch('branch2', format='knit')
186
60
        converter = b2.bzrdir._format.get_converter(target)
233
107
        self.assertEqual(rev_id, new_tree.last_revision())
234
108
        for path in ['basis-inventory-cache', 'inventory', 'last-revision',
235
109
            'pending-merges', 'stat-cache']:
236
 
            self.failIfExists('tree/.bzr/checkout/' + path)
 
110
            self.assertPathDoesNotExist('tree/.bzr/checkout/' + path)
237
111
 
238
112
    def test_convert_knit_merges_dirstate(self):
239
113
        tree = self.make_branch_and_tree('tree', format='knit')
251
125
        self.assertEqual([rev_id2, rev_id3], new_tree.get_parent_ids())
252
126
        for path in ['basis-inventory-cache', 'inventory', 'last-revision',
253
127
            'pending-merges', 'stat-cache']:
254
 
            self.failIfExists('tree/.bzr/checkout/' + path)
255
 
 
256
 
 
257
 
_upgrade1_template = \
258
 
     [
259
 
     ('foo', 'new contents\n'),
260
 
     ('.bzr/',),
261
 
     ('.bzr/README',
262
 
      'This is a Bazaar control directory.\n'
263
 
      'Do not change any files in this directory.\n'
264
 
      'See http://bazaar.canonical.com/ for more information about Bazaar.\n'),
265
 
     ('.bzr/branch-format', 'Bazaar-NG branch, format 0.0.4\n'),
266
 
     ('.bzr/revision-history',
267
 
      'mbp@sourcefrog.net-20051004035611-176b16534b086b3c\n'
268
 
      'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd\n'),
269
 
     ('.bzr/merged-patches', ''),
270
 
     ('.bzr/pending-merged-patches', ''),
271
 
     ('.bzr/branch-name', ''),
272
 
     ('.bzr/branch-lock', ''),
273
 
     ('.bzr/pending-merges', ''),
274
 
     ('.bzr/inventory',
275
 
      '<inventory>\n'
276
 
      '<entry file_id="foo-20051004035605-91e788d1875603ae" kind="file" name="foo" />\n'
277
 
      '</inventory>\n'),
278
 
     ('.bzr/stat-cache',
279
 
      '### bzr hashcache v5\n'
280
 
      'foo// be9f309239729f69a6309e970ef24941d31e042c 13 1128398176 1128398176 303464 770\n'),
281
 
     ('.bzr/text-store/',),
282
 
     ('.bzr/text-store/foo-20051004035611-1591048e9dc7c2d4.gz',
283
 
      '\x1f\x8b\x08\x00[\xfdAC\x02\xff\xcb\xcc\xcb,\xc9L\xccQH\xce\xcf+I\xcd+)\xe6\x02\x00\xdd\xcc\xf90\x11\x00\x00\x00'),
284
 
     ('.bzr/text-store/foo-20051004035756-4081373d897c3453.gz',
285
 
      '\x1f\x8b\x08\x00\xc4\xfdAC\x02\xff\xcbK-WH\xce\xcf+I\xcd+)\xe6\x02\x00g\xc3\xdf\xc9\r\x00\x00\x00'),
286
 
     ('.bzr/inventory-store/',),
287
 
     ('.bzr/inventory-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz',
288
 
      '\x1f\x8b\x08\x00[\xfdAC\x02\xffm\x8f\xcd\n\xc20\x10\x84\xef>E\xc8\xbdt7?M\x02\xad\xaf"\xa1\x99`P[\xa8E\xacOo\x14\x05\x0f\xdef\xe1\xfbv\x98\xbeL7L\xeb\xbcl\xfb]_\xc3\xb2\x89\\\xce8\x944\xc8<\xcf\x8d"\xb2LdH\xdb\x8el\x13\x18\xce\xfb\xc4\xde\xd5SGHq*\xd3\x0b\xad\x8e\x14S\xbc\xe0\xadI\xb1\xe2\xbe\xfe}\xc2\xdc\xb0\rL\xc6#\xa4\xd1\x8d*\x99\x0f}=F\x1e$8G\x9d\xa0\x02\xa1rP9\x01c`FV\xda1qg\x98"\x02}\xa5\xf2\xa8\x95\xec\xa4h\xeb\x80\xf6g\xcd\x13\xb3\x01\xcc\x98\xda\x00\x00\x00'),
289
 
     ('.bzr/inventory-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz',
290
 
      '\x1f\x8b\x08\x00\xc4\xfdAC\x02\xffm\x8f\xc1\n\xc20\x10D\xef~E\xc8\xbd\xb8\x9bM\x9a,\xb4\xfe\x8a\xc4f\x83Am\xa1\x16\xb1~\xbdQ\x14<x\x9b\x81y3LW\xc6\x9b\x8c\xcb4\xaf\xbbMW\xc5\xbc\xaa\\\xce\xb2/\xa9\xd7y\x9a\x1a\x03\xe0\x10\xc0\x02\xb9\x16\\\xc3(>\x84\x84\xc1WKQ\xb4:\x95\xf1\x15\xad\x8cVc\xbc\xc8\x1b\xd3j\x91\xfb\xf2\xaf\xa4r\x8d\x85\x80\xe4)\x05\xf6\x03YG\x9f\xf4\xf5\x18\xb1\xd7\x07\xe1L\xc0\x86\xd8\x1b\xce-\xc7\xb6:a\x0f\x92\x8de\x8b\x89P\xc0\x9a\xe1\x0b\x95G\x9d\xc4\xda\xb1\xad\x07\xb6?o\x9e\xb5\xff\xf0\xf9\xda\x00\x00\x00'),
291
 
     ('.bzr/revision-store/',),
292
 
     ('.bzr/revision-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz',
293
 
      '\x1f\x8b\x08\x00[\xfdAC\x02\xff\x9d\x8eKj\xc30\x14E\xe7^\x85\xd0 \xb3$\xefI\xd1\x8f\xd8\xa6\x1b(t\x07E?\xbb\x82H\n\xb2\x1ahW\xdfB1\x14:\xeb\xf4r\xee\xbdgl\xf1\x91\xb6T\x0b\xf15\xe7\xd4{l\x13}\xb6\xad\xa7B^j\xbd\x91\xc3\xad_\xb3\xbb?m\xf5\xbd\xf9\xb8\xb4\xba\x9eJ\xec\x87\xb5_)I\xe5\x11K\xaf\xed\xe35\x85\x89\xfe\xa5\x8e\x0c@ \xc0\x05\xb8\x90\x88GT\xd2\xa1\x14\xfc\xe2@K\xc7\xfd\xef\x85\xed\xcd\xe2D\x95\x8d\x1a\xa47<\x02c2\xb0 \xbc\xd0\x8ay\xa3\xbcp\x8a\x83\x12A3\xb7XJv\xef\x7f_\xf7\x94\xe3\xd6m\xbeO\x14\x91in4*<\x812\x88\xc60\xfc\x01>k\x89\x13\xe5\x12\x00\xe8<\x8c\xdf\x8d\xcd\xaeq\xb6!\x90\xa5\xd6\xf1\xbc\x07\xc3x\xde\x85\xe6\xe1\x0b\xc8\x8a\x98\x03T\x01\x00\x00'),
294
 
     ('.bzr/revision-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz',
295
 
      '\x1f\x8b\x08\x00\xc4\xfdAC\x02\xff\x9d\x90Kj\x031\x0c\x86\xf79\xc5\xe0Ev\xe9\xc8o\x9b\xcc\x84^\xa0\xd0\x1b\x14\xbf&5d\xec`\xbb\x81\xf6\xf45\x84\xa4\x81\xaeZ\xa1\x85\x84^\xdf\xaf\xa9\x84K\xac1\xa7\xc1\xe5u\x8d\xad\x852\xa3\x17SZL\xc3k\xce\xa7a{j\xfb\xd5\x9e\x9fk\xfe(.,%\x1f\x9fRh\xdbc\xdb\xa3!\xa6KH-\x97\xcf\xb7\xe8g\xf4\xbbkG\x008\x06`@\xb9\xe4bG(_\x88\x95\xde\xf9n\xca\xfb\xc7\r\xf5\xdd\xe0\x19\xa9\x85)\x81\xf5"\xbd\x04j\xb8\x02b\xa8W\\\x0b\xc9\x14\xf4\xbc\xbb\xd7\xd6H4\xdc\xb8\xff}\xba\xc55\xd4f\xd6\xf3\x8c0&\x8ajE\xa4x\xe2@\xa5\xa6\x9a\xf3k\xc3WNaFT\x00\x00:l\xa6>Q\xcd1\x1cjp9\xf9;\xc34\xde\n\x9b\xe9lJWT{t\',a\xf9\x0b\xae\xc0x\x87\xa5\xb0Xp\xca,(a\xa9{\xd0{}\xd4\x12\x04(\xc5\xbb$\xc5$V\xceaI\x19\x01\xa2\x1dh\xed\x82d\x8c.\xccr@\xc3\xd8Q\xc6\x1f\xaa\xf1\xb6\xe8\xb0\xf9\x06QR\r\xf9\xfc\x01\x00\x00')]
296
 
 
297
 
 
298
 
_ghost_template = [
299
 
    ( './foo',
300
 
        'hello\n'
301
 
    ),
302
 
    ( './.bzr/', ),
303
 
    ( './.bzr/README',
304
 
      'This is a Bazaar control directory.\n'
305
 
      'Do not change any files in this directory.\n'
306
 
      'See http://bazaar.canonical.com/ for more information about Bazaar.\n'
307
 
    ),
308
 
    ( './.bzr/branch-format',
309
 
        'Bazaar-NG branch, format 0.0.4\n'
310
 
    ),
311
 
    ( './.bzr/branch-lock',
312
 
        ''
313
 
    ),
314
 
    ( './.bzr/branch-name',
315
 
        ''
316
 
    ),
317
 
    ( './.bzr/inventory',
318
 
        '<inventory>\n'
319
 
        '<entry file_id="foo-20051004104918-0379cb7c76354cde" kind="file" name="foo" />\n'
320
 
        '</inventory>\n'
321
 
    ),
322
 
    ( './.bzr/merged-patches',
323
 
        ''
324
 
    ),
325
 
    ( './.bzr/pending-merged-patches',
326
 
        ''
327
 
    ),
328
 
    ( './.bzr/pending-merges',
329
 
        ''
330
 
    ),
331
 
    ( './.bzr/revision-history',
332
 
        'mbp@sourcefrog.net-20051004104921-a98be2278dd30b7b\n'
333
 
        'mbp@sourcefrog.net-20051004104937-c9b7a7bfcc0bb22d\n'
334
 
    ),
335
 
    ( './.bzr/stat-cache',
336
 
        '### bzr hashcache v5\n'
337
 
        'foo// f572d396fae9206628714fb2ce00f72e94f2258f 6 1128422956 1128422956 306900 770\n'
338
 
    ),
339
 
    ( './.bzr/text-store/', ),
340
 
    ( './.bzr/text-store/foo-20051004104921-8de8118a71be45ba.gz',
341
 
        '\x1f\x8b\x08\x081^BC\x00\x03foo-20051004104921-8de8118a71be45ba\x00\xcbH\xcd\xc9\xc9\xe7\x02\x00 0:6\x06\x00\x00\x00'
342
 
    ),
343
 
    ( './.bzr/inventory-store/', ),
344
 
    ( './.bzr/inventory-store/mbp@sourcefrog.net-20051004104921-a98be2278dd30b7b.gz',
345
 
        '\x1f\x8b\x08\x081^BC\x00\x03mbp@sourcefrog.net-20051004104921-a98be2278dd30b7b\x00m\x8f\xcb\n'
346
 
        '\xc20\x10E\xf7~E\xc8\xbe83\xcd\x13\xaa\xbf"yL0\xa8-\xd4"\xd6\xaf7\x8a\x82\x0bw\xb38\xe7\xde;C\x1do<.\xd3\xbc\xee7C;\xe6U\x94z\xe6C\xcd;Y\xa6\xa9#\x00\x8d\x00\n'
347
 
        'Ayt\x1d\xf4\xd6\xa7h\x935\xbdV)\xb3\x14\xa7:\xbe\xd0\xe6H1\x86\x0b\xbf5)\x16\xbe/\x7fC\x08;\x97\xd9!\xba`1\xb2\xd21|\xe8\xeb1`\xe3\xb5\xa5\xdc{S\x02{\x02c\xc8YT%Rb\x80b\x89\xbd*D\xda\x95\xafT\x1f\xad\xd2H\xb1m\xfb\xb7?\xcf<\x01W}\xb5\x8b\xd9\x00\x00\x00'
348
 
    ),
349
 
    ( './.bzr/inventory-store/mbp@sourcefrog.net-20051004104937-c9b7a7bfcc0bb22d.gz',
350
 
        '\x1f\x8b\x08\x08A^BC\x00\x03mbp@sourcefrog.net-20051004104937-c9b7a7bfcc0bb22d\x00m\x8f\xcb\n'
351
 
        '\xc20\x10E\xf7~E\xc8\xbe83\xcd\x13\xaa\xbf"yL0\xa8-\xd4"\xd6\xaf7\x8a\x82\x0bw\xb38\xe7\xde;C\x1do<.\xd3\xbc\xee7C;\xe6U\x94z\xe6C\xcd;Y\xa6\xa9#\x00\x8d\x00\n'
352
 
        'Ayt\x1d\xf4\xd6\xa7h\x935\xbdV)\xb3\x14\xa7:\xbe\xd0\xe6H1\x86\x0b\xbf5)\x16\xbe/\x7fC\x08;\x97\xd9!\xba`1\xb2\xd21|\xe8\xeb1`\xe3\xb5\xa5\xdc{S\x02{\x02c\xc8YT%Rb\x80b\x89\xbd*D\xda\x95\xafT\x1f\xad\xd2H\xb1m\xfb\xb7?\xcf<\x01W}\xb5\x8b\xd9\x00\x00\x00'
353
 
    ),
354
 
    ( './.bzr/revision-store/', ),
355
 
    ( './.bzr/revision-store/mbp@sourcefrog.net-20051004104921-a98be2278dd30b7b.gz',
356
 
        '\x1f\x8b\x08\x081^BC\x00\x03mbp@sourcefrog.net-20051004104921-a98be2278dd30b7b\x00\x9d\x8eMj\xc30\x14\x84\xf7>\x85\xd0"\xbb$\xef\xc9\xb6,\x11\xdb\xf4\x02\x85\xde\xa0\xe8\xe7\xd9\x11\xc4R\x90\xd4@{\xfa\x06\x8a\xa1\xd0]\x97\x03\xdf\xcc|c\xa6G(!E\xe6\xd2\xb6\x85Z)O\xfc\xd5\xe4\x1a"{K\xe9\xc6\x0e\xb7z\xd9\xec\xfd\xa5\xa4\x8f\xech\xc9i=E\xaa\x87\xb5^8\x0b\xf1A\xb1\xa6\xfc\xf9\x1e\xfc\xc4\xffRG\x01\xd0#@\x87\xd0i\x81G\xa3\x95%!\x06\xe5}\x0bv\xb0\xbf\x17\xca\xd5\xe0\xc4-\xa0\xb1\x8b\xb6`\xc0I\xa4\xc5\xf4\x9el\xef\x95v [\x94\xcf\x8e\xd5\xcay\xe4l\xf7\xfe\xf7u\r'
357
 
        '\x1b\x95j\xb6\xfb\xc4\x11\x85\xea\x84\xd0\x12O\x03t\x83D\xad\xc4\x0f\xf0\x95"M\xbc\x95\x00\xc0\xe7f|6\x8aYi^B.u<\xef\xb1\x19\xcf\xbb\xce\xdc|\x038=\xc7\xe6R\x01\x00\x00'
358
 
    ),
359
 
    ( './.bzr/revision-store/mbp@sourcefrog.net-20051004104937-c9b7a7bfcc0bb22d.gz',
360
 
        '\x1f\x8b\x08\x08A^BC\x00\x03mbp@sourcefrog.net-20051004104937-c9b7a7bfcc0bb22d\x00\x9d\x90\xc1j\xc30\x0c\x86\xef}\n'
361
 
        "\xe3Coie'\xb1c\x9a\x94\xbe\xc0`o0,[N\x03M\\\x1c\xafe{\xfae\x94n\x85\xc1`;Y\x88O\xd2\xff\xb9Mt\x19\xe6!N\xcc\xc5q\x1cr\xa6\xd4\xf1'\x9b\xf20\xb1\xe7\x18Ol}\xca\xbb\x11\xcf\x879\xbe&G!\xc5~3Q^\xf7y\xc7\xd90]h\xca1\xbd\xbd\x0c\xbe\xe3?\xa9B\x02\xd4\x02\xa0\x12P\x99R\x17\xce\xa0\xb6\x1a\x83s\x80(\xa5\x7f\xdc0\x1f\xad\xe88\x82\xb0\x18\x0c\x82\x05\xa7\x04\x05[{\xc2\xda7\xc6\x81*\x85B\x8dh\x1a\xe7\x05g\xf7\xdc\xff>\x9d\x87\x91\xe6l\xc7s\xc7\x85\x90M%\xa5\xd1z#\x85\xa8\x9b\x1a\xaa\xfa\x06\xbc\xc7\x89:^*\x00\xe0\xfbU\xbbL\xcc\xb6\xa7\xfdH\xa9'\x16\x03\xeb\x8fq\xce\xed\xf6\xde_\xb5g\x9b\x16\xa1y\xa9\xbe\x02&\n"
362
 
        '\x7fJ+EaM\x83$\xa5n\xbc/a\x91~\xd0\xbd\xfd\x135\n'
363
 
        '\xd0\x9a`\x0c*W\x1aR\xc1\x94du\x08(\t\xb0\x91\xdeZ\xa3\x9cU\x9cm\x7f\x8dr\x1d\x10Ot\xb8\xc6\xcf\xa7\x907|\xfb-\xb1\xbd\xd3\xfb\xd5\x07\xeeD\xee\x08*\x02\x00\x00'
364
 
    ),
365
 
]
366
 
 
367
 
_upgrade_dir_template = [
368
 
    ( './.bzr/', ),
369
 
    ( './.bzr/README',
370
 
      'This is a Bazaar control directory.\n'
371
 
      'Do not change any files in this directory.\n'
372
 
      'See http://bazaar.canonical.com/ for more information about Bazaar.\n'
373
 
    ),
374
 
    ( './.bzr/branch-format',
375
 
        'Bazaar-NG branch, format 0.0.4\n'
376
 
    ),
377
 
    ( './.bzr/branch-lock',
378
 
        ''
379
 
    ),
380
 
    ( './.bzr/branch-name',
381
 
        ''
382
 
    ),
383
 
    ( './.bzr/inventory',
384
 
        '<inventory>\n'
385
 
        '<entry file_id="dir-20051005095101-da1441ea3fa6917a" kind="directory" name="dir" />\n'
386
 
        '</inventory>\n'
387
 
    ),
388
 
    ( './.bzr/merged-patches',
389
 
        ''
390
 
    ),
391
 
    ( './.bzr/pending-merged-patches',
392
 
        ''
393
 
    ),
394
 
    ( './.bzr/pending-merges',
395
 
        ''
396
 
    ),
397
 
    ( './.bzr/revision-history',
398
 
        'robertc@robertcollins.net-20051005095108-6065fbd8e7d8617e\n'
399
 
    ),
400
 
    ( './.bzr/stat-cache',
401
 
        '### bzr hashcache v5\n'
402
 
    ),
403
 
    ( './.bzr/text-store/', ),
404
 
    ( './.bzr/inventory-store/', ),
405
 
    ( './.bzr/inventory-store/robertc@robertcollins.net-20051005095108-6065fbd8e7d8617e.gz',
406
 
        '\x1f\x8b\x08\x00\x0c\xa2CC\x02\xff\xb3\xc9\xcc+K\xcd+\xc9/\xaa\xb4\xe3\xb2\x012\x8a*\x15\xd22sR\xe33Sl\x95R2\x8bt\x8d\x0c\x0cL\r'
407
 
        "\x81\xd8\xc0\x12H\x19\xea\xa6$\x1a\x9a\x98\x18\xa6&\x1a\xa7%\x9aY\x1a\x9a'*)dg\xe6A\x94\xa6&\x83LQR\xc8K\xccM\x05\x0b()\xe8\x03\xcd\xd4G\xb2\x00\x00\xc2<\x94\xb1m\x00\x00\x00"
408
 
    ),
409
 
    ( './.bzr/revision-store/', ),
410
 
    ( './.bzr/revision-store/robertc@robertcollins.net-20051005095108-6065fbd8e7d8617e.gz',
411
 
        '\x1f\x8b\x08\x00\x0c\xa2CC\x02\xff\xa5OKj\xc30\x14\xdc\xfb\x14B\x8b\xec\x92<I\xd6\xc7\xc42\x85\xde\xa0\x17(\xb6\xf4\x9c\n'
412
 
        'l\xa9H"\x90\x9c\xbe\xa6\xa9\xa1\x9b\xae\xbax\x0c\xcc\xe71\xd3g\xbc\x85\x12R$.\xadk\xa8\x15\xb3\xa5oi\xc2\\\xc9kZ\x96\x10\x0b9,\xf5\x92\xbf)\xf7\xf2\x83O\xe5\x14\xb1\x1e\xae\xf5BI\x887\x8c5\xe5\xfb{\xf0\x96\xfei>r\x00\xc9\xb6\x83n\x03sT\xa0\xe4<y\x83\xda\x1b\xc54\xfe~T>Ff\xe9\xcc:\xdd\x8e\xa6E\xc7@\xa2\x82I\xaaNL\xbas\\313)\x00\xb9\xe6\xe0(\xd9\x87\xfc\xb7A\r'
413
 
        "+\x96:\xae\x9f\x962\xc6\x8d\x04i\x949\x01\x97R\xb7\x1d\x17O\xc3#E\xb4T(\x00\xa0C\xd3o\x892^q\x18\xbd'>\xe4\xfe\xbc\x13M\x7f\xde{\r"
414
 
        '\xcd\x17\x85\xea\xba\x03l\x01\x00\x00'
415
 
    ),
416
 
    ( './dir/', ),
417
 
]
 
128
            self.assertPathDoesNotExist('tree/.bzr/checkout/' + path)
418
129
 
419
130
 
420
131
class TestSmartUpgrade(tests.TestCaseWithTransport):
435
146
        self.assertLength(1, worked)
436
147
        self.assertEqual(worked[0], control)
437
148
        self.assertLength(0, issues)
438
 
        self.failUnlessExists('branch1/backup.bzr.~1~')
 
149
        self.assertPathExists('branch1/backup.bzr.~1~')
439
150
        self.assertEqual(control.open_repository()._format,
440
151
                         self.to_format._repository_format)
441
152
 
448
159
        self.assertLength(1, worked)
449
160
        self.assertEqual(worked[0], control)
450
161
        self.assertLength(0, issues)
451
 
        self.failUnlessExists('branch1')
452
 
        self.failUnlessExists('branch1/.bzr')
453
 
        self.failIfExists('branch1/backup.bzr.~1~')
 
162
        self.assertPathExists('branch1')
 
163
        self.assertPathExists('branch1/.bzr')
 
164
        self.assertPathDoesNotExist('branch1/backup.bzr.~1~')
454
165
        self.assertEqual(control.open_repository()._format,
455
166
                         self.to_format._repository_format)
456
167
 
474
185
        self.assertLength(3, worked)
475
186
        self.assertEqual(worked[0], control)
476
187
        self.assertLength(0, issues)
477
 
        self.failUnlessExists('repo/backup.bzr.~1~')
478
 
        self.failUnlessExists('repo/branch1/backup.bzr.~1~')
479
 
        self.failUnlessExists('repo/branch2/backup.bzr.~1~')
 
188
        self.assertPathExists('repo/backup.bzr.~1~')
 
189
        self.assertPathExists('repo/branch1/backup.bzr.~1~')
 
190
        self.assertPathExists('repo/branch2/backup.bzr.~1~')
480
191
        self.assertEqual(control.open_repository()._format,
481
192
                         self.to_format._repository_format)
482
193
        b1 = branch.Branch.open('repo/branch1')
491
202
        self.assertLength(3, worked)
492
203
        self.assertEqual(worked[0], control)
493
204
        self.assertLength(0, issues)
494
 
        self.failUnlessExists('repo')
495
 
        self.failUnlessExists('repo/.bzr')
496
 
        self.failIfExists('repo/backup.bzr.~1~')
497
 
        self.failIfExists('repo/branch1/backup.bzr.~1~')
498
 
        self.failIfExists('repo/branch2/backup.bzr.~1~')
 
205
        self.assertPathExists('repo')
 
206
        self.assertPathExists('repo/.bzr')
 
207
        self.assertPathDoesNotExist('repo/backup.bzr.~1~')
 
208
        self.assertPathDoesNotExist('repo/branch1/backup.bzr.~1~')
 
209
        self.assertPathDoesNotExist('repo/branch2/backup.bzr.~1~')
499
210
        self.assertEqual(control.open_repository()._format,
500
211
                         self.to_format._repository_format)
501
212
        b1 = branch.Branch.open('repo/branch1')