~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_upgrade.py

  • Committer: Vincent Ladeuil
  • Date: 2011-07-06 09:22:00 UTC
  • mfrom: (6008 +trunk)
  • mto: (6012.1.1 trunk)
  • mto: This revision was merged to the branch mainline in revision 6013.
  • Revision ID: v.ladeuil+lp@free.fr-20110706092200-7iai2mwzc0sqdsvf
MergingĀ inĀ 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.assertIsInstance(
47
 
                control._format,
48
 
                bzrdir.BzrDirFormat.get_default_format().__class__)
49
 
        rh = b.revision_history()
50
 
        eq(rh,
51
 
           ['mbp@sourcefrog.net-20051004035611-176b16534b086b3c',
52
 
            'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd'])
53
 
        rt = b.repository.revision_tree(rh[0])
54
 
        foo_id = 'foo-20051004035605-91e788d1875603ae'
55
 
        rt.lock_read()
56
 
        try:
57
 
            eq(rt.get_file_text(foo_id), 'initial contents\n')
58
 
        finally:
59
 
            rt.unlock()
60
 
        rt = b.repository.revision_tree(rh[1])
61
 
        rt.lock_read()
62
 
        try:
63
 
            eq(rt.get_file_text(foo_id), 'new contents\n')
64
 
        finally:
65
 
            rt.unlock()
66
 
        # check a backup was made:
67
 
        backup_dir = 'backup.bzr.~1~'
68
 
        t = self.get_transport('.')
69
 
        t.stat(backup_dir)
70
 
        t.stat(backup_dir + '/README')
71
 
        t.stat(backup_dir + '/branch-format')
72
 
        t.stat(backup_dir + '/revision-history')
73
 
        t.stat(backup_dir + '/merged-patches')
74
 
        t.stat(backup_dir + '/pending-merged-patches')
75
 
        t.stat(backup_dir + '/pending-merges')
76
 
        t.stat(backup_dir + '/branch-name')
77
 
        t.stat(backup_dir + '/branch-lock')
78
 
        t.stat(backup_dir + '/inventory')
79
 
        t.stat(backup_dir + '/stat-cache')
80
 
        t.stat(backup_dir + '/text-store')
81
 
        t.stat(backup_dir + '/text-store/foo-20051004035611-1591048e9dc7c2d4.gz')
82
 
        t.stat(backup_dir + '/text-store/foo-20051004035756-4081373d897c3453.gz')
83
 
        t.stat(backup_dir + '/inventory-store/')
