~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_info.py

  • Committer: John Arbash Meinel
  • Date: 2006-09-13 02:44:23 UTC
  • mto: This revision was merged to the branch mainline in revision 2071.
  • Revision ID: john@arbash-meinel.com-20060913024423-2f0729076ddd4e31
lazy_import osutils and sign_my_commits
Move doc tests into test_osutils, since lazy_import doesn't play nicely
with DocTest

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
 
1
# Copyright (C) 2006 by Canonical Ltd
 
2
# -*- coding: utf-8 -*-
2
3
#
3
4
# This program is free software; you can redistribute it and/or modify
4
5
# it under the terms of the GNU General Public License as published by
12
13
#
13
14
# You should have received a copy of the GNU General Public License
14
15
# 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
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
 
17
18
 
18
19
"""Tests for the info command of bzr."""
19
20
 
20
21
import sys
21
22
 
22
 
from bzrlib import (
23
 
    branch,
24
 
    bzrdir,
25
 
    errors,
26
 
    info,
27
 
    osutils,
28
 
    tests,
29
 
    upgrade,
30
 
    urlutils,
31
 
    )
32
 
from bzrlib.transport import memory
33
 
 
34
 
 
35
 
class TestInfo(tests.TestCaseWithTransport):
36
 
 
37
 
    def setUp(self):
38
 
        super(TestInfo, self).setUp()
39
 
        self._repo_strings = "2a"
 
23
import bzrlib
 
24
from bzrlib.osutils import format_date
 
25
from bzrlib.tests import TestSkipped
 
26
from bzrlib.tests.blackbox import ExternalBase
 
27
 
 
28
 
 
29
class TestInfo(ExternalBase):
40
30
 
41
31
    def test_info_non_existing(self):
42
 
        self.vfs_transport_factory = memory.MemoryServer
43
 
        location = self.get_url()
44
 
        out, err = self.run_bzr('info '+location, retcode=3)
 
32
        if sys.platform == "win32":
 
33
            location = "C:/i/do/not/exist/"
 
34
        else:
 
35
            location = "/i/do/not/exist/"
 
36
        out, err = self.runbzr('info '+location, retcode=3)
45
37
        self.assertEqual(out, '')
46
 
        self.assertEqual(err, 'bzr: ERROR: Not a branch: "%s".\n' % location)
 
38
        self.assertEqual(err, 'bzr: ERROR: Not a branch: %s\n' % location)
47
39
 
48
40
    def test_info_standalone(self):
49
41
        transport = self.get_transport()
50
42
 
51
43
        # Create initial standalone branch
52
 
        tree1 = self.make_branch_and_tree('standalone', 'weave')
 
44
        old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
 
45
        bzrlib.bzrdir.BzrDirFormat.set_default_format(bzrlib.bzrdir.BzrDirFormat6())
 
46
        tree1 = self.make_branch_and_tree('standalone')
 
47
        bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
53
48
        self.build_tree(['standalone/a'])
54
49
        tree1.add('a')
55
50
        branch1 = tree1.branch
56
 
 
57
 
        out, err = self.run_bzr('info standalone')
58
 
        self.assertEqualDiff(
59
 
"""Standalone tree (format: weave)
60
 
Location:
61
 
  branch root: standalone
62
 
""", out)
63
 
        self.assertEqual('', err)
64
 
 
65
 
        # Standalone branch - verbose mode
66
 
        out, err = self.run_bzr('info standalone -v')
67
 
        self.assertEqualDiff(
68
 
"""Standalone tree (format: weave)
69
 
Location:
70
 
  branch root: standalone
71
 
 
72
 
Format:
73
 
       control: All-in-one format 6
74
 
  working tree: Working tree format 2
75
 
        branch: Branch format 4
76
 
    repository: Weave repository format 6
77
 
 
78
 
In the working tree:
79
 
         0 unchanged
80
 
         0 modified
81
 
         1 added
82
 
         0 removed
83
 
         0 renamed
84
 
         0 unknown
85
 
         0 ignored
86
 
         0 versioned subdirectories
87
 
 
88
 
Branch history:
89
 
         0 revisions
90
 
 
91
 
Repository:
92
 
         0 revisions
93
 
""", out)
94
 
        self.assertEqual('', err)
95
 
 
96
 
        # Standalone branch - really verbose mode
97
 
        out, err = self.run_bzr('info standalone -vv')
98
 
        self.assertEqualDiff(
99
 
"""Standalone tree (format: weave)
100
 
Location:
101
 
  branch root: standalone
102
 
 
103
 
Format:
104
 
       control: All-in-one format 6
105
 
  working tree: Working tree format 2
106
 
        branch: Branch format 4
107
 
    repository: Weave repository format 6
108
 
 
109
 
In the working tree:
110
 
         0 unchanged
111
 
         0 modified
112
 
         1 added
113
 
         0 removed
114
 
         0 renamed
115
 
         0 unknown
116
 
         0 ignored
117
 
         0 versioned subdirectories
118
 
 
119
 
Branch history:
120
 
         0 revisions
121
 
         0 committers
122
 
 
123
 
Repository:
124
 
         0 revisions
125
 
""", out)
 
51
        out, err = self.runbzr('info standalone')
 
52
        self.assertEqualDiff(
 
53
"""Location:
 
54
  branch root: %s
 
55
 
 
56
Format:
 
57
       control: All-in-one format 6
 
58
  working tree: Working tree format 2
 
59
        branch: Branch format 4
 
60
    repository: Weave repository format 6
 
61
 
 
62
In the working tree:
 
63
         0 unchanged
 
64
         0 modified
 
65
         1 added
 
66
         0 removed
 
67
         0 renamed
 
68
         0 unknown
 
69
         0 ignored
 
70
         0 versioned subdirectories
 
71
 
 
72
Branch history:
 
73
         0 revisions
 
74
 
 
75
Revision store:
 
76
         0 revisions
 
77
         0 KiB
 
78
""" % branch1.bzrdir.root_transport.base, out)
126
79
        self.assertEqual('', err)
127
80
        tree1.commit('commit one')
128
81
        rev = branch1.repository.get_revision(branch1.revision_history()[0])
129
 
        datestring_first = osutils.format_date(rev.timestamp, rev.timezone)
 
82
        datestring_first = format_date(rev.timestamp, rev.timezone)
130
83
 
131
84
        # Branch standalone with push location
132
85
        branch2 = branch1.bzrdir.sprout('branch').open_branch()
133
86
        branch2.set_push_location(branch1.bzrdir.root_transport.base)
134
 
 
135
 
        out, err = self.run_bzr('info branch')
136
 
        self.assertEqualDiff(
137
 
"""Standalone tree (format: weave)
138
 
Location:
139
 
  branch root: branch
140
 
 
141
 
Related branches:
142
 
    push branch: standalone
143
 
  parent branch: standalone
144
 
""", out)
145
 
        self.assertEqual('', err)
146
 
 
147
 
        out, err = self.run_bzr('info branch --verbose')
148
 
        self.assertEqualDiff(
149
 
"""Standalone tree (format: weave)
150
 
Location:
151
 
  branch root: branch
152
 
 
153
 
Related branches:
154
 
    push branch: standalone
155
 
  parent branch: standalone
 
87
        out, err = self.runbzr('info branch --verbose')
 
88
        self.assertEqualDiff(
 
89
"""Location:
 
90
  branch root: %s
 
91
 
 
92
Related branches:
 
93
      parent branch: %s
 
94
  publish to branch: %s
156
95
 
157
96
Format:
158
97
       control: All-in-one format 6
172
111
 
173
112
Branch history:
174
113
         1 revision
 
114
         1 committer
175
115
         0 days old
176
116
   first revision: %s
177
117
  latest revision: %s
178
118
 
179
 
Repository:
 
119
Revision store:
180
120
         1 revision
181
 
""" % (datestring_first, datestring_first,
 
121
         %d KiB
 
122
""" % (branch2.bzrdir.root_transport.base,
 
123
       branch1.bzrdir.root_transport.base,
 
124
       branch1.bzrdir.root_transport.base,
 
125
       datestring_first, datestring_first,
 
126
       # poking at _revision_store isn't all that clean, but neither is
 
127
       # having the ui test dependent on the exact overhead of a given store.
 
128
       branch2.repository._revision_store.total_size(
 
129
        branch2.repository.get_transaction())[1] / 1024,
182
130
       ), out)
