/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
5784.1.4 by Martin Pool
Update weave format tests to avoid failIf, failUnless, etc
1
# Copyright (C) 2006-2011 Canonical Ltd
5712.4.1 by Jelmer Vernooij
Move weave-era BzrDir directories to a separate file.
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
17
"""Tests for the weave-era BzrDir formats.
18
19
For interface contract tests, see tests/per_bzr_dir.
20
"""
21
6379.6.7 by Jelmer Vernooij
Move importing from future until after doc string, otherwise the doc string will disappear.
22
from __future__ import absolute_import
23
5582.10.91 by Jelmer Vernooij
Fix some tests.
24
import os
5712.4.1 by Jelmer Vernooij
Move weave-era BzrDir directories to a separate file.
25
import sys
26
27
from bzrlib import (
28
    branch,
29
    bzrdir,
5582.10.91 by Jelmer Vernooij
Fix some tests.
30
    errors,
5712.4.1 by Jelmer Vernooij
Move weave-era BzrDir directories to a separate file.
31
    repository,
32
    upgrade,
5582.10.91 by Jelmer Vernooij
Fix some tests.
33
    urlutils,
5712.4.1 by Jelmer Vernooij
Move weave-era BzrDir directories to a separate file.
34
    workingtree,
35
    )
36
from bzrlib.osutils import (
5582.10.91 by Jelmer Vernooij
Fix some tests.
37
    getcwd,
5712.4.1 by Jelmer Vernooij
Move weave-era BzrDir directories to a separate file.
38
    )
5582.10.92 by Jelmer Vernooij
Move more weave code.
39
from bzrlib.tests.test_bundle import V4BundleTester
5712.4.1 by Jelmer Vernooij
Move weave-era BzrDir directories to a separate file.
40
from bzrlib.tests.test_sftp_transport import TestCaseWithSFTPServer
41
from bzrlib.tests import (
42
    TestCaseWithTransport,
43
    )
44
5582.10.91 by Jelmer Vernooij
Fix some tests.
45
from bzrlib.plugins.weave_fmt.branch import (
46
    BzrBranchFormat4,
47
    )
48
from bzrlib.plugins.weave_fmt.bzrdir import (
5712.4.1 by Jelmer Vernooij
Move weave-era BzrDir directories to a separate file.
49
    BzrDirFormat5,
50
    BzrDirFormat6,
51
    )
52
53
54
class TestFormat5(TestCaseWithTransport):
55
    """Tests specific to the version 5 bzrdir format."""
56
57
    def test_same_lockfiles_between_tree_repo_branch(self):
58
        # this checks that only a single lockfiles instance is created
59
        # for format 5 objects
60
        dir = BzrDirFormat5().initialize(self.get_url())
61
        def check_dir_components_use_same_lock(dir):
62
            ctrl_1 = dir.open_repository().control_files
63
            ctrl_2 = dir.open_branch().control_files
64
            ctrl_3 = dir.open_workingtree()._control_files
65
            self.assertTrue(ctrl_1 is ctrl_2)
66
            self.assertTrue(ctrl_2 is ctrl_3)
67
        check_dir_components_use_same_lock(dir)
68
        # and if we open it normally.
69
        dir = bzrdir.BzrDir.open(self.get_url())
70
        check_dir_components_use_same_lock(dir)
71
72
    def test_can_convert(self):
73
        # format 5 dirs are convertable
74
        dir = BzrDirFormat5().initialize(self.get_url())
75
        self.assertTrue(dir.can_convert_format())
76
77
    def test_needs_conversion(self):
78
        # format 5 dirs need a conversion if they are not the default,
79
        # and they aren't
80
        dir = BzrDirFormat5().initialize(self.get_url())
81
        # don't need to convert it to itself
82
        self.assertFalse(dir.needs_format_conversion(BzrDirFormat5()))
83
        # do need to convert it to the current default
84
        self.assertTrue(dir.needs_format_conversion(
85
            bzrdir.BzrDirFormat.get_default_format()))
