~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_upgrade.py

  • Committer: John Arbash Meinel
  • Date: 2011-01-12 21:27:00 UTC
  • mto: This revision was merged to the branch mainline in revision 5605.
  • Revision ID: john@arbash-meinel.com-20110112212700-esqmtrmevddxrsq2
Clean up the test slightly, hoping to avoid race conditions, update NEWS

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,
28
29
    tests,
29
30
    upgrade,
30
31
    workingtree,
34
35
 
35
36
class TestUpgrade(tests.TestCaseWithTransport):
36
37
 
 
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
 
37
162
    def test_upgrade_rich_root(self):
38
163
        tree = self.make_branch_and_tree('tree', format='rich-root')
39
164
        rev_id = tree.commit('first post')
41
166
 
42
167
    def test_convert_branch5_branch6(self):
43
168
        b = self.make_branch('branch', format='knit')
44
 
        b._set_revision_history(['CD'])
 
169
        b.set_revision_history(['AB', 'CD'])
45
170
        b.set_parent('file:///EF')
46
171
        b.set_bound_location('file:///GH')
47
172
        b.set_push_location('file:///IJ')
108
233
        self.assertEqual(rev_id, new_tree.last_revision())
109
234
        for path in ['basis-inventory-cache', 'inventory', 'last-revision',
110
235
            'pending-merges', 'stat-cache']:
111
 
            self.assertPathDoesNotExist('tree/.bzr/checkout/' + path)
 
236
            self.failIfExists('tree/.bzr/checkout/' + path)
112
237
 
113
238
    def test_convert_knit_merges_dirstate(self):
114
239
        tree = self.make_branch_and_tree('tree', format='knit')
126
251
        self.assertEqual([rev_id2, rev_id3], new_tree.get_parent_ids())
127
252
        for path in ['basis-inventory-cache', 'inventory', 'last-revision',
128
253
            'pending-merges', 'stat-cache']:
129
 
            self.assertPathDoesNotExist('tree/.bzr/checkout/' + path)
 
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
]
130
418
 
131
419
 
132
420
class TestSmartUpgrade(tests.TestCaseWithTransport):
147
435
        self.assertLength(1, worked)
148
436
        self.assertEqual(worked[0], control)
149
437
        self.assertLength(0, issues)
150
 
        self.assertPathExists('branch1/backup.bzr.~1~')
 
438
        self.failUnlessExists('branch1/backup.bzr.~1~')
151
439
        self.assertEqual(control.open_repository()._format,
152
440
                         self.to_format._repository_format)
153
441
 
160
448
        self.assertLength(1, worked)
161
449
        self.assertEqual(worked[0], control)
162
450
        self.assertLength(0, issues)
163
 
        self.assertPathExists('branch1')
164
 
        self.assertPathExists('branch1/.bzr')
165
 
        self.assertPathDoesNotExist('branch1/backup.bzr.~1~')
 
451
        self.failUnlessExists('branch1')
 
452
        self.failUnlessExists('branch1/.bzr')
 
453
        self.failIfExists('branch1/backup.bzr.~1~')
166
454
        self.assertEqual(control.open_repository()._format,
167
455
                         self.to_format._repository_format)
168
456
 
186
474
        self.assertLength(3, worked)
187
475
        self.assertEqual(worked[0], control)
188
476
        self.assertLength(0, issues)
189
 
        self.assertPathExists('repo/backup.bzr.~1~')
190
 
        self.assertPathExists('repo/branch1/backup.bzr.~1~')
191
 
        self.assertPathExists('repo/branch2/backup.bzr.~1~')
 
477
        self.failUnlessExists('repo/backup.bzr.~1~')
 
478
        self.failUnlessExists('repo/branch1/backup.bzr.~1~')
 
479
        self.failUnlessExists('repo/branch2/backup.bzr.~1~')
192
480
        self.assertEqual(control.open_repository()._format,
193
481
                         self.to_format._repository_format)
194
482
        b1 = branch.Branch.open('repo/branch1')
203
491
        self.assertLength(3, worked)
204
492
        self.assertEqual(worked[0], control)
205
493
        self.assertLength(0, issues)
206
 
        self.assertPathExists('repo')
207
 
        self.assertPathExists('repo/.bzr')
208
 
        self.assertPathDoesNotExist('repo/backup.bzr.~1~')
209
 
        self.assertPathDoesNotExist('repo/branch1/backup.bzr.~1~')
210
 
        self.assertPathDoesNotExist('repo/branch2/backup.bzr.~1~')
 
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~')
211
499
        self.assertEqual(control.open_repository()._format,
212
500
                         self.to_format._repository_format)
213
501
        b1 = branch.Branch.open('repo/branch1')