183
131
        self.assertEqual('', err)
184
132
 
185
133
        # Branch and bind to standalone, needs upgrade to metadir
186
134
        # (creates backup as unknown)
187
135
        branch1.bzrdir.sprout('bound')
188
 
        knit1_format = bzrdir.format_registry.make_bzrdir('knit')
189
 
        upgrade.upgrade('bound', knit1_format)
190
 
        branch3 = bzrdir.BzrDir.open('bound').open_branch()
 
136
        bzrlib.upgrade.upgrade('bound', bzrlib.bzrdir.BzrDirMetaFormat1())
 
137
        branch3 = bzrlib.bzrdir.BzrDir.open('bound').open_branch()
191
138
        branch3.bind(branch1)
192
139
        bound_tree = branch3.bzrdir.open_workingtree()
193
 
        out, err = self.run_bzr('info -v bound')
 
140
        out, err = self.runbzr('info bound')
194
141
        self.assertEqualDiff(
195
 
"""Checkout (format: knit)
196
 
Location:
197
 
       checkout root: bound
198
 
  checkout of branch: standalone
 
142
"""Location:
 
143
       checkout root: %s
 
144
  checkout of branch: %s
199
145
 
200
146
Related branches:
201
 
  parent branch: standalone
 
147
  parent branch: %s
202
148
 
203
149
Format:
204
150
       control: Meta directory format 1
205
151
  working tree: %s
206
 
        branch: %s
 
152
        branch: Branch format 5
207
153
    repository: %s
208
154
 
209
155
In the working tree:
212
158
         0 added
213
159
         0 removed
214
160
         0 renamed
215
 
         0 unknown
216
 
         1 ignored
 
161
         1 unknown
 
162
         0 ignored
217
163
         0 versioned subdirectories
218
164
 
219
165
Branch history:
222
168
   first revision: %s
223
169
  latest revision: %s
224
170
 
225
 
Repository:
 
171
Revision store:
226
172
         1 revision
227
 
""" % (bound_tree._format.get_format_description(),
228
 
       branch3._format.get_format_description(),
 
173
         %d KiB
 
174
""" % (branch3.bzrdir.root_transport.base,
 
175
       branch1.bzrdir.root_transport.base,
 
176
       branch1.bzrdir.root_transport.base,
 
177
       bound_tree._format.get_format_description(),      
229
178
       branch3.repository._format.get_format_description(),
230
179
       datestring_first, datestring_first,
 
180
       # poking at _revision_store isn't all that clean, but neither is
 
181
       # having the ui test dependent on the exact overhead of a given store.
 
182
       branch3.repository._revision_store.total_size(
 
183
        branch3.repository.get_transaction())[1] / 1024,
231
184
       ), out)
232
185
        self.assertEqual('', err)
233
186
 
234
187
        # Checkout standalone (same as above, but does not have parent set)
235
 
        branch4 = bzrdir.BzrDir.create_branch_convenience('checkout',
236
 
            format=knit1_format)
 
188
        old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
 
189
        bzrlib.bzrdir.BzrDirFormat.set_default_format(bzrlib.bzrdir.BzrDirMetaFormat1())
 
190
        branch4 = bzrlib.bzrdir.BzrDir.create_branch_convenience('checkout')
 
191
        bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
237
192
        branch4.bind(branch1)
238
193
        branch4.bzrdir.open_workingtree().update()
239
 
        out, err = self.run_bzr('info checkout --verbose')
 
194
        out, err = self.runbzr('info checkout --verbose')
240
195
        self.assertEqualDiff(
241
 
"""Checkout (format: knit)
242
 
Location:
243
 
       checkout root: checkout
244
 
  checkout of branch: standalone
 
196
"""Location:
 
197
       checkout root: %s
 
198
  checkout of branch: %s
245
199
 
246
200
Format:
247
201
       control: Meta directory format 1
261
215
 
262
216
Branch history:
263
217
         1 revision
 
218
         1 committer
264
219
         0 days old
265
220
   first revision: %s
266
221
  latest revision: %s
267
222
 
268
 
Repository:
 
223
Revision store:
269
224
         1 revision
270
 
""" % (branch4.repository._format.get_format_description(),
 
225
         %d KiB
 
226
""" % (branch4.bzrdir.root_transport.base,
 
227
       branch1.bzrdir.root_transport.base,
 
228
       branch4.repository._format.get_format_description(),
271
229
       datestring_first, datestring_first,
 
230
       # poking at _revision_store isn't all that clean, but neither is
 
231
       # having the ui test dependent on the exact overhead of a given store.
 
232
       branch4.repository._revision_store.total_size(
 
233
        branch4.repository.get_transaction())[1] / 1024,
272
234
       ), out)
273
235
        self.assertEqual('', err)
274
236
 
275
237
        # Lightweight checkout (same as above, different branch and repository)
276
 
        tree5 = branch1.create_checkout('lightcheckout', lightweight=True)
 
238
        old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
 
239
        bzrlib.bzrdir.BzrDirFormat.set_default_format(bzrlib.bzrdir.BzrDirMetaFormat1())
 
240
        transport.mkdir('lightcheckout')
 
241
        dir5 = bzrlib.bzrdir.BzrDirMetaFormat1().initialize('lightcheckout')
 
242
        bzrlib.branch.BranchReferenceFormat().initialize(dir5, branch1)
 
243
        dir5.create_workingtree()
 
244
        tree5 = dir5.open_workingtree()
 
245
        bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
277
246
        branch5 = tree5.branch
278
 
        out, err = self.run_bzr('info -v lightcheckout')
 
247
        out, err = self.runbzr('info lightcheckout')
279
248
        self.assertEqualDiff(
280
 
"""Lightweight checkout (format: %s)
281
 
Location:
282
 
  light checkout root: lightcheckout
283
 
   checkout of branch: standalone
 
249
"""Location:
 
250
 light checkout root: %s
 
251
  checkout of branch: %s
284
252
 
285
253
Format:
286
254
       control: Meta directory format 1
287
 
  working tree: Working tree format 6
 
255
  working tree: Working tree format 3
288
256
        branch: Branch format 4
289
257
    repository: Weave repository format 6
290
258
 
304
272
   first revision: %s
305
273
  latest revision: %s
306
274
 
307
 
Repository:
 
275
Revision store:
308
276
         1 revision
309
 
""" % (self._repo_strings, datestring_first, datestring_first,), out)
 
277
         0 KiB
 
278
""" % (tree5.bzrdir.root_transport.base,
 
279
       branch1.bzrdir.root_transport.base,
 
280
       datestring_first, datestring_first,
 
281
       ), out)
310
282
        self.assertEqual('', err)
311
283
 
312
284
        # Update initial standalone branch
314
286
        tree1.add('b')
315
287
        tree1.commit('commit two')
316
288
        rev = branch1.repository.get_revision(branch1.revision_history()[-1])
317
 
        datestring_last = osutils.format_date(rev.timestamp, rev.timezone)
 
289
        datestring_last = format_date(rev.timestamp, rev.timezone)
318
290
 
319
291
        # Out of date branched standalone branch will not be detected
320
 
        out, err = self.run_bzr('info -v branch')
 
292
        out, err = self.runbzr('info branch')
321
293
        self.assertEqualDiff(
322
 
"""Standalone tree (format: weave)
323
 
Location:
324
 
  branch root: branch
 
294
"""Location:
 
295
  branch root: %s
325
296
 
326
297
Related branches:
327
 
    push branch: standalone
328
 
  parent branch: standalone
 
298
      parent branch: %s
 
299
  publish to branch: %s
329
300
 
330
301
Format:
331
302
       control: All-in-one format 6
349
320
   first revision: %s
350
321
  latest revision: %s
351
322
 
352
 
Repository:
 
323
Revision store:
353
324
         1 revision
354
 
""" % (datestring_first, datestring_first,
 
325
         0 KiB
 
326
""" % (branch2.bzrdir.root_transport.base,
 
327
       branch1.bzrdir.root_transport.base,
 
328
       branch1.bzrdir.root_transport.base,
 
329
       datestring_first, datestring_first,
355
330
       ), out)