86
87
88
class TestFormat6(TestCaseWithTransport):
89
    """Tests specific to the version 6 bzrdir format."""
90
91
    def test_same_lockfiles_between_tree_repo_branch(self):
92
        # this checks that only a single lockfiles instance is created
93
        # for format 6 objects
94
        dir = BzrDirFormat6().initialize(self.get_url())
95
        def check_dir_components_use_same_lock(dir):
96
            ctrl_1 = dir.open_repository().control_files
97
            ctrl_2 = dir.open_branch().control_files
98
            ctrl_3 = dir.open_workingtree()._control_files
99
            self.assertTrue(ctrl_1 is ctrl_2)
100
            self.assertTrue(ctrl_2 is ctrl_3)
101
        check_dir_components_use_same_lock(dir)
102
        # and if we open it normally.
103
        dir = bzrdir.BzrDir.open(self.get_url())
104
        check_dir_components_use_same_lock(dir)
105
106
    def test_can_convert(self):
107
        # format 6 dirs are convertable
108
        dir = BzrDirFormat6().initialize(self.get_url())
109
        self.assertTrue(dir.can_convert_format())
110
111
    def test_needs_conversion(self):
112
        # format 6 dirs need an conversion if they are not the default.
113
        dir = BzrDirFormat6().initialize(self.get_url())
114
        self.assertTrue(dir.needs_format_conversion(
115
            bzrdir.BzrDirFormat.get_default_format()))
116
117
118
class TestBreakLockOldBranch(TestCaseWithTransport):
119
120
    def test_break_lock_format_5_bzrdir(self):
121
        # break lock on a format 5 bzrdir should just return
122
        self.make_branch_and_tree('foo', format=BzrDirFormat5())
123
        out, err = self.run_bzr('break-lock foo')
124
        self.assertEqual('', out)
125
        self.assertEqual('', err)
126
127
128
_upgrade1_template = \
129
     [
130
     ('foo', 'new contents\n'),
131
     ('.bzr/',),
132
     ('.bzr/README',
133
      'This is a Bazaar control directory.\n'
134
      'Do not change any files in this directory.\n'
135
      'See http://bazaar.canonical.com/ for more information about Bazaar.\n'),
136
     ('.bzr/branch-format', 'Bazaar-NG branch, format 0.0.4\n'),
137
     ('.bzr/revision-history',
138
      'mbp@sourcefrog.net-20051004035611-176b16534b086b3c\n'
139
      'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd\n'),
140
     ('.bzr/merged-patches', ''),
141
     ('.bzr/pending-merged-patches', ''),
142
     ('.bzr/branch-name', ''),
143
     ('.bzr/branch-lock', ''),
144
     ('.bzr/pending-merges', ''),
145
     ('.bzr/inventory',
146
      '<inventory>\n'
147
      '<entry file_id="foo-20051004035605-91e788d1875603ae" kind="file" name="foo" />\n'
148
      '</inventory>\n'),
149
     ('.bzr/stat-cache',
150
      '### bzr hashcache v5\n'
151
      'foo// be9f309239729f69a6309e970ef24941d31e042c 13 1128398176 1128398176 303464 770\n'),
152
     ('.bzr/text-store/',),
153
     ('.bzr/text-store/foo-20051004035611-1591048e9dc7c2d4.gz',
154
      '\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'),
155
     ('.bzr/text-store/foo-20051004035756-4081373d897c3453.gz',
156
      '\x1f\x8b\x08\x00\xc4\xfdAC\x02\xff\xcbK-WH\xce\xcf+I\xcd+)\xe6\x02\x00g\xc3\xdf\xc9\r\x00\x00\x00'),
157
     ('.bzr/inventory-store/',),
158
     ('.bzr/inventory-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz',
159
      '\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'),
160
     ('.bzr/inventory-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz',
161
      '\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'),
162
     ('.bzr/revision-store/',),
163
     ('.bzr/revision-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz',
164
      '\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'),
165
     ('.bzr/revision-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz',
166
      '\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')]
