/brz/remove-bazaar

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