356
331
        self.assertEqual('', err)
357
332
 
358
333
        # Out of date bound branch
359
 
        out, err = self.run_bzr('info -v bound')
 
334
        out, err = self.runbzr('info bound')
360
335
        self.assertEqualDiff(
361
 
"""Checkout (format: knit)
362
 
Location:
363
 
       checkout root: bound
364
 
  checkout of branch: standalone
 
336
"""Location:
 
337
       checkout root: %s
 
338
  checkout of branch: %s
365
339
 
366
340
Related branches:
367
 
  parent branch: standalone
 
341
  parent branch: %s
368
342
 
369
343
Format:
370
344
       control: Meta directory format 1
380
354
         0 added
381
355
         0 removed
382
356
         0 renamed
383
 
         0 unknown
384
 
         1 ignored
 
357
         1 unknown
 
358
         0 ignored
385
359
         0 versioned subdirectories
386
360
 
387
361
Branch history:
390
364
   first revision: %s
391
365
  latest revision: %s
392
366
 
393
 
Repository:
 
367
Revision store:
394
368
         1 revision
395
 
""" % (branch3.repository._format.get_format_description(),
 
369
         %d KiB
 
370
""" % (branch3.bzrdir.root_transport.base,
 
371
       branch1.bzrdir.root_transport.base,
 
372
       branch1.bzrdir.root_transport.base,
 
373
       branch3.repository._format.get_format_description(),
396
374
       datestring_first, datestring_first,
 
375
       # poking at _revision_store isn't all that clean, but neither is
 
376
       # having the ui test dependent on the exact overhead of a given store.
 
377
       branch3.repository._revision_store.total_size(
 
378
        branch3.repository.get_transaction())[1] / 1024,
397
379
       ), out)
398
380
        self.assertEqual('', err)
399
381
 
400
382
        # Out of date checkout
401
 
        out, err = self.run_bzr('info -v checkout')
 
383
        out, err = self.runbzr('info checkout')
402
384
        self.assertEqualDiff(
403
 
"""Checkout (format: knit)
404
 
Location:
405
 
       checkout root: checkout
406
 
  checkout of branch: standalone
 
385
"""Location:
 
386
       checkout root: %s
 
387
  checkout of branch: %s
407
388
 
408
389
Format:
409
390
       control: Meta directory format 1
429
410
   first revision: %s
430
411
  latest revision: %s
431
412
 
432
 
Repository:
 
413
Revision store:
433
414
         1 revision
434
 
""" % (branch4.repository._format.get_format_description(),
 
415
         %d KiB
 
416
""" % (branch4.bzrdir.root_transport.base,
 
417
       branch1.bzrdir.root_transport.base,
 
418
       branch4.repository._format.get_format_description(),
435
419
       datestring_first, datestring_first,
 
420
       # poking at _revision_store isn't all that clean, but neither is
 
421
       # having the ui test dependent on the exact overhead of a given store.
 
422
       branch4.repository._revision_store.total_size(
 
423
        branch4.repository.get_transaction())[1] / 1024,
436
424
       ), out)
437
425
        self.assertEqual('', err)
438
426
 
439
427
        # Out of date lightweight checkout
440
 
        out, err = self.run_bzr('info lightcheckout --verbose')
 
428
        out, err = self.runbzr('info lightcheckout --verbose')
441
429
        self.assertEqualDiff(
442
 
"""Lightweight checkout (format: %s)
443
 
Location:
444
 
  light checkout root: lightcheckout
445
 
   checkout of branch: standalone
 
430
"""Location:
 
431
 light checkout root: %s
 
432
  checkout of branch: %s
446
433
 
447
434
Format:
448
435
       control: Meta directory format 1
449
 
  working tree: Working tree format 6
 
436
  working tree: Working tree format 3
450
437
        branch: Branch format 4
451
438
    repository: Weave repository format 6
452
439
 
464
451
 
465
452
Branch history:
466
453
         2 revisions
 
454
         1 committer
467
455
         0 days old
468
456
   first revision: %s
469
457
  latest revision: %s
470
458
 
471
 
Repository:
 
459
Revision store:
472
460
         2 revisions
473
 
""" % (self._repo_strings, datestring_first, datestring_last,), out)
 
461
         0 KiB
 
462
""" % (tree5.bzrdir.root_transport.base,
 
463
       branch1.bzrdir.root_transport.base,
 
464
       datestring_first, datestring_last,
 
465
       ), out)
474
466
        self.assertEqual('', err)
475
467
 
476
468
    def test_info_standalone_no_tree(self):
477
469
        # create standalone branch without a working tree
478
 
        format = bzrdir.format_registry.make_bzrdir('default')
479
470
        branch = self.make_branch('branch')
480
471
        repo = branch.repository
481
 
        out, err = self.run_bzr('info branch -v')
 
472
        out, err = self.runbzr('info branch')
482
473
        self.assertEqualDiff(
483
 
"""Standalone branch (format: %s)
484
 
Location:
485
 
  branch root: branch
 
474
"""Location:
 
475
  branch root: %s
486
476
 
487
477
Format:
488
478
       control: Meta directory format 1
489
 
        branch: %s
 
479
        branch: Branch format 5
490
480
    repository: %s
491
481
 
492
482
Branch history:
493
483
         0 revisions
494
484
 
495
 
Repository:
 
485
Revision store:
496
486
         0 revisions
497
 
""" % (info.describe_format(repo.bzrdir, repo, branch, None),
498
 
       format.get_branch_format().get_format_description(),
499
 
       format.repository_format.get_format_description(),
 
487
         0 KiB
 
488
""" % (branch.bzrdir.root_transport.base,
 
489
       repo._format.get_format_description(),
500
490
       ), out)
501
491
        self.assertEqual('', err)
502
492
 
503
493
    def test_info_shared_repository(self):
504
 
        format = bzrdir.format_registry.make_bzrdir('knit')
 
494
        old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
 
495
        bzrlib.bzrdir.BzrDirFormat.set_default_format(bzrlib.bzrdir.BzrDirMetaFormat1())
505
496
        transport = self.get_transport()
506
497
 
507
498
        # Create shared repository
508
 
        repo = self.make_repository('repo', shared=True, format=format)
 
499
        repo = self.make_repository('repo', shared=True)
509
500
        repo.set_make_working_trees(False)
510
 
        out, err = self.run_bzr('info -v repo')
 
501
        out, err = self.runbzr('info repo')
511
502
        self.assertEqualDiff(
512
 
"""Shared repository (format: dirstate or dirstate-tags or knit)
513
 
Location:
 
503
"""Location:
514
504
  shared repository: %s
515
505
 
516
506
Format:
517
507
       control: Meta directory format 1
518
508
    repository: %s
519
509
 
520
 
Repository:
 
510
Revision store:
521
511
         0 revisions
522
 
""" % ('repo', format.repository_format.get_format_description(),
 
512
         0 KiB
 
513
""" % (repo.bzrdir.root_transport.base,
 
514
       repo._format.get_format_description(),
523
515
       ), out)
524
516
        self.assertEqual('', err)
525
517
 
526
518
        # Create branch inside shared repository
527
519
        repo.bzrdir.root_transport.mkdir('branch')
528
 
        branch1 = repo.bzrdir.create_branch_convenience('repo/branch',
529
 
            format=format)
530
 
        out, err = self.run_bzr('info -v repo/branch')
 
520
        branch1 = repo.bzrdir.create_branch_convenience('repo/branch')
 
521
        out, err = self.runbzr('info repo/branch')
531
522
        self.assertEqualDiff(
532
 
"""Repository branch (format: dirstate or knit)
533
 
Location:
534
 
  shared repository: repo
535
 
  repository branch: repo/branch
 
523
"""Location:
 
524
  shared repository: %s
 
525
  repository branch: branch
536
526
 
537
527
Format:
538
528
       control: Meta directory format 1
539
 
        branch: %s
 
529
        branch: Branch format 5
540
530
    repository: %s
541
531
 
542
532
Branch history:
543
533
         0 revisions
544
534
 
545
 
Repository:
 
535
Revision store:
546
536
         0 revisions
547
 
""" % (format.get_branch_format().get_format_description(),
548
 
       format.repository_format.get_format_description(),
 
537
         0 KiB
 
538
""" % (repo.bzrdir.root_transport.base,
 
539
       repo._format.get_format_description(),
549
540
       ), out)