167
168
169
_ghost_template = [
170
    ( './foo',
171
        'hello\n'
172
    ),
173
    ( './.bzr/', ),
174
    ( './.bzr/README',
175
      'This is a Bazaar control directory.\n'
176
      'Do not change any files in this directory.\n'
177
      'See http://bazaar.canonical.com/ for more information about Bazaar.\n'
178
    ),
179
    ( './.bzr/branch-format',
180
        'Bazaar-NG branch, format 0.0.4\n'
181
    ),
182
    ( './.bzr/branch-lock',
183
        ''
184
    ),
185
    ( './.bzr/branch-name',
186
        ''
187
    ),
188
    ( './.bzr/inventory',
189
        '<inventory>\n'
190
        '<entry file_id="foo-20051004104918-0379cb7c76354cde" kind="file" name="foo" />\n'
191
        '</inventory>\n'
192
    ),
193
    ( './.bzr/merged-patches',
194
        ''
195
    ),
196
    ( './.bzr/pending-merged-patches',
197
        ''
198
    ),
199
    ( './.bzr/pending-merges',
200
        ''
201
    ),
202
    ( './.bzr/revision-history',
203
        'mbp@sourcefrog.net-20051004104921-a98be2278dd30b7b\n'
204
        'mbp@sourcefrog.net-20051004104937-c9b7a7bfcc0bb22d\n'
205
    ),
206
    ( './.bzr/stat-cache',
207
        '### bzr hashcache v5\n'
208
        'foo// f572d396fae9206628714fb2ce00f72e94f2258f 6 1128422956 1128422956 306900 770\n'
209
    ),
210
    ( './.bzr/text-store/', ),
211
    ( './.bzr/text-store/foo-20051004104921-8de8118a71be45ba.gz',
212
        '\x1f\x8b\x08\x081^BC\x00\x03foo-20051004104921-8de8118a71be45ba\x00\xcbH\xcd\xc9\xc9\xe7\x02\x00 0:6\x06\x00\x00\x00'
213
    ),
214
    ( './.bzr/inventory-store/', ),
215
    ( './.bzr/inventory-store/mbp@sourcefrog.net-20051004104921-a98be2278dd30b7b.gz',
216
        '\x1f\x8b\x08\x081^BC\x00\x03mbp@sourcefrog.net-20051004104921-a98be2278dd30b7b\x00m\x8f\xcb\n'
217
        '\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'
218
        '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'
219
    ),
220
    ( './.bzr/inventory-store/mbp@sourcefrog.net-20051004104937-c9b7a7bfcc0bb22d.gz',
221
        '\x1f\x8b\x08\x08A^BC\x00\x03mbp@sourcefrog.net-20051004104937-c9b7a7bfcc0bb22d\x00m\x8f\xcb\n'
222
        '\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'
223
        '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'
224
    ),
225
    ( './.bzr/revision-store/', ),
226
    ( './.bzr/revision-store/mbp@sourcefrog.net-20051004104921-a98be2278dd30b7b.gz',
227
        '\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'
228
        '\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'
229
    ),
230
    ( './.bzr/revision-store/mbp@sourcefrog.net-20051004104937-c9b7a7bfcc0bb22d.gz',
231
        '\x1f\x8b\x08\x08A^BC\x00\x03mbp@sourcefrog.net-20051004104937-c9b7a7bfcc0bb22d\x00\x9d\x90\xc1j\xc30\x0c\x86\xef}\n'
232
        "\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"
233
        '\x7fJ+EaM\x83$\xa5n\xbc/a\x91~\xd0\xbd\xfd\x135\n'
234
        '\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'
235
    ),
236
]
237
238
_upgrade_dir_template = [
239
    ( './.bzr/', ),
240
    ( './.bzr/README',
241
      'This is a Bazaar control directory.\n'
242
      'Do not change any files in this directory.\n'
243
      'See http://bazaar.canonical.com/ for more information about Bazaar.\n'
244
    ),
245
    ( './.bzr/branch-format',
246
        'Bazaar-NG branch, format 0.0.4\n'
247
    ),
248
    ( './.bzr/branch-lock',
249
        ''
250
    ),
251
    ( './.bzr/branch-name',
252
        ''
253
    ),
254
    ( './.bzr/inventory',
255
        '<inventory>\n'
256
        '<entry file_id="dir-20051005095101-da1441ea3fa6917a" kind="directory" name="dir" />\n'
257
        '</inventory>\n'
258
    ),
259
    ( './.bzr/merged-patches',
260
        ''
261
    ),
262
    ( './.bzr/pending-merged-patches',
263
        ''
264
    ),
265
    ( './.bzr/pending-merges',
266
        ''
267
    ),
268
    ( './.bzr/revision-history',
269
        'robertc@robertcollins.net-20051005095108-6065fbd8e7d8617e\n'
270
    ),
271
    ( './.bzr/stat-cache',
272
        '### bzr hashcache v5\n'
273
    ),
274
    ( './.bzr/text-store/', ),
275
    ( './.bzr/inventory-store/', ),
276
    ( './.bzr/inventory-store/robertc@robertcollins.net-20051005095108-6065fbd8e7d8617e.gz',
277
        '\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'
278
        "\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"
279
    ),
280
    ( './.bzr/revision-store/', ),
281
    ( './.bzr/revision-store/robertc@robertcollins.net-20051005095108-6065fbd8e7d8617e.gz',
282
        '\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'
283
        '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'
284
        "+\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"
285
        '\xcd\x17\x85\xea\xba\x03l\x01\x00\x00'
286
    ),
287
    ( './dir/', ),
288
]
289
290
291
class TestUpgrade(TestCaseWithTransport):
292
293
    def test_upgrade_v6_to_meta_no_workingtree(self):