84
 
        t.stat(backup_dir + '/inventory-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
85
 
        t.stat(backup_dir + '/inventory-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
86
 
        t.stat(backup_dir + '/revision-store/')
87
 
        t.stat(backup_dir + '/revision-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
88
 
        t.stat(backup_dir + '/revision-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
89
 
 
90
 
    def test_upgrade_with_ghosts(self):
91
 
        """Upgrade v0.0.4 tree containing ghost references.
92
 
 
93
 
        That is, some of the parents of revisions mentioned in the branch
94
 
        aren't present in the branch's storage.
95
 
 
96
 
        This shouldn't normally happen in branches created entirely in
97
 
        bzr, but can happen in branches imported from baz and arch, or from
98
 
        other systems, where the importer knows about a revision but not
99
 
        its contents."""
100
 
        eq = self.assertEquals
101
 
        self.build_tree_contents(_ghost_template)
102
 
        upgrade.upgrade(u'.')
103
 
        b = branch.Branch.open(u'.')
104
 
        revision_id = b.revision_history()[1]
105
 
        rev = b.repository.get_revision(revision_id)
106
 
        eq(len(rev.parent_ids), 2)
107
 
        eq(rev.parent_ids[1], 'wibble@wobble-2')
108
 
 
109
 
    def test_upgrade_makes_dir_weaves(self):
110
 
        self.build_tree_contents(_upgrade_dir_template)
111
 
        old_repodir = bzrdir.BzrDir.open_unsupported('.')
112
 
        old_repo_format = old_repodir.open_repository()._format
113
 
        upgrade.upgrade('.')
114
 
        # this is the path to the literal file. As format changes
115
 
        # occur it needs to be updated. FIXME: ask the store for the
116
 
        # path.
117
 
        repo = repository.Repository.open('.')
118
 
        # it should have changed the format
119
 
        self.assertNotEqual(old_repo_format.__class__, repo._format.__class__)
120
 
        # and we should be able to read the names for the file id
121
 
        # 'dir-20051005095101-da1441ea3fa6917a'
122
 
        repo.lock_read()
123
 
        self.addCleanup(repo.unlock)
124
 
        text_keys = repo.texts.keys()
125
 
        dir_keys = [key for key in text_keys if key[0] ==
126
 
                'dir-20051005095101-da1441ea3fa6917a']
127
 
        self.assertNotEqual([], dir_keys)
128
 
 
129
 
    def test_upgrade_to_meta_sets_workingtree_last_revision(self):
130
 
        self.build_tree_contents(_upgrade_dir_template)
131
 
        upgrade.upgrade('.', bzrdir.BzrDirMetaFormat1())
132
 
        tree = workingtree.WorkingTree.open('.')
133
 
        self.assertEqual([tree.branch.revision_history()[-1]],
134
 
            tree.get_parent_ids())
135
 
 
136
 
    def test_upgrade_v6_to_meta_no_workingtree(self):
137
 
        # Some format6 branches do not have checkout files. Upgrading
138
 
        # such a branch to metadir must not setup a working tree.
139
 
        self.build_tree_contents(_upgrade1_template)
140
 
        upgrade.upgrade('.', bzrdir.BzrDirFormat6())
141
 
        t = self.get_transport('.')
142
 
        t.delete_multi(['.bzr/pending-merges', '.bzr/inventory'])
143
 
        self.assertFalse(t.has('.bzr/stat-cache'))
144
 
        # XXX: upgrade fails if a backup.bzr is already present
145
 
        # -- David Allouche 2006-08-11
146
 
        t.delete_tree('backup.bzr.~1~')
147
 
        # At this point, we have a format6 branch without checkout files.
148
 
        upgrade.upgrade('.', bzrdir.BzrDirMetaFormat1())
149
 
        # The upgrade should not have set up a working tree.
150
 
        control = bzrdir.BzrDir.open('.')
151
 
        self.assertFalse(control.has_workingtree())
152
 
        # We have covered the scope of this test, we may as well check that
153
 
        # upgrade has not eaten our data, even if it's a bit redundant with
154
 
        # other tests.
155
 
        self.assertIsInstance(control._format, bzrdir.BzrDirMetaFormat1)
156
 
        b = control.open_branch()
157
 
        self.assertEquals(b.revision_history(),
158
 
           ['mbp@sourcefrog.net-20051004035611-176b16534b086b3c',
159
 
            'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd'])
160
 
 
161
37
    def test_upgrade_rich_root(self):
162
38
        tree = self.make_branch_and_tree('tree', format='rich-root')
163
39
        rev_id = tree.commit('first post')
165
41
 
166
42
    def test_convert_branch5_branch6(self):
167
43
        b = self.make_branch('branch', format='knit')
168
 
        b.set_revision_history(['AB', 'CD'])
 
44
        b._set_revision_history(['CD'])
169
45
        b.set_parent('file:///EF')
170
46
        b.set_bound_location('file:///GH')
171
47
        b.set_push_location('file:///IJ')
253
129
            self.assertPathDoesNotExist('tree/.bzr/checkout/' + path)
254
130
 
255
131
 
256
 
_upgrade1_template = \
257
 
     [
258
 
     ('foo', 'new contents\n'),
259
 
     ('.bzr/',),
260
 
     ('.bzr/README',
261
 
      'This is a Bazaar control directory.\n'
262
 
      'Do not change any files in this directory.\n'
263
 
      'See http://bazaar.canonical.com/ for more information about Bazaar.\n'),
264
 
     ('.bzr/branch-format', 'Bazaar-NG branch, format 0.0.4\n'),
265
 
     ('.bzr/revision-history',
266
 
      'mbp@sourcefrog.net-20051004035611-176b16534b086b3c\n'
267
 
      'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd\n'),
268
 
     ('.bzr/merged-patches', ''),
269
 
     ('.bzr/pending-merged-patches', ''),
270
 
     ('.bzr/branch-name', ''),
271
 
     ('.bzr/branch-lock', ''),
272
 
     ('.bzr/pending-merges', ''),
273
 
     ('.bzr/inventory',
274
 
      '<inventory>\n'
275
 
      '<entry file_id="foo-20051004035605-91e788d1875603ae" kind="file" name="foo" />\n'
276
 
      '</inventory>\n'),
277
 
     ('.bzr/stat-cache',
278
 
      '### bzr hashcache v5\n'
279
 
      'foo// be9f309239729f69a6309e970ef24941d31e042c 13 1128398176 1128398176 303464 770\n'),
280
 
     ('.bzr/text-store/',),
281
 
     ('.bzr/text-store/foo-20051004035611-1591048e9dc7c2d4.gz',
282
 
      '\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'),
283
 
     ('.bzr/text-store/foo-20051004035756-4081373d897c3453.gz',
284
 
      '\x1f\x8b\x08\x00\xc4\xfdAC\x02\xff\xcbK-WH\xce\xcf+I\xcd+)\xe6\x02\x00g\xc3\xdf\xc9\r\x00\x00\x00'),
285
 
     ('.bzr/inventory-store/',),
286
 
     ('.bzr/inventory-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz',
287
 
      '\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'),
288
 
     ('.bzr/inventory-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz',
289
 
      '\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'),
290
 
     ('.bzr/revision-store/',),
291
 
     ('.bzr/revision-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz',
292
 
      '\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'),
293
 
     ('.bzr/revision-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz',
294
 
      '\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')]
295
 
 
296
 
 
297
 
_ghost_template = [
298
 
    ( './foo',
299
 
        'hello\n'
300
 
    ),
301
 
    ( './.bzr/', ),
302
 
    ( './.bzr/README',
303
 
      'This is a Bazaar control directory.\n'
304
 
      'Do not change any files in this directory.\n'
305
 
      'See http://bazaar.canonical.com/ for more information about Bazaar.\n'
306
 
    ),
307
 
    ( './.bzr/branch-format',
308
 
        'Bazaar-NG branch, format 0.0.4\n'
309
 
    ),
310
 
    ( './.bzr/branch-lock',
311
 
        ''
312
 
    ),
313
 
    ( './.bzr/branch-name',
314
 
        ''
315
 
    ),
316
 
    ( './.bzr/inventory',
317
 
        '<inventory>\n'
318
 
        '<entry file_id="foo-20051004104918-0379cb7c76354cde" kind="file" name="foo" />\n'
319
 
        '</inventory>\n'
320
 
    ),
321
 
    ( './.bzr/merged-patches',
322
 
        ''
323
 
    ),
324
 
    ( './.bzr/pending-merged-patches',
325
 
        ''
326
 
    ),
327
 
    ( './.bzr/pending-merges',
328
 
        ''
329
 
    ),
330
 
    ( './.bzr/revision-history',
331
 
        'mbp@sourcefrog.net-20051004104921-a98be2278dd30b7b\n'
332
 
        'mbp@sourcefrog.net-20051004104937-c9b7a7bfcc0bb22d\n'
333
 
    ),
334
 
    ( './.bzr/stat-cache',
335
 
        '### bzr hashcache v5\n'
336
 
        'foo// f572d396fae9206628714fb2ce00f72e94f2258f 6 1128422956 1128422956 306900 770\n'
337
 
    ),
338
 
    ( './.bzr/text-store/', ),
339
 
    ( './.bzr/text-store/foo-20051004104921-8de8118a71be45ba.gz',
340
 
        '\x1f\x8b\x08\x081^BC\x00\x03foo-20051004104921-8de8118a71be45ba\x00\xcbH\xcd\xc9\xc9\xe7\x02\x00 0:6\x06\x00\x00\x00'
341
 
    ),
342
 
    ( './.bzr/inventory-store/', ),
343
 
    ( './.bzr/inventory-store/mbp@sourcefrog.net-20051004104921-a98be2278dd30b7b.gz',
344
 
        '\x1f\x8b\x08\x081^BC\x00\x03mbp@sourcefrog.net-20051004104921-a98be2278dd30b7b\x00m\x8f\xcb\n'
345
 
        '\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'
346
 
        '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'
347
 
    ),
348
 
    ( './.bzr/inventory-store/mbp@sourcefrog.net-20051004104937-c9b7a7bfcc0bb22d.gz',
349
 
        '\x1f\x8b\x08\x08A^BC\x00\x03mbp@sourcefrog.net-20051004104937-c9b7a7bfcc0bb22d\x00m\x8f\xcb\n'
350
 
        '\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'
351
 
        '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'
352
 
    ),
353
 
    ( './.bzr/revision-store/', ),
354
 
    ( './.bzr/revision-store/mbp@sourcefrog.net-20051004104921-a98be2278dd30b7b.gz',
355
 
        '\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'
356
 
        '\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'
357
 
    ),
358
 
    ( './.bzr/revision-store/mbp@sourcefrog.net-20051004104937-c9b7a7bfcc0bb22d.gz',
359
 
        '\x1f\x8b\x08\x08A^BC\x00\x03mbp@sourcefrog.net-20051004104937-c9b7a7bfcc0bb22d\x00\x9d\x90\xc1j\xc30\x0c\x86\xef}\n'
360
 
        "\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"
361
 
        '\x7fJ+EaM\x83$\xa5n\xbc/a\x91~\xd0\xbd\xfd\x135\n'
362
 
        '\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'
363
 
    ),
364
 
]
365
 
 
366
 
_upgrade_dir_template = [
367
 
    ( './.bzr/', ),
368
 
    ( './.bzr/README',
369
 
      'This is a Bazaar control directory.\n'
370
 
      'Do not change any files in this directory.\n'
371
 
      'See http://bazaar.canonical.com/ for more information about Bazaar.\n'
372
 
    ),
373
 
    ( './.bzr/branch-format',
374
 
        'Bazaar-NG branch, format 0.0.4\n'
375
 
    ),
376
 
    ( './.bzr/branch-lock',
377
 
        ''
378
 
    ),
379
 
    ( './.bzr/branch-name',
380
 
        ''
381
 
    ),
382
 
    ( './.bzr/inventory',
383
 
        '<inventory>\n'
384
 
        '<entry file_id="dir-20051005095101-da1441ea3fa6917a" kind="directory" name="dir" />\n'
385
 
        '</inventory>\n'
386
 
    ),
387
 
    ( './.bzr/merged-patches',
388
 
        ''
389
 
    ),
390
 
    ( './.bzr/pending-merged-patches',
391
 
        ''
392
 
    ),
393
 
    ( './.bzr/pending-merges',
394
 
        ''
395
 
    ),
396
 
    ( './.bzr/revision-history',
397
 
        'robertc@robertcollins.net-20051005095108-6065fbd8e7d8617e\n'
398
 
    ),
399
 
    ( './.bzr/stat-cache',
400
 
        '### bzr hashcache v5\n'
401
 
    ),
402
 
    ( './.bzr/text-store/', ),
403
 
    ( './.bzr/inventory-store/', ),
404
 
    ( './.bzr/inventory-store/robertc@robertcollins.net-20051005095108-6065fbd8e7d8617e.gz',
405
 
        '\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'
406
 
        "\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"
407
 
    ),
408
 
    ( './.bzr/revision-store/', ),
409
 
    ( './.bzr/revision-store/robertc@robertcollins.net-20051005095108-6065fbd8e7d8617e.gz',
410
 
        '\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'
411
 
        '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'
412
 
        "+\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"
413
 
        '\xcd\x17\x85\xea\xba\x03l\x01\x00\x00'
414
 
    ),
415
 
    ( './dir/', ),
416
 
]
417
 
 
418
 
 
419
132
class TestSmartUpgrade(tests.TestCaseWithTransport):
420
133
 
421
134
    from_format = bzrdir.format_registry.make_bzrdir("pack-0.92")