550
541
        self.assertEqual('', err)
551
542
 
552
543
        # Create lightweight checkout
553
544
        transport.mkdir('tree')
554
545
        transport.mkdir('tree/lightcheckout')
555
 
        tree2 = branch1.create_checkout('tree/lightcheckout',
556
 
            lightweight=True)
 
546
        dir2 = bzrlib.bzrdir.BzrDirMetaFormat1().initialize('tree/lightcheckout')
 
547
        bzrlib.branch.BranchReferenceFormat().initialize(dir2, branch1)
 
548
        dir2.create_workingtree()
 
549
        tree2 = dir2.open_workingtree()
557
550
        branch2 = tree2.branch
558
 
        self.assertCheckoutStatusOutput('-v tree/lightcheckout', tree2,
559
 
                   shared_repo=repo, repo_branch=branch1, verbose=True)
 
551
        self.assertCheckoutStatusOutput('tree/lightcheckout', tree2, shared_repo=repo)
560
552
 
561
553
        # Create normal checkout
562
554
        tree3 = branch1.create_checkout('tree/checkout')
568
560
        tree2.add('a')
569
561
        tree2.commit('commit one')
570
562
        rev = repo.get_revision(branch2.revision_history()[0])
571
 
        datestring_first = osutils.format_date(rev.timestamp, rev.timezone)
572
 
        out, err = self.run_bzr('info tree/lightcheckout --verbose')
 
563
        datestring_first = format_date(rev.timestamp, rev.timezone)
 
564
        out, err = self.runbzr('info tree/lightcheckout --verbose')
573
565
        self.assertEqualDiff(
574
 
"""Lightweight checkout (format: %s)
575
 
Location:
576
 
  light checkout root: tree/lightcheckout
577
 
   checkout of branch: repo/branch
578
 
    shared repository: repo
 
566
"""Location:
 
567
 light checkout root: %s
 
568
   shared repository: %s
 
569
   repository branch: branch
579
570
 
580
571
Format:
581
572
       control: Meta directory format 1
582
 
  working tree: Working tree format 6
583
 
        branch: %s
 
573
  working tree: Working tree format 3
 
574
        branch: Branch format 5
584
575
    repository: %s
585
576
 
586
577
In the working tree:
595
586
 
596
587
Branch history:
597
588
         1 revision
 
589
         1 committer
598
590
         0 days old
599
591
   first revision: %s
600
592
  latest revision: %s
601
593
 
602
 
Repository:
 
594
Revision store:
603
595
         1 revision
604
 
""" % (self._repo_strings, format.get_branch_format().get_format_description(),
605
 
       format.repository_format.get_format_description(),
 
596
         %d KiB
 
597
""" % (tree2.bzrdir.root_transport.base,
 
598
       repo.bzrdir.root_transport.base,
 
599
       repo._format.get_format_description(),
606
600
       datestring_first, datestring_first,
 
601
       # poking at _revision_store isn't all that clean, but neither is
 
602
       # having the ui test dependent on the exact overhead of a given store.
 
603
       repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
607
604
       ), out)
608
605
        self.assertEqual('', err)
609
606
 
610
607
        # Out of date checkout
611
 
        out, err = self.run_bzr('info -v tree/checkout')
 
608
        out, err = self.runbzr('info tree/checkout')
612
609
        self.assertEqualDiff(
613
 
"""Checkout (format: unnamed)
614
 
Location:
615
 
       checkout root: tree/checkout
616
 
  checkout of branch: repo/branch
 
610
"""Location:
 
611
       checkout root: %s
 
612
  checkout of branch: %s
617
613
 
618
614
Format:
619
615
       control: Meta directory format 1
620
 
  working tree: Working tree format 6
621
 
        branch: %s
 
616
  working tree: Working tree format 3
 
617
        branch: Branch format 5
622
618
    repository: %s
623
619
 
624
620
Branch is out of date: missing 1 revision.
636
632
Branch history:
637
633
         0 revisions
638
634
 
639
 
Repository:
 
635
Revision store:
640
636
         0 revisions
641
 
""" % (format.get_branch_format().get_format_description(),
642
 
       format.repository_format.get_format_description(),
 
637
         0 KiB
 
638
""" % (tree3.bzrdir.root_transport.base,
 
639
       branch1.bzrdir.root_transport.base,
 
640
       repo._format.get_format_description(),
643
641
       ), out)
644
642
        self.assertEqual('', err)
645
643
 
647
645
        tree3.update()
648
646
        self.build_tree(['tree/checkout/b'])
649
647
        tree3.add('b')
650
 
        out, err = self.run_bzr('info tree/checkout --verbose')
 
648
        out, err = self.runbzr('info tree/checkout --verbose')
651
649
        self.assertEqualDiff(
652
 
"""Checkout (format: unnamed)
653
 
Location:
654
 
       checkout root: tree/checkout
655
 
  checkout of branch: repo/branch
 
650
"""Location:
 
651
       checkout root: %s
 
652
  checkout of branch: %s
656
653
 
657
654
Format:
658
655
       control: Meta directory format 1
659
 
  working tree: Working tree format 6
660
 
        branch: %s
 
656
  working tree: Working tree format 3
 
657
        branch: Branch format 5
661
658
    repository: %s
662
659
 
663
660
In the working tree:
672
669
 
673
670
Branch history:
674
671
         1 revision
 
672
         1 committer
675
673
         0 days old
676
674
   first revision: %s
677
675
  latest revision: %s
678
676
 
679
 
Repository:
 
677
Revision store:
680
678
         1 revision
681
 
""" % (format.get_branch_format().get_format_description(),
682
 
       format.repository_format.get_format_description(),
 
679
         %d KiB
 
680
""" % (tree3.bzrdir.root_transport.base, branch1.bzrdir.root_transport.base,
 
681
       repo._format.get_format_description(),
683
682
       datestring_first, datestring_first,
 
683
       # poking at _revision_store isn't all that clean, but neither is
 
684
       # having the ui test dependent on the exact overhead of a given store.
 
685
       repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
684
686
       ), out)
685
687
        self.assertEqual('', err)
686
688
        tree3.commit('commit two')
687
689
 
688
690
        # Out of date lightweight checkout
689
691
        rev = repo.get_revision(branch1.revision_history()[-1])
690
 
        datestring_last = osutils.format_date(rev.timestamp, rev.timezone)
691
 
        out, err = self.run_bzr('info tree/lightcheckout --verbose')
 
692
        datestring_last = format_date(rev.timestamp, rev.timezone)
 
693
        out, err = self.runbzr('info tree/lightcheckout --verbose')
692
694
        self.assertEqualDiff(
693
 
"""Lightweight checkout (format: %s)
694
 
Location:
695
 
  light checkout root: tree/lightcheckout
696
 
   checkout of branch: repo/branch
697
 
    shared repository: repo
 
695
"""Location:
 
696
 light checkout root: %s
 
697
   shared repository: %s
 
698
   repository branch: branch
698
699
 
699
700
Format:
700
701
       control: Meta directory format 1
701
 
  working tree: Working tree format 6
702
 
        branch: %s
 
702
  working tree: Working tree format 3
 
703
        branch: Branch format 5
703
704
    repository: %s
704
705
 
705
706
Working tree is out of date: missing 1 revision.
716
717
 
717
718
Branch history:
718
719
         2 revisions
 
720
         1 committer
719
721
         0 days old
720
722
   first revision: %s
721
723
  latest revision: %s
722
724
 
723
 
Repository:
 
725
Revision store:
724
726
         2 revisions
725
 
""" % (self._repo_strings, format.get_branch_format().get_format_description(),
726
 
       format.repository_format.get_format_description(),
 
727
         %d KiB
 
728
""" % (tree2.bzrdir.root_transport.base,
 
729
       repo.bzrdir.root_transport.base,
 
730
       repo._format.get_format_description(),
727
731
       datestring_first, datestring_last,
 
732
       # poking at _revision_store isn't all that clean, but neither is
 
733
       # having the ui test dependent on the exact overhead of a given store.
 
734
       repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
728
735
       ), out)