294
        # Some format6 branches do not have checkout files. Upgrading
295
        # such a branch to metadir must not setup a working tree.
296
        self.build_tree_contents(_upgrade1_template)
297
        upgrade.upgrade('.', BzrDirFormat6())
298
        t = self.get_transport('.')
299
        t.delete_multi(['.bzr/pending-merges', '.bzr/inventory'])
300
        self.assertFalse(t.has('.bzr/stat-cache'))
301
        t.delete_tree('backup.bzr.~1~')
302
        # At this point, we have a format6 branch without checkout files.
303
        upgrade.upgrade('.', bzrdir.BzrDirMetaFormat1())
304
        # The upgrade should not have set up a working tree.
305
        control = bzrdir.BzrDir.open('.')
306
        self.assertFalse(control.has_workingtree())
307
        # We have covered the scope of this test, we may as well check that
308
        # upgrade has not eaten our data, even if it's a bit redundant with
309
        # other tests.
5784.1.4 by Martin Pool
Update weave format tests to avoid failIf, failUnless, etc
310
        self.assertIsInstance(control._format, bzrdir.BzrDirMetaFormat1)
5712.4.1 by Jelmer Vernooij
Move weave-era BzrDir directories to a separate file.
311
        b = control.open_branch()
6165.4.26 by Jelmer Vernooij
Fix locking.
312
        self.addCleanup(b.lock_read().unlock)
6165.4.25 by Jelmer Vernooij
Fix plugin use of revision_history.
313
        self.assertEquals(b._revision_history(),
5712.4.1 by Jelmer Vernooij
Move weave-era BzrDir directories to a separate file.
314
           ['mbp@sourcefrog.net-20051004035611-176b16534b086b3c',
315
            'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd'])
316
317
    def test_upgrade_simple(self):
318
        """Upgrade simple v0.0.4 format to latest format"""
319
        eq = self.assertEquals
320
        self.build_tree_contents(_upgrade1_template)
321
        upgrade.upgrade(u'.')
322
        control = bzrdir.BzrDir.open('.')
323
        b = control.open_branch()
324
        # tsk, peeking under the covers.
5784.1.4 by Martin Pool
Update weave format tests to avoid failIf, failUnless, etc
325
        self.assertIsInstance(
326
            control._format,
327
            bzrdir.BzrDirFormat.get_default_format().__class__)
6165.4.26 by Jelmer Vernooij
Fix locking.
328
        self.addCleanup(b.lock_read().unlock)