729
736
        self.assertEqual('', err)
730
737
 
731
738
        # Show info about shared branch
732
 
        out, err = self.run_bzr('info repo/branch --verbose')
 
739
        out, err = self.runbzr('info repo/branch --verbose')
733
740
        self.assertEqualDiff(
734
 
"""Repository branch (format: dirstate or knit)
735
 
Location:
736
 
  shared repository: repo
737
 
  repository branch: repo/branch
 
741
"""Location:
 
742
  shared repository: %s
 
743
  repository branch: branch
738
744
 
739
745
Format:
740
746
       control: Meta directory format 1
741
 
        branch: %s
 
747
        branch: Branch format 5
742
748
    repository: %s
743
749
 
744
750
Branch history:
745
751
         2 revisions
 
752
         1 committer
746
753
         0 days old
747
754
   first revision: %s
748
755
  latest revision: %s
749
756
 
750
 
Repository:
 
757
Revision store:
751
758
         2 revisions
752
 
""" % (format.get_branch_format().get_format_description(),
753
 
       format.repository_format.get_format_description(),
 
759
         %d KiB
 
760
""" % (repo.bzrdir.root_transport.base,
 
761
       repo._format.get_format_description(),
754
762
       datestring_first, datestring_last,
 
763
       # poking at _revision_store isn't all that clean, but neither is
 
764
       # having the ui test dependent on the exact overhead of a given store.
 
765
       repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
755
766
       ), out)
756
767
        self.assertEqual('', err)
757
768
 
758
769
        # Show info about repository with revisions
759
 
        out, err = self.run_bzr('info -v repo')
 
770
        out, err = self.runbzr('info repo')
760
771
        self.assertEqualDiff(
761
 
"""Shared repository (format: dirstate or dirstate-tags or knit)
762
 
Location:
763
 
  shared repository: repo
 
772
"""Location:
 
773
  shared repository: %s
764
774
 
765
775
Format:
766
776
       control: Meta directory format 1
767
777
    repository: %s
768
778
 
769
 
Repository:
 
779
Revision store:
770
780
         2 revisions
771
 
""" % (format.repository_format.get_format_description(),
 
781
         %d KiB
 
782
""" % (repo.bzrdir.root_transport.base,
 
783
       repo._format.get_format_description(),
 
784
       # poking at _revision_store isn't all that clean, but neither is
 
785
       # having the ui test dependent on the exact overhead of a given store.
 
786
       repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
772
787
       ), out)
773
788
        self.assertEqual('', err)
774
789
 
 
790
        bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
 
791
 
775
792
    def test_info_shared_repository_with_trees(self):
776
 
        format = bzrdir.format_registry.make_bzrdir('knit')
 
793
        old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
 
794
        bzrlib.bzrdir.BzrDirFormat.set_default_format(bzrlib.bzrdir.BzrDirMetaFormat1())
777
795
        transport = self.get_transport()
778
796
 
779
797
        # Create shared repository with working trees
780
 
        repo = self.make_repository('repo', shared=True, format=format)
 
798
        repo = self.make_repository('repo', shared=True)
781
799
        repo.set_make_working_trees(True)
782
 
        out, err = self.run_bzr('info -v repo')
 
800
        out, err = self.runbzr('info repo')
783
801
        self.assertEqualDiff(
784
 
"""Shared repository with trees (format: dirstate or dirstate-tags or knit)
785
 
Location:
786
 
  shared repository: repo
 
802
"""Location:
 
803
  shared repository: %s
787
804
 
788
805
Format:
789
806
       control: Meta directory format 1
791
808
 
792
809
Create working tree for new branches inside the repository.
793
810
 
794
 
Repository:
 
811
Revision store:
795
812
         0 revisions
796
 
""" % (format.repository_format.get_format_description(),
 
813
         0 KiB
 
814
""" % (repo.bzrdir.root_transport.base,
 
815
       repo._format.get_format_description(),
797
816
       ), out)
798
817
        self.assertEqual('', err)
799
818
 
800
819
        # Create two branches
801
820
        repo.bzrdir.root_transport.mkdir('branch1')
802
 
        branch1 = repo.bzrdir.create_branch_convenience('repo/branch1',
803
 
            format=format)
 
821
        branch1 = repo.bzrdir.create_branch_convenience('repo/branch1')
804
822
        branch2 = branch1.bzrdir.sprout('repo/branch2').open_branch()
805
823
 
806
824
        # Empty first branch
807
 
        out, err = self.run_bzr('info repo/branch1 --verbose')
 
825
        out, err = self.runbzr('info repo/branch1 --verbose')
808
826
        self.assertEqualDiff(
809
 
"""Repository tree (format: knit)
810
 
Location:
811
 
  shared repository: repo
812
 
  repository branch: repo/branch1
 
827
"""Location:
 
828
    shared repository: %s
 
829
  repository checkout: branch1
813
830
 
814
831
Format:
815
832
       control: Meta directory format 1
816
833
  working tree: Working tree format 3
817
 
        branch: %s
 
834
        branch: Branch format 5
818
835
    repository: %s
819
836
 
820
837
In the working tree:
829
846
 
830
847
Branch history:
831
848
         0 revisions
 
849
         0 committers
832
850
 
833
 
Repository:
 
851
Revision store:
834
852
         0 revisions
835
 
""" % (format.get_branch_format().get_format_description(),
836
 
       format.repository_format.get_format_description(),
 
853
         0 KiB
 
854
""" % (repo.bzrdir.root_transport.base,
 
855
       repo._format.get_format_description(),
837
856
       ), out)
838
857
        self.assertEqual('', err)
839
858
 
843
862
        tree1.add('a')
844
863
        tree1.commit('commit one')
845
864
        rev = repo.get_revision(branch1.revision_history()[0])
846
 
        datestring_first = osutils.format_date(rev.timestamp, rev.timezone)
847
 
        out, err = self.run_bzr('info -v repo/branch1')
 
865
        datestring_first = format_date(rev.timestamp, rev.timezone)
 
866
        out, err = self.runbzr('info repo/branch1')
848
867
        self.assertEqualDiff(
849
 
"""Repository tree (format: knit)
850
 
Location:
851
 
  shared repository: repo
852
 
  repository branch: repo/branch1
 
868
"""Location:
 
869
    shared repository: %s
 
870
  repository checkout: branch1
853
871
 
854
872
Format:
855
873
       control: Meta directory format 1
856
874
  working tree: Working tree format 3
857
 
        branch: %s
 
875
        branch: Branch format 5
858
876
    repository: %s
859
877
 
860
878
In the working tree:
873
891
   first revision: %s
874
892
  latest revision: %s
875
893
 
876
 
Repository:
 
894
Revision store:
877
895
         1 revision
878
 
""" % (format.get_branch_format().get_format_description(),
879
 
       format.repository_format.get_format_description(),
 
896
         %d KiB
 
897
""" % (repo.bzrdir.root_transport.base,
 
898
       repo._format.get_format_description(),
880
899
       datestring_first, datestring_first,
 
900
       # poking at _revision_store isn't all that clean, but neither is
 
901
       # having the ui test dependent on the exact overhead of a given store.
 
902
       repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
881
903
       ), out)
882
904
        self.assertEqual('', err)
883
905
 
884
906
        # Out of date second branch
885
 
        out, err = self.run_bzr('info repo/branch2 --verbose')
 
907
        out, err = self.runbzr('info repo/branch2 --verbose')
886
908
        self.assertEqualDiff(
887
 
"""Repository tree (format: knit)
888
 
Location:
889
 
  shared repository: repo
890
 
  repository branch: repo/branch2
 
909
"""Location:
 
910
    shared repository: %s
 
911
  repository checkout: branch2
891
912
 
892
913
Related branches:
893
 
  parent branch: repo/branch1
 
914
  parent branch: %s
894
915
 
895
916
Format:
896
917
       control: Meta directory format 1
897
918
  working tree: Working tree format 3
898
 
        branch: %s
 
919
        branch: Branch format 5
899
920
    repository: %s
900
921
 
901
922
In the working tree:
910
931
 
911
932
Branch history:
912
933
         0 revisions
 
934
         0 committers
913
935
 
914
 
Repository:
 
936
Revision store:
915
937
         1 revision
916
 
""" % (format.get_branch_format().get_format_description(),
917
 
       format.repository_format.get_format_description(),
 
938
         %d KiB
 
939
""" % (repo.bzrdir.root_transport.base,
 
940
       branch1.bzrdir.root_transport.base,
 
941
       repo._format.get_format_description(),
 
942
       # poking at _revision_store isn't all that clean, but neither is
 
943
       # having the ui test dependent on the exact overhead of a given store.
 
944
       repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
918
945
       ), out)
919
946
        self.assertEqual('', err)
920
947
 
921
948
        # Update second branch
922
949
        tree2 = branch2.bzrdir.open_workingtree()
923
950
        tree2.pull(branch1)
924
 
        out, err = self.run_bzr('info -v repo/branch2')
 
951
        out, err = self.runbzr('info repo/branch2')
925
952
        self.assertEqualDiff(
926
 
"""Repository tree (format: knit)
927
 
Location:
928
 
  shared repository: repo
929
 
  repository branch: repo/branch2
 
953
"""Location:
 
954
    shared repository: %s
 
955
  repository checkout: branch2
930
956
 
931
957
Related branches:
932
 
  parent branch: repo/branch1
 
958
  parent branch: %s
933
959
 
934
960
Format:
935
961
       control: Meta directory format 1
936
962
  working tree: Working tree format 3
937
 
        branch: %s
 
963
        branch: Branch format 5
938
964
    repository: %s
939
965
 
940
966
In the working tree:
953
979
   first revision: %s
954
980
  latest revision: %s
955
981
 
956
 
Repository:
 
982
Revision store:
957
983
         1 revision
958
 
""" % (format.get_branch_format().get_format_description(),
959
 
       format.repository_format.get_format_description(),
 
984
         %d KiB
 
985
""" % (repo.bzrdir.root_transport.base,
 
986
       branch1.bzrdir.root_transport.base,
 
987
       repo._format.get_format_description(),
960
988
       datestring_first, datestring_first,
 
989
       # poking at _revision_store isn't all that clean, but neither is
 
990
       # having the ui test dependent on the exact overhead of a given store.
 
991
       repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
961
992
       ), out)
962
993
        self.assertEqual('', err)
963
994
 
964
995
        # Show info about repository with revisions
965
 
        out, err = self.run_bzr('info -v repo')
 
996
        out, err = self.runbzr('info repo')
966
997
        self.assertEqualDiff(
967
 
"""Shared repository with trees (format: dirstate or dirstate-tags or knit)
968
 
Location:
969
 
  shared repository: repo
 
998
"""Location:
 
999
  shared repository: %s
970
1000
 
971
1001
Format:
972
1002
       control: Meta directory format 1
974
1004
 
975
1005
Create working tree for new branches inside the repository.
976
1006
 
977
 
Repository:
 
1007
Revision store:
978
1008
         1 revision
979
 
""" % (format.repository_format.get_format_description(),
 
1009
         %d KiB
 
1010
""" % (repo.bzrdir.root_transport.base,
 
1011
       repo._format.get_format_description(),
 
1012
       # poking at _revision_store isn't all that clean, but neither is
 
1013
       # having the ui test dependent on the exact overhead of a given store.
 
1014
       repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
980
1015
       ),
981
1016
       out)
982
1017
        self.assertEqual('', err)
983
1018
 
 
1019
        bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
 
1020
    
984
1021
    def test_info_shared_repository_with_tree_in_root(self):
985
 
        format = bzrdir.format_registry.make_bzrdir('knit')
 
1022
        old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
 
1023
        bzrlib.bzrdir.BzrDirFormat.set_default_format(bzrlib.bzrdir.BzrDirMetaFormat1())
986
1024
        transport = self.get_transport()
987
1025
 
988
1026
        # Create shared repository with working trees
989
 
        repo = self.make_repository('repo', shared=True, format=format)
 
1027
        repo = self.make_repository('repo', shared=True)
990
1028
        repo.set_make_working_trees(True)
991
 
        out, err = self.run_bzr('info -v repo')
 
1029
        out, err = self.runbzr('info repo')
992
1030
        self.assertEqualDiff(
993
 
"""Shared repository with trees (format: dirstate or dirstate-tags or knit)
994
 
Location:
995
 
  shared repository: repo
 
1031
"""Location:
 
1032
  shared repository: %s
996
1033
 
997
1034
Format:
998
1035
       control: Meta directory format 1
1000
1037
 
1001
1038
Create working tree for new branches inside the repository.
1002
1039
 
1003
 
Repository:
 
1040
Revision store:
1004
1041
         0 revisions
1005
 
""" % (format.repository_format.get_format_description(),
 
1042
         0 KiB
 
1043
""" % (repo.bzrdir.root_transport.base,
 
1044
       repo._format.get_format_description(),
1006
1045
       ), out)
1007
1046
        self.assertEqual('', err)
1008
1047
 
1010
1049
        control = repo.bzrdir
1011
1050
        branch = control.create_branch()
1012
1051
        control.create_workingtree()
1013
 
        out, err = self.run_bzr('info -v repo')
 
1052
        out, err = self.runbzr('info repo')
1014
1053
        self.assertEqualDiff(
1015
 
"""Repository tree (format: knit)
1016
 
Location:
1017
 
  shared repository: repo
1018
 
  repository branch: repo
 
1054
"""Location:
 
1055
    shared repository: %s
 
1056
  repository checkout: .
1019
1057
 
1020
1058
Format:
1021
1059
       control: Meta directory format 1
1022
1060
  working tree: Working tree format 3
1023
 
        branch: %s
 
1061
        branch: Branch format 5
1024
1062
    repository: %s
1025
1063
 
1026
1064
In the working tree:
1036
1074
Branch history:
1037
1075
         0 revisions
1038
1076
 
1039
 
Repository:
1040
 
         0 revisions
1041
 
""" % (format.get_branch_format().get_format_description(),
1042
 
       format.repository_format.get_format_description(),
1043
 
       ), out)
1044
 
        self.assertEqual('', err)
1045
 
 
1046
 
    def test_info_repository_hook(self):
1047
 
        format = bzrdir.format_registry.make_bzrdir('knit')
1048
 
        def repo_info(repo, stats, outf):
1049
 
            outf.write("more info\n")
1050
 
        info.hooks.install_named_hook('repository', repo_info, None)
1051
 
        # Create shared repository with working trees
1052
 
        repo = self.make_repository('repo', shared=True, format=format)
1053
 
        out, err = self.run_bzr('info -v repo')
1054
 
        self.assertEqualDiff(
1055
 
"""Shared repository with trees (format: dirstate or dirstate-tags or knit)
1056
 
Location:
1057
 
  shared repository: repo
1058
 
 
1059
 
Format:
1060
 
       control: Meta directory format 1
1061
 
    repository: %s
1062
 
 
1063
 
Create working tree for new branches inside the repository.
1064
 
 
1065
 
Repository:
1066
 
         0 revisions
1067
 
more info
1068
 
""" % (format.repository_format.get_format_description(),
1069
 
       ), out)
1070
 
        self.assertEqual('', err)
1071
 
 
1072
 
    def assertCheckoutStatusOutput(self,
 
1077
Revision store:
 
1078
         0 revisions
 
1079
         0 KiB
 
1080
""" % (repo.bzrdir.root_transport.base,
 
1081
       repo._format.get_format_description(),
 
1082
       ), out)
 
1083
        self.assertEqual('', err)
 
1084
 
 
1085
        bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
 
1086
 
 
1087
    def assertCheckoutStatusOutput(self, 
1073
1088
        command_string, lco_tree, shared_repo=None,
1074
1089
        repo_branch=None,
1075
1090
        tree_locked=False,
1076
1091
        branch_locked=False, repo_locked=False,
1077
1092
        verbose=False,
1078
 
        light_checkout=True,
1079
 
        checkout_root=None):
1080
 
        """Check the output of info in a checkout.
 
1093
        light_checkout=True):
 
1094
        """Check the output of info in a light checkout tree.