6165.4.25 by Jelmer Vernooij
Fix plugin use of revision_history.
329
        rh = b._revision_history()
5712.4.1 by Jelmer Vernooij
Move weave-era BzrDir directories to a separate file.
330
        eq(rh,
331
           ['mbp@sourcefrog.net-20051004035611-176b16534b086b3c',
332
            'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd'])
333
        rt = b.repository.revision_tree(rh[0])
334
        foo_id = 'foo-20051004035605-91e788d1875603ae'
335
        rt.lock_read()
336
        try:
337
            eq(rt.get_file_text(foo_id), 'initial contents\n')
338
        finally:
339
            rt.unlock()
340
        rt = b.repository.revision_tree(rh[1])
341
        rt.lock_read()
342
        try:
343
            eq(rt.get_file_text(foo_id), 'new contents\n')
344
        finally:
345
            rt.unlock()
346
        # check a backup was made:
347
        backup_dir = 'backup.bzr.~1~'
348
        t = self.get_transport('.')
349
        t.stat(backup_dir)
350
        t.stat(backup_dir + '/README')
351
        t.stat(backup_dir + '/branch-format')
352
        t.stat(backup_dir + '/revision-history')
353
        t.stat(backup_dir + '/merged-patches')
354
        t.stat(backup_dir + '/pending-merged-patches')
355
        t.stat(backup_dir + '/pending-merges')
356
        t.stat(backup_dir + '/branch-name')
357
        t.stat(backup_dir + '/branch-lock')
358
        t.stat(backup_dir + '/inventory')
359
        t.stat(backup_dir + '/stat-cache')
360
        t.stat(backup_dir + '/text-store')
361
        t.stat(backup_dir + '/text-store/foo-20051004035611-1591048e9dc7c2d4.gz')
362
        t.stat(backup_dir + '/text-store/foo-20051004035756-4081373d897c3453.gz')
363
        t.stat(backup_dir + '/inventory-store/')