1081
1095
 
1082
1096
        This is not quite a mirror of the info code: rather than using the
1083
1097
        tree being examined to predict output, it uses a bunch of flags which
1084
1098
        allow us, the test writers, to document what *should* be present in
1085
1099
        the output. Removing this separation would remove the value of the
1086
1100
        tests.
1087
 
 
 
1101
        
1088
1102
        :param path: the path to the light checkout.
1089
1103
        :param lco_tree: the tree object for the light checkout.
1090
1104
        :param shared_repo: A shared repository is in use, expect that in
1094
1108
        :param tree_locked: If true, expect the tree to be locked.
1095
1109
        :param branch_locked: If true, expect the branch to be locked.
1096
1110
        :param repo_locked: If true, expect the repository to be locked.
1097
 
            Note that the lco_tree.branch.repository is inspected, and if is not
1098
 
            actually locked then this parameter is overridden. This is because
1099
 
            pack repositories do not have any public API for obtaining an
1100
 
            exclusive repository wide lock.
1101
 
        :param verbose: verbosity level: 2 or higher to show committers
 
1111
        :param verbose: If true, expect verbose output
1102
1112
        """
1103
 
        def friendly_location(url):
1104
 
            path = urlutils.unescape_for_display(url, 'ascii')
1105
 
            try:
1106
 
                return osutils.relpath(osutils.getcwd(), path)
1107
 
            except errors.PathNotChild:
1108
 
                return path
1109
 
 
1110
 
        if tree_locked:
1111
 
            # We expect this to fail because of locking errors.
1112
 
            # (A write-locked file cannot be read-locked
1113
 
            # in the different process -- either on win32 or on linux).
1114
 
            # This should be removed when the locking errors are fixed.
1115
 
            self.expectFailure('OS locks are exclusive '
1116
 
                'for different processes (Bug #174055)',
1117
 
                self.run_bzr_subprocess,
1118
 
                'info ' + command_string)
1119
 
        out, err = self.run_bzr('info %s' % command_string)
1120
 
        description = {
1121
 
            (True, True): 'Lightweight checkout',
1122
 
            (True, False): 'Repository checkout',
1123
 
            (False, True): 'Lightweight checkout',
1124
 
            (False, False): 'Checkout',
1125
 
            }[(shared_repo is not None, light_checkout)]
1126
 
        format = {True: self._repo_strings,
1127
 
                  False: 'unnamed'}[light_checkout]
1128
 
        if repo_locked:
1129
 
            repo_locked = lco_tree.branch.repository.get_physical_lock_status()
 
1113
        out, err = self.runbzr('info %s' % command_string)
1130
1114
        if repo_locked or branch_locked or tree_locked:
1131
1115
            def locked_message(a_bool):
1132
1116
                if a_bool:
1144
1128
                    locked_message(repo_locked)))
1145
1129
        else:
1146
1130
            expected_lock_output = ''
1147
 
        tree_data = ''
1148
 
        extra_space = ''
1149
1131
        if light_checkout:
1150
 
            tree_data = ("  light checkout root: %s\n" %
1151
 
                friendly_location(lco_tree.bzrdir.root_transport.base))
1152
 
            extra_space = ' '
1153
 
        if lco_tree.branch.get_bound_location() is not None:
1154
 
            tree_data += ("%s       checkout root: %s\n" % (extra_space,
1155
 
                friendly_location(lco_tree.branch.bzrdir.root_transport.base)))
 
1132
            tree_data = (" light checkout root: %s" %
 
1133
                lco_tree.bzrdir.root_transport.base)
 
1134
        else:
 
1135
            tree_data = ("       checkout root: %s" %
 
1136
                lco_tree.bzrdir.root_transport.base)
1156
1137
        if shared_repo is not None:
1157
1138
            branch_data = (
1158
 
                "   checkout of branch: %s\n"
1159
 
                "    shared repository: %s\n" %
1160
 
                (friendly_location(repo_branch.bzrdir.root_transport.base),
1161
 
                 friendly_location(shared_repo.bzrdir.root_transport.base)))
 
1139
                "   shared repository: %s\n"
 
1140
                "   repository branch: branch\n" %
 
1141
                shared_repo.bzrdir.root_transport.base)
1162
1142
        elif repo_branch is not None:
1163
1143
            branch_data = (
1164
 
                "%s  checkout of branch: %s\n" %
1165
 
                (extra_space,
1166
 
                 friendly_location(repo_branch.bzrdir.root_transport.base)))
 
1144
                "  checkout of branch: %s\n" % 
 
1145
                repo_branch.bzrdir.root_transport.base)
1167
1146
        else:
1168
 
            branch_data = ("   checkout of branch: %s\n" %
 
1147
            branch_data = ("  checkout of branch: %s\n" % 
1169
1148
                lco_tree.branch.bzrdir.root_transport.base)
1170
 
 
1171
 
        if verbose >= 2:
 
1149
        
 
1150
        if verbose:
1172
1151
            verbose_info = '         0 committers\n'
1173
1152
        else:
1174
1153
            verbose_info = ''
1175
 
 
 
1154
            
1176
1155
        self.assertEqualDiff(
1177
 
"""%s (format: %s)
1178
 
Location:
1179
 
%s%s
 