364
        t.stat(backup_dir + '/inventory-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
365
        t.stat(backup_dir + '/inventory-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
366
        t.stat(backup_dir + '/revision-store/')
367
        t.stat(backup_dir + '/revision-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
368
        t.stat(backup_dir + '/revision-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
369
370
    def test_upgrade_with_ghosts(self):
371
        """Upgrade v0.0.4 tree containing ghost references.
372
373
        That is, some of the parents of revisions mentioned in the branch
374
        aren't present in the branch's storage.
375
376
        This shouldn't normally happen in branches created entirely in
377
        bzr, but can happen in branches imported from baz and arch, or from
378
        other systems, where the importer knows about a revision but not
379
        its contents."""
380
        eq = self.assertEquals
381
        self.build_tree_contents(_ghost_template)
382
        upgrade.upgrade(u'.')
383
        b = branch.Branch.open(u'.')
6165.4.26 by Jelmer Vernooij
Fix locking.
384
        self.addCleanup(b.lock_read().unlock)
6165.4.25 by Jelmer Vernooij
Fix plugin use of revision_history.
385
        revision_id = b._revision_history()[1]
5712.4.1 by Jelmer Vernooij
Move weave-era BzrDir directories to a separate file.
386
        rev = b.repository.get_revision(revision_id)
387
        eq(len(rev.parent_ids), 2)
388
        eq(rev.parent_ids[1], 'wibble@wobble-2')
389
390
    def test_upgrade_makes_dir_weaves(self):
391
        self.build_tree_contents(_upgrade_dir_template)
392
        old_repodir = bzrdir.BzrDir.open_unsupported('.')
393
        old_repo_format = old_repodir.open_repository()._format
394
        upgrade.upgrade('.')
395
        # this is the path to the literal file. As format changes
396
        # occur it needs to be updated. FIXME: ask the store for the
397
        # path.
398
        repo = repository.Repository.open('.')
399
        # it should have changed the format
400
        self.assertNotEqual(old_repo_format.__class__, repo._format.__class__)
401
        # and we should be able to read the names for the file id
402
        # 'dir-20051005095101-da1441ea3fa6917a'
403
        repo.lock_read()
404
        self.addCleanup(repo.unlock)
405
        text_keys = repo.texts.keys()
406
        dir_keys = [key for key in text_keys if key[0] ==
407
                'dir-20051005095101-da1441ea3fa6917a']
408
        self.assertNotEqual([], dir_keys)
409
410
    def test_upgrade_to_meta_sets_workingtree_last_revision(self):
411
        self.build_tree_contents(_upgrade_dir_template)
412
        upgrade.upgrade('.', bzrdir.BzrDirMetaFormat1())
413
        tree = workingtree.WorkingTree.open('.')
6165.4.26 by Jelmer Vernooij
Fix locking.
414
        self.addCleanup(tree.lock_read().unlock)
6165.4.25 by Jelmer Vernooij
Fix plugin use of revision_history.
415
        self.assertEqual([tree.branch._revision_history()[-1]],
5712.4.1 by Jelmer Vernooij
Move weave-era BzrDir directories to a separate file.
416
            tree.get_parent_ids())
417
418
419
class SFTPBranchTest(TestCaseWithSFTPServer):
420
    """Test some stuff when accessing a bzr Branch over sftp"""
421
422
    def test_lock_file(self):
423
        # old format branches use a special lock file on sftp.
424
        b = self.make_branch('', format=BzrDirFormat6())
425
        b = branch.Branch.open(self.get_url())
5784.1.4 by Martin Pool
Update weave format tests to avoid failIf, failUnless, etc
426
        self.assertPathExists('.bzr/')
427
        self.assertPathExists('.bzr/branch-format')
428
        self.assertPathExists('.bzr/branch-lock')
5712.4.1 by Jelmer Vernooij
Move weave-era BzrDir directories to a separate file.
429
5784.1.4 by Martin Pool
Update weave format tests to avoid failIf, failUnless, etc
430
        self.assertPathDoesNotExist('.bzr/branch-lock.write-lock')
5712.4.1 by Jelmer Vernooij
Move weave-era BzrDir directories to a separate file.
431
        b.lock_write()
5784.1.4 by Martin Pool
Update weave format tests to avoid failIf, failUnless, etc
432
        self.assertPathExists('.bzr/branch-lock.write-lock')
5712.4.1 by Jelmer Vernooij
Move weave-era BzrDir directories to a separate file.
433
        b.unlock()
5784.1.4 by Martin Pool
Update weave format tests to avoid failIf, failUnless, etc
434
        self.assertPathDoesNotExist('.bzr/branch-lock.write-lock')
5712.4.1 by Jelmer Vernooij
Move weave-era BzrDir directories to a separate file.
435
436
437
class TestInfo(TestCaseWithTransport):
438
439
    def test_info_locking_oslocks(self):
440
        if sys.platform == "win32":
441
            self.skip("don't use oslocks on win32 in unix manner")
442
        # This test tests old (all-in-one, OS lock using) behaviour which
443
        # simply cannot work on windows (and is indeed why we changed our
444
        # design. As such, don't try to remove the thisFailsStrictLockCheck
445
        # call here.
446
        self.thisFailsStrictLockCheck()
447
448
        tree = self.make_branch_and_tree('branch',
449
                                         format=BzrDirFormat6())
450
451
        # Test all permutations of locking the working tree, branch and repository
452
        # XXX: Well not yet, as we can't query oslocks yet. Currently, it's
453
        # implemented by raising NotImplementedError and get_physical_lock_status()
454
        # always returns false. This makes bzr info hide the lock status.  (Olaf)
455
        # W B R
456
457
        # U U U
458
        out, err = self.run_bzr('info -v branch')
459
        self.assertEqualDiff(
460
"""Standalone tree (format: weave)
461
Location:
462
  branch root: %s
463
464
Format:
465
       control: All-in-one format 6
466
  working tree: Working tree format 2
467
        branch: Branch format 4
468
    repository: %s
469
470
In the working tree:
471
         0 unchanged
472
         0 modified
473
         0 added
474
         0 removed
475
         0 renamed
476
         0 unknown
477
         0 ignored
478
         0 versioned subdirectories
479
480
Branch history:
481
         0 revisions
482
483
Repository:
484
         0 revisions
485
""" % ('branch', tree.branch.repository._format.get_format_description(),
486
       ), out)
487
        self.assertEqual('', err)
488
        # L L L
489
        tree.lock_write()
490
        out, err = self.run_bzr('info -v branch')
491
        self.assertEqualDiff(
492
"""Standalone tree (format: weave)
493
Location:
494
  branch root: %s
495
496
Format:
497
       control: All-in-one format 6
498
  working tree: Working tree format 2
499
        branch: Branch format 4
500
    repository: %s
501
502
In the working tree:
503
         0 unchanged
504
         0 modified
505
         0 added
506
         0 removed
507
         0 renamed
508
         0 unknown
509
         0 ignored
510
         0 versioned subdirectories
511
512
Branch history:
513
         0 revisions
514
515
Repository:
516
         0 revisions
517
""" % ('branch', tree.branch.repository._format.get_format_description(),
518
       ), out)
519
        self.assertEqual('', err)
520
        tree.unlock()
521
522
5582.10.91 by Jelmer Vernooij
Fix some tests.
523
class TestBranchFormat4(TestCaseWithTransport):
524
    """Tests specific to branch format 4"""
525
526
    def test_no_metadir_support(self):
527
        url = self.get_url()
528
        bdir = bzrdir.BzrDirMetaFormat1().initialize(url)
529
        bdir.create_repository()
530
        self.assertRaises(errors.IncompatibleFormat,
531
            BzrBranchFormat4().initialize, bdir)
532
533
    def test_supports_bzrdir_6(self):
534
        url = self.get_url()
5582.10.97 by Jelmer Vernooij
Fix import of BzrDirFormat6 after merge.
535
        bdir = BzrDirFormat6().initialize(url)
5582.10.91 by Jelmer Vernooij
Fix some tests.
536
        bdir.create_repository()
537
        BzrBranchFormat4().initialize(bdir)
538
539
540
class TestBoundBranch(TestCaseWithTransport):
541
542
    def setUp(self):
543
        super(TestBoundBranch, self).setUp()
544
        self.build_tree(['master/', 'child/'])
545
        self.make_branch_and_tree('master')
546
        self.make_branch_and_tree('child',
547
                        format=bzrdir.format_registry.make_bzrdir('weave'))
548
        os.chdir('child')
549
550
    def test_bind_format_6_bzrdir(self):
551
        # bind on a format 6 bzrdir should error
552
        out,err = self.run_bzr('bind ../master', retcode=3)
553
        self.assertEqual('', out)
554
        # TODO: jam 20060427 Probably something like this really should
555
        #       print out the actual path, rather than the URL
556
        cwd = urlutils.local_path_to_url(getcwd())
557
        self.assertEqual('bzr: ERROR: To use this feature you must '
558
                         'upgrade your branch at %s/.\n' % cwd, err)
559
560
    def test_unbind_format_6_bzrdir(self):
561
        # bind on a format 6 bzrdir should error
562
        out,err = self.run_bzr('unbind', retcode=3)
563
        self.assertEqual('', out)
564
        cwd = urlutils.local_path_to_url(getcwd())
565
        self.assertEqual('bzr: ERROR: To use this feature you must '
566
                         'upgrade your branch at %s/.\n' % cwd, err)
567
568
569
class TestInit(TestCaseWithTransport):
570
571
    def test_init_weave(self):
572
        # --format=weave should be accepted to allow interoperation with
573
        # old releases when desired.
574
        out, err = self.run_bzr('init --format=weave')
575
        self.assertEqual("""Created a standalone tree (format: weave)\n""",
576
            out)
577
        self.assertEqual('', err)
5582.10.92 by Jelmer Vernooij
Move more weave code.
578
579
580
class V4WeaveBundleTester(V4BundleTester):
581
582
    def bzrdir_format(self):
583
        return 'metaweave'