1156
"""Location:
 
1157
%s
 
1158
%s
1180
1159
Format:
1181
1160
       control: Meta directory format 1
1182
1161
  working tree: %s
1183
 
        branch: %s
 
1162
        branch: Branch format 5
1184
1163
    repository: %s
1185
1164
%s
1186
1165
In the working tree:
1196
1175
Branch history:
1197
1176
         0 revisions
1198
1177
%s
1199
 
Repository:
 
1178
Revision store:
1200
1179
         0 revisions
1201
 
""" %  (description,
1202
 
        format,
1203
 
        tree_data,
 
1180
         0 KiB
 
1181
""" %  (tree_data,
1204
1182
        branch_data,
1205
1183
        lco_tree._format.get_format_description(),
1206
 
        lco_tree.branch._format.get_format_description(),
1207
1184
        lco_tree.branch.repository._format.get_format_description(),
1208
1185
        expected_lock_output,
1209
1186
        verbose_info,
1214
1191
        transport = self.get_transport()
1215
1192
        # Create shared repository with a branch
1216
1193
        repo = self.make_repository('repo', shared=True,
1217
 
                                    format=bzrdir.BzrDirMetaFormat1())
 
1194
                                    format=bzrlib.bzrdir.BzrDirMetaFormat1())
1218
1195
        repo.set_make_working_trees(False)
1219
1196
        repo.bzrdir.root_transport.mkdir('branch')
1220
1197
        repo_branch = repo.bzrdir.create_branch_convenience('repo/branch',
1221
 
                                    format=bzrdir.BzrDirMetaFormat1())
 
1198
                                    format=bzrlib.bzrdir.BzrDirMetaFormat1())
1222
1199
        # Do a heavy checkout
1223
1200
        transport.mkdir('tree')
1224
1201
        transport.mkdir('tree/checkout')
1225
 
        co_branch = bzrdir.BzrDir.create_branch_convenience('tree/checkout',
1226
 
            format=bzrdir.BzrDirMetaFormat1())
 
1202
        co_branch = bzrlib.bzrdir.BzrDir.create_branch_convenience('tree/checkout',
 
1203
                                    format=bzrlib.bzrdir.BzrDirMetaFormat1())
1227
1204
        co_branch.bind(repo_branch)
1228
1205
        # Do a light checkout of the heavy one
1229
1206
        transport.mkdir('tree/lightcheckout')
1230
 
        lco_dir = bzrdir.BzrDirMetaFormat1().initialize('tree/lightcheckout')
1231
 
        branch.BranchReferenceFormat().initialize(lco_dir,
1232
 
            target_branch=co_branch)
 
1207
        lco_dir = bzrlib.bzrdir.BzrDirMetaFormat1().initialize('tree/lightcheckout')
 
1208
        bzrlib.branch.BranchReferenceFormat().initialize(lco_dir, co_branch)
1233
1209
        lco_dir.create_workingtree()
1234
1210
        lco_tree = lco_dir.open_workingtree()
1235
1211
 
1237
1213
        # W B R
1238
1214
 
1239
1215
        # U U U
1240
 
        self.assertCheckoutStatusOutput('-v tree/lightcheckout', lco_tree,
1241
 
                                        repo_branch=repo_branch,
1242
 
                                        verbose=True, light_checkout=True)
 
1216
        self.assertCheckoutStatusOutput('tree/lightcheckout', lco_tree)
1243
1217
        # U U L
1244
1218
        lco_tree.branch.repository.lock_write()
1245
1219
        try:
1246
 
            self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1247
 
            lco_tree, repo_branch=repo_branch,
1248
 
            repo_locked=True, verbose=True, light_checkout=True)
 
1220
            self.assertCheckoutStatusOutput('tree/lightcheckout',
 
1221
            lco_tree,
 
1222
            repo_locked=True)
1249
1223
        finally:
1250
1224
            lco_tree.branch.repository.unlock()
1251
1225
        # U L L
1252
1226
        lco_tree.branch.lock_write()
1253
1227
        try:
1254
 
            self.assertCheckoutStatusOutput('-v tree/lightcheckout',
 
1228
            self.assertCheckoutStatusOutput('tree/lightcheckout',
1255
1229
            lco_tree,
1256
1230
            branch_locked=True,
1257
 
            repo_locked=True,
1258
 
            repo_branch=repo_branch,
1259
 
            verbose=True)
 
1231
            repo_locked=True)
1260
1232
        finally:
1261
1233
            lco_tree.branch.unlock()
1262
1234
        # L L L
1263
1235
        lco_tree.lock_write()
1264
1236
        try:
1265
 
            self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1266
 
            lco_tree, repo_branch=repo_branch,
 
1237
            self.assertCheckoutStatusOutput('tree/lightcheckout',
 
1238
            lco_tree,
1267
1239
            tree_locked=True,
1268
1240
            branch_locked=True,
1269
 
            repo_locked=True,
1270
 
            verbose=True)
 
1241
            repo_locked=True)
1271
1242
        finally:
1272
1243
            lco_tree.unlock()
1273
1244
        # L L U
1274
1245
        lco_tree.lock_write()
1275
1246
        lco_tree.branch.repository.unlock()
1276
1247
        try:
1277
 
            self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1278
 
            lco_tree, repo_branch=repo_branch,
 
1248
            self.assertCheckoutStatusOutput('tree/lightcheckout',
 
1249
            lco_tree,
1279
1250
            tree_locked=True,
1280
 
            branch_locked=True,
1281
 
            verbose=True)
 
1251
            branch_locked=True)
1282
1252
        finally:
1283
1253
            lco_tree.branch.repository.lock_write()
1284
1254
            lco_tree.unlock()
1286
1256
        lco_tree.lock_write()
1287
1257
        lco_tree.branch.unlock()
1288
1258
        try:
1289
 
            self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1290
 
            lco_tree, repo_branch=repo_branch,
1291
 
            tree_locked=True,
1292
 
            verbose=True)
 
1259
            self.assertCheckoutStatusOutput('tree/lightcheckout',
 
1260
            lco_tree,
 
1261
            tree_locked=True)
1293
1262
        finally:
1294
1263
            lco_tree.branch.lock_write()
1295
1264
            lco_tree.unlock()
1298
1267
        lco_tree.branch.unlock()
1299
1268
        lco_tree.branch.repository.lock_write()
1300
1269
        try:
1301
 
            self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1302
 
            lco_tree, repo_branch=repo_branch,
 
1270
            self.assertCheckoutStatusOutput('tree/lightcheckout',
 
1271
            lco_tree,
1303
1272
            tree_locked=True,
1304
 
            repo_locked=True,
1305
 
            verbose=True)
 
1273
            repo_locked=True)
1306
1274
        finally:
1307
1275
            lco_tree.branch.repository.unlock()
1308
1276
            lco_tree.branch.lock_write()
1311
1279
        lco_tree.branch.lock_write()
1312
1280
        lco_tree.branch.repository.unlock()
1313
1281
        try:
1314
 
            self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1315
 
            lco_tree, repo_branch=repo_branch,
1316
 
            branch_locked=True,
1317
 
            verbose=True)
 
1282
            self.assertCheckoutStatusOutput('tree/lightcheckout',
 
1283
            lco_tree,
 
1284
            branch_locked=True)
1318
1285
        finally:
1319
1286
            lco_tree.branch.repository.lock_write()
1320
1287
            lco_tree.branch.unlock()
1321
1288
 
1322
 
        if sys.platform == 'win32':
1323
 
            self.knownFailure('Win32 cannot run "bzr info"'
1324
 
                              ' when the tree is locked.')
1325
 
 
1326
1289
    def test_info_locking_oslocks(self):
1327
1290
        if sys.platform == "win32":
1328
 
            self.skip("don't use oslocks on win32 in unix manner")
1329
 
        # This test tests old (all-in-one, OS lock using) behaviour which
1330
 
        # simply cannot work on windows (and is indeed why we changed our
1331
 
        # design. As such, don't try to remove the thisFailsStrictLockCheck
1332
 
        # call here.
1333
 
        self.thisFailsStrictLockCheck()
 
1291
            raise TestSkipped("don't use oslocks on win32 in unix manner")
1334
1292
 
1335
1293
        tree = self.make_branch_and_tree('branch',
1336
 
                                         format=bzrdir.BzrDirFormat6())
 
1294
                                         format=bzrlib.bzrdir.BzrDirFormat6())
1337
1295
 
1338
1296
        # Test all permutations of locking the working tree, branch and repository
1339
1297
        # XXX: Well not yet, as we can't query oslocks yet. Currently, it's
1342
1300
        # W B R
1343
1301
 
1344
1302
        # U U U
1345
 
        out, err = self.run_bzr('info -v branch')
 
1303
        out, err = self.runbzr('info branch')
1346
1304
        self.assertEqualDiff(
1347
 
"""Standalone tree (format: weave)
1348
 
Location:
 
1305
"""Location:
1349
1306
  branch root: %s
1350
1307
 
1351
1308
Format:
1367
1324
Branch history:
1368
1325
         0 revisions
1369
1326
 
1370
 
Repository:
 
1327
Revision store:
1371
1328
         0 revisions
1372
 
""" % ('branch', tree.branch.repository._format.get_format_description(),
 
1329
         0 KiB
 
1330
""" % (tree.bzrdir.root_transport.base,
 
1331
       tree.branch.repository._format.get_format_description(),
1373
1332
       ), out)
1374
1333
        self.assertEqual('', err)
1375
1334
        # L L L
1376
1335
        tree.lock_write()
1377
 
        out, err = self.run_bzr('info -v branch')
 
1336
        out, err = self.runbzr('info branch')
1378
1337
        self.assertEqualDiff(
1379
 
"""Standalone tree (format: weave)
1380
 
Location:
 
1338
"""Location:
1381
1339
  branch root: %s
1382
1340
 
1383
1341
Format:
1399
1357
Branch history:
1400
1358
         0 revisions
1401
1359
 
1402
 
Repository:
 
1360
Revision store:
1403
1361
         0 revisions
1404
 
""" % ('branch', tree.branch.repository._format.get_format_description(),
 
1362
         0 KiB
 
1363
""" % (tree.bzrdir.root_transport.base,
 
1364
       tree.branch.repository._format.get_format_description(),
1405
1365
       ), out)
1406
1366
        self.assertEqual('', err)
1407
1367
        tree.unlock()
1408
 
 
1409
 
    def test_info_stacked(self):
1410
 
        # We have a mainline
1411
 
        trunk_tree = self.make_branch_and_tree('mainline',
1412
 
            format='1.6')
1413
 
        trunk_tree.commit('mainline')
1414
 
        # and a branch from it which is stacked
1415
 
        new_dir = trunk_tree.bzrdir.sprout('newbranch', stacked=True)
1416
 
        out, err = self.run_bzr('info newbranch')
1417
 
        self.assertEqual(
1418
 
"""Standalone tree (format: 1.6)
1419
 
Location:
1420
 
  branch root: newbranch
1421
 
 
1422
 
Related branches:
1423
 
  parent branch: mainline
1424
 
     stacked on: mainline
1425
 
""", out)
1426
 
        self.assertEqual("", err)