~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

IntroduceĀ dirstate-tagsĀ format

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
 
1
# Copyright (C) 2006, 2007 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
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
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
 
18
18
"""Tests for the info command of bzr."""
19
19
 
20
20
import sys
21
21
 
 
22
import bzrlib
22
23
from bzrlib import (
23
 
    branch,
24
24
    bzrdir,
25
 
    errors,
26
 
    info,
27
 
    osutils,
28
 
    tests,
29
 
    upgrade,
30
 
    urlutils,
 
25
    repository,
31
26
    )
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"
 
27
from bzrlib.osutils import format_date
 
28
from bzrlib.tests import TestSkipped
 
29
from bzrlib.tests.blackbox import ExternalBase
 
30
 
 
31
 
 
32
class TestInfo(ExternalBase):
40
33
 
41
34
    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)
 
35
        if sys.platform == "win32":
 
36
            location = "C:/i/do/not/exist/"
 
37
        else:
 
38
            location = "/i/do/not/exist/"
 
39
        out, err = self.runbzr('info '+location, retcode=3)
45
40
        self.assertEqual(out, '')
46
 
        self.assertEqual(err, 'bzr: ERROR: Not a branch: "%s".\n' % location)
 
41
        self.assertEqual(err, 'bzr: ERROR: Not a branch: %s\n' % location)
47
42
 
48
43
    def test_info_standalone(self):
49
44
        transport = self.get_transport()
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
 
186
134
        # (creates backup as unknown)
187
135
        branch1.bzrdir.sprout('bound')
188
136
        knit1_format = bzrdir.format_registry.make_bzrdir('knit')
189
 
        upgrade.upgrade('bound', knit1_format)
190
 
        branch3 = bzrdir.BzrDir.open('bound').open_branch()
 
137
        bzrlib.upgrade.upgrade('bound', knit1_format)
 
138
        branch3 = bzrlib.bzrdir.BzrDir.open('bound').open_branch()
191
139
        branch3.bind(branch1)
192
140
        bound_tree = branch3.bzrdir.open_workingtree()
193
 
        out, err = self.run_bzr('info -v bound')
 
141
        out, err = self.runbzr('info bound')
194
142
        self.assertEqualDiff(
195
 
"""Checkout (format: knit)
196
 
Location:
197
 
       checkout root: bound
198
 
  checkout of branch: standalone
 
143
"""Location:
 
144
       checkout root: %s
 
145
  checkout of branch: %s
199
146
 
200
147
Related branches:
201
 
  parent branch: standalone
 
148
  parent branch: %s
202
149
 
203
150
Format:
204
151
       control: Meta directory format 1
212
159
         0 added
213
160
         0 removed
214
161
         0 renamed
215
 
         0 unknown
216
 
         1 ignored
 
162
         1 unknown
 
163
         0 ignored
217
164
         0 versioned subdirectories
218
165
 
219
166
Branch history:
222
169
   first revision: %s
223
170
  latest revision: %s
224
171
 
225
 
Repository:
 
172
Revision store:
226
173
         1 revision
227
 
""" % (bound_tree._format.get_format_description(),
 
174
         %d KiB
 
175
""" % (branch3.bzrdir.root_transport.base,
 
176
       branch1.bzrdir.root_transport.base,
 
177
       branch1.bzrdir.root_transport.base,
 
178
       bound_tree._format.get_format_description(),      
228
179
       branch3._format.get_format_description(),
229
180
       branch3.repository._format.get_format_description(),
230
181
       datestring_first, datestring_first,
 
182
       # poking at _revision_store isn't all that clean, but neither is
 
183
       # having the ui test dependent on the exact overhead of a given store.
 
184
       branch3.repository._revision_store.total_size(
 
185
        branch3.repository.get_transaction())[1] / 1024,
231
186
       ), out)
232
187
        self.assertEqual('', err)
233
188
 
234
189
        # Checkout standalone (same as above, but does not have parent set)
235
 
        branch4 = bzrdir.BzrDir.create_branch_convenience('checkout',
 
190
        branch4 = bzrlib.bzrdir.BzrDir.create_branch_convenience('checkout',
236
191
            format=knit1_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
238
        tree5 = branch1.create_checkout('lightcheckout', lightweight=True)
277
239
        branch5 = tree5.branch
278
 
        out, err = self.run_bzr('info -v lightcheckout')
 
240
        out, err = self.runbzr('info lightcheckout')
279
241
        self.assertEqualDiff(
280
 
"""Lightweight checkout (format: %s)
281
 
Location:
282
 
  light checkout root: lightcheckout
283
 
   checkout of branch: standalone
 
242
"""Location:
 
243
 light checkout root: %s
 
244
  checkout of branch: %s
284
245
 
285
246
Format:
286
247
       control: Meta directory format 1
287
 
  working tree: Working tree format 6
 
248
  working tree: Working tree format 4
288
249
        branch: Branch format 4
289
250
    repository: Weave repository format 6
290
251
 
304
265
   first revision: %s
305
266
  latest revision: %s
306
267
 
307
 
Repository:
 
268
Revision store:
308
269
         1 revision
309
 
""" % (self._repo_strings, datestring_first, datestring_first,), out)
 
270
         0 KiB
 
271
""" % (tree5.bzrdir.root_transport.base,
 
272
       branch1.bzrdir.root_transport.base,
 
273
       datestring_first, datestring_first,
 
274
       ), out)
310
275
        self.assertEqual('', err)
311
276
 
312
277
        # Update initial standalone branch
314
279
        tree1.add('b')
315
280
        tree1.commit('commit two')
316
281
        rev = branch1.repository.get_revision(branch1.revision_history()[-1])
317
 
        datestring_last = osutils.format_date(rev.timestamp, rev.timezone)
 
282
        datestring_last = format_date(rev.timestamp, rev.timezone)
318
283
 
319
284
        # Out of date branched standalone branch will not be detected
320
 
        out, err = self.run_bzr('info -v branch')
 
285
        out, err = self.runbzr('info branch')
321
286
        self.assertEqualDiff(
322
 
"""Standalone tree (format: weave)
323
 
Location:
324
 
  branch root: branch
 
287
"""Location:
 
288
  branch root: %s
325
289
 
326
290
Related branches:
327
 
    push branch: standalone
328
 
  parent branch: standalone
 
291
      parent branch: %s
 
292
  publish to branch: %s
329
293
 
330
294
Format:
331
295
       control: All-in-one format 6
349
313
   first revision: %s
350
314
  latest revision: %s
351
315
 
352
 
Repository:
 
316
Revision store:
353
317
         1 revision
354
 
""" % (datestring_first, datestring_first,
 
318
         0 KiB
 
319
""" % (branch2.bzrdir.root_transport.base,
 
320
       branch1.bzrdir.root_transport.base,
 
321
       branch1.bzrdir.root_transport.base,
 
322
       datestring_first, datestring_first,
355
323
       ), out)
356
324
        self.assertEqual('', err)
357
325
 
358
326
        # Out of date bound branch
359
 
        out, err = self.run_bzr('info -v bound')
 
327
        out, err = self.runbzr('info bound')
360
328
        self.assertEqualDiff(
361
 
"""Checkout (format: knit)
362
 
Location:
363
 
       checkout root: bound
364
 
  checkout of branch: standalone
 
329
"""Location:
 
330
       checkout root: %s
 
331
  checkout of branch: %s
365
332
 
366
333
Related branches:
367
 
  parent branch: standalone
 
334
  parent branch: %s
368
335
 
369
336
Format:
370
337
       control: Meta directory format 1
380
347
         0 added
381
348
         0 removed
382
349
         0 renamed
383
 
         0 unknown
384
 
         1 ignored
 
350
         1 unknown
 
351
         0 ignored
385
352
         0 versioned subdirectories
386
353
 
387
354
Branch history:
390
357
   first revision: %s
391
358
  latest revision: %s
392
359
 
393
 
Repository:
 
360
Revision store:
394
361
         1 revision
395
 
""" % (branch3.repository._format.get_format_description(),
 
362
         %d KiB
 
363
""" % (branch3.bzrdir.root_transport.base,
 
364
       branch1.bzrdir.root_transport.base,
 
365
       branch1.bzrdir.root_transport.base,
 
366
       branch3.repository._format.get_format_description(),
396
367
       datestring_first, datestring_first,
 
368
       # poking at _revision_store isn't all that clean, but neither is
 
369
       # having the ui test dependent on the exact overhead of a given store.
 
370
       branch3.repository._revision_store.total_size(
 
371
        branch3.repository.get_transaction())[1] / 1024,
397
372
       ), out)
398
373
        self.assertEqual('', err)
399
374
 
400
375
        # Out of date checkout
401
 
        out, err = self.run_bzr('info -v checkout')
 
376
        out, err = self.runbzr('info checkout')
402
377
        self.assertEqualDiff(
403
 
"""Checkout (format: knit)
404
 
Location:
405
 
       checkout root: checkout
406
 
  checkout of branch: standalone
 
378
"""Location:
 
379
       checkout root: %s
 
380
  checkout of branch: %s
407
381
 
408
382
Format:
409
383
       control: Meta directory format 1
429
403
   first revision: %s
430
404
  latest revision: %s
431
405
 
432
 
Repository:
 
406
Revision store:
433
407
         1 revision
434
 
""" % (branch4.repository._format.get_format_description(),
 
408
         %d KiB
 
409
""" % (branch4.bzrdir.root_transport.base,
 
410
       branch1.bzrdir.root_transport.base,
 
411
       branch4.repository._format.get_format_description(),
435
412
       datestring_first, datestring_first,
 
413
       # poking at _revision_store isn't all that clean, but neither is
 
414
       # having the ui test dependent on the exact overhead of a given store.
 
415
       branch4.repository._revision_store.total_size(
 
416
        branch4.repository.get_transaction())[1] / 1024,
436
417
       ), out)
437
418
        self.assertEqual('', err)
438
419
 
439
420
        # Out of date lightweight checkout
440
 
        out, err = self.run_bzr('info lightcheckout --verbose')
 
421
        out, err = self.runbzr('info lightcheckout --verbose')
441
422
        self.assertEqualDiff(
442
 
"""Lightweight checkout (format: %s)
443
 
Location:
444
 
  light checkout root: lightcheckout
445
 
   checkout of branch: standalone
 
423
"""Location:
 
424
 light checkout root: %s
 
425
  checkout of branch: %s
446
426
 
447
427
Format:
448
428
       control: Meta directory format 1
449
 
  working tree: Working tree format 6
 
429
  working tree: Working tree format 4
450
430
        branch: Branch format 4
451
431
    repository: Weave repository format 6
452
432
 
464
444
 
465
445
Branch history:
466
446
         2 revisions
 
447
         1 committer
467
448
         0 days old
468
449
   first revision: %s
469
450
  latest revision: %s
470
451
 
471
 
Repository:
 
452
Revision store:
472
453
         2 revisions
473
 
""" % (self._repo_strings, datestring_first, datestring_last,), out)
 
454
         0 KiB
 
455
""" % (tree5.bzrdir.root_transport.base,
 
456
       branch1.bzrdir.root_transport.base,
 
457
       datestring_first, datestring_last,
 
458
       ), out)
474
459
        self.assertEqual('', err)
475
460
 
476
461
    def test_info_standalone_no_tree(self):
478
463
        format = bzrdir.format_registry.make_bzrdir('default')
479
464
        branch = self.make_branch('branch')
480
465
        repo = branch.repository
481
 
        out, err = self.run_bzr('info branch -v')
 
466
        out, err = self.runbzr('info branch')
482
467
        self.assertEqualDiff(
483
 
"""Standalone branch (format: %s)
484
 
Location:
485
 
  branch root: branch
 
468
"""Location:
 
469
  branch root: %s
486
470
 
487
471
Format:
488
472
       control: Meta directory format 1
492
476
Branch history:
493
477
         0 revisions
494
478
 
495
 
Repository:
 
479
Revision store:
496
480
         0 revisions
497
 
""" % (info.describe_format(repo.bzrdir, repo, branch, None),
 
481
         0 KiB
 
482
""" % (branch.bzrdir.root_transport.base,
498
483
       format.get_branch_format().get_format_description(),
499
484
       format.repository_format.get_format_description(),
500
485
       ), out)
507
492
        # Create shared repository
508
493
        repo = self.make_repository('repo', shared=True, format=format)
509
494
        repo.set_make_working_trees(False)
510
 
        out, err = self.run_bzr('info -v repo')
 
495
        out, err = self.runbzr('info repo')
511
496
        self.assertEqualDiff(
512
 
"""Shared repository (format: dirstate or dirstate-tags or knit)
513
 
Location:
 
497
"""Location:
514
498
  shared repository: %s
515
499
 
516
500
Format:
517
501
       control: Meta directory format 1
518
502
    repository: %s
519
503
 
520
 
Repository:
 
504
Revision store:
521
505
         0 revisions
522
 
""" % ('repo', format.repository_format.get_format_description(),
 
506
         0 KiB
 
507
""" % (repo.bzrdir.root_transport.base,
 
508
       format.repository_format.get_format_description(),
523
509
       ), out)
524
510
        self.assertEqual('', err)
525
511
 
527
513
        repo.bzrdir.root_transport.mkdir('branch')
528
514
        branch1 = repo.bzrdir.create_branch_convenience('repo/branch',
529
515
            format=format)
530
 
        out, err = self.run_bzr('info -v repo/branch')
 
516
        out, err = self.runbzr('info repo/branch')
531
517
        self.assertEqualDiff(
532
 
"""Repository branch (format: dirstate or knit)
533
 
Location:
534
 
  shared repository: repo
535
 
  repository branch: repo/branch
 
518
"""Location:
 
519
  shared repository: %s
 
520
  repository branch: branch
536
521
 
537
522
Format:
538
523
       control: Meta directory format 1
542
527
Branch history:
543
528
         0 revisions
544
529
 
545
 
Repository:
 
530
Revision store:
546
531
         0 revisions
547
 
""" % (format.get_branch_format().get_format_description(),
 
532
         0 KiB
 
533
""" % (repo.bzrdir.root_transport.base,
 
534
       format.get_branch_format().get_format_description(),
548
535
       format.repository_format.get_format_description(),
549
536
       ), out)
550
537
        self.assertEqual('', err)
552
539
        # Create lightweight checkout
553
540
        transport.mkdir('tree')
554
541
        transport.mkdir('tree/lightcheckout')
555
 
        tree2 = branch1.create_checkout('tree/lightcheckout',
 
542
        tree2 = branch1.create_checkout('tree/lightcheckout', 
556
543
            lightweight=True)
557
544
        branch2 = tree2.branch
558
 
        self.assertCheckoutStatusOutput('-v tree/lightcheckout', tree2,
559
 
                   shared_repo=repo, repo_branch=branch1, verbose=True)
 
545
        self.assertCheckoutStatusOutput('tree/lightcheckout', tree2, 
 
546
                   shared_repo=repo)
560
547
 
561
548
        # Create normal checkout
562
549
        tree3 = branch1.create_checkout('tree/checkout')
568
555
        tree2.add('a')
569
556
        tree2.commit('commit one')
570
557
        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')
 
558
        datestring_first = format_date(rev.timestamp, rev.timezone)
 
559
        out, err = self.runbzr('info tree/lightcheckout --verbose')
573
560
        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
 
561
"""Location:
 
562
 light checkout root: %s
 
563
   shared repository: %s
 
564
   repository branch: branch
579
565
 
580
566
Format:
581
567
       control: Meta directory format 1
582
 
  working tree: Working tree format 6
 
568
  working tree: Working tree format 4
583
569
        branch: %s
584
570
    repository: %s
585
571
 
595
581
 
596
582
Branch history:
597
583
         1 revision
 
584
         1 committer
598
585
         0 days old
599
586
   first revision: %s
600
587
  latest revision: %s
601
588
 
602
 
Repository:
 
589
Revision store:
603
590
         1 revision
604
 
""" % (self._repo_strings, format.get_branch_format().get_format_description(),
 
591
         %d KiB
 
592
""" % (tree2.bzrdir.root_transport.base,
 
593
       repo.bzrdir.root_transport.base,
 
594
       format.get_branch_format().get_format_description(),
605
595
       format.repository_format.get_format_description(),
606
596
       datestring_first, datestring_first,
 
597
       # poking at _revision_store isn't all that clean, but neither is
 
598
       # having the ui test dependent on the exact overhead of a given store.
 
599
       repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
607
600
       ), out)
608
601
        self.assertEqual('', err)
609
602
 
610
603
        # Out of date checkout
611
 
        out, err = self.run_bzr('info -v tree/checkout')
 
604
        out, err = self.runbzr('info tree/checkout')
612
605
        self.assertEqualDiff(
613
 
"""Checkout (format: unnamed)
614
 
Location:
615
 
       checkout root: tree/checkout
616
 
  checkout of branch: repo/branch
 
606
"""Location:
 
607
       checkout root: %s
 
608
  checkout of branch: %s
617
609
 
618
610
Format:
619
611
       control: Meta directory format 1
620
 
  working tree: Working tree format 6
 
612
  working tree: Working tree format 4
621
613
        branch: %s
622
614
    repository: %s
623
615
 
636
628
Branch history:
637
629
         0 revisions
638
630
 
639
 
Repository:
 
631
Revision store:
640
632
         0 revisions
641
 
""" % (format.get_branch_format().get_format_description(),
 
633
         0 KiB
 
634
""" % (tree3.bzrdir.root_transport.base,
 
635
       branch1.bzrdir.root_transport.base,
 
636
       format.get_branch_format().get_format_description(),
642
637
       format.repository_format.get_format_description(),
643
638
       ), out)
644
639
        self.assertEqual('', err)
647
642
        tree3.update()
648
643
        self.build_tree(['tree/checkout/b'])
649
644
        tree3.add('b')
650
 
        out, err = self.run_bzr('info tree/checkout --verbose')
 
645
        out, err = self.runbzr('info tree/checkout --verbose')
651
646
        self.assertEqualDiff(
652
 
"""Checkout (format: unnamed)
653
 
Location:
654
 
       checkout root: tree/checkout
655
 
  checkout of branch: repo/branch
 
647
"""Location:
 
648
       checkout root: %s
 
649
  checkout of branch: %s
656
650
 
657
651
Format:
658
652
       control: Meta directory format 1
659
 
  working tree: Working tree format 6
 
653
  working tree: Working tree format 4
660
654
        branch: %s
661
655
    repository: %s
662
656
 
672
666
 
673
667
Branch history:
674
668
         1 revision
 
669
         1 committer
675
670
         0 days old
676
671
   first revision: %s
677
672
  latest revision: %s
678
673
 
679
 
Repository:
 
674
Revision store:
680
675
         1 revision
681
 
""" % (format.get_branch_format().get_format_description(),
 
676
         %d KiB
 
677
""" % (tree3.bzrdir.root_transport.base, branch1.bzrdir.root_transport.base,
 
678
       format.get_branch_format().get_format_description(),
682
679
       format.repository_format.get_format_description(),
683
680
       datestring_first, datestring_first,
 
681
       # poking at _revision_store isn't all that clean, but neither is
 
682
       # having the ui test dependent on the exact overhead of a given store.
 
683
       repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
684
684
       ), out)
685
685
        self.assertEqual('', err)
686
686
        tree3.commit('commit two')
687
687
 
688
688
        # Out of date lightweight checkout
689
689
        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')
 
690
        datestring_last = format_date(rev.timestamp, rev.timezone)
 
691
        out, err = self.runbzr('info tree/lightcheckout --verbose')
692
692
        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
 
693
"""Location:
 
694
 light checkout root: %s
 
695
   shared repository: %s
 
696
   repository branch: branch
698
697
 
699
698
Format:
700
699
       control: Meta directory format 1
701
 
  working tree: Working tree format 6
 
700
  working tree: Working tree format 4
702
701
        branch: %s
703
702
    repository: %s
704
703
 
716
715
 
717
716
Branch history:
718
717
         2 revisions
 
718
         1 committer
719
719
         0 days old
720
720
   first revision: %s
721
721
  latest revision: %s
722
722
 
723
 
Repository:
 
723
Revision store:
724
724
         2 revisions
725
 
""" % (self._repo_strings, format.get_branch_format().get_format_description(),
 
725
         %d KiB
 
726
""" % (tree2.bzrdir.root_transport.base,
 
727
       repo.bzrdir.root_transport.base,
 
728
       format.get_branch_format().get_format_description(),
726
729
       format.repository_format.get_format_description(),
727
730
       datestring_first, datestring_last,
 
731
       # poking at _revision_store isn't all that clean, but neither is
 
732
       # having the ui test dependent on the exact overhead of a given store.
 
733
       repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
728
734
       ), out)
729
735
        self.assertEqual('', err)
730
736
 
731
737
        # Show info about shared branch
732
 
        out, err = self.run_bzr('info repo/branch --verbose')
 
738
        out, err = self.runbzr('info repo/branch --verbose')
733
739
        self.assertEqualDiff(
734
 
"""Repository branch (format: dirstate or knit)
735
 
Location:
736
 
  shared repository: repo
737
 
  repository branch: repo/branch
 
740
"""Location:
 
741
  shared repository: %s
 
742
  repository branch: branch
738
743
 
739
744
Format:
740
745
       control: Meta directory format 1
743
748
 
744
749
Branch history:
745
750
         2 revisions
 
751
         1 committer
746
752
         0 days old
747
753
   first revision: %s
748
754
  latest revision: %s
749
755
 
750
 
Repository:
 
756
Revision store:
751
757
         2 revisions
752
 
""" % (format.get_branch_format().get_format_description(),
 
758
         %d KiB
 
759
""" % (repo.bzrdir.root_transport.base,
 
760
       format.get_branch_format().get_format_description(),
753
761
       format.repository_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
       format.repository_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
 
779
794
        # Create shared repository with working trees
780
795
        repo = self.make_repository('repo', shared=True, format=format)
781
796
        repo.set_make_working_trees(True)
782
 
        out, err = self.run_bzr('info -v repo')
 
797
        out, err = self.runbzr('info repo')
783
798
        self.assertEqualDiff(
784
 
"""Shared repository with trees (format: dirstate or dirstate-tags or knit)
785
 
Location:
786
 
  shared repository: repo
 
799
"""Location:
 
800
  shared repository: %s
787
801
 
788
802
Format:
789
803
       control: Meta directory format 1
791
805
 
792
806
Create working tree for new branches inside the repository.
793
807
 
794
 
Repository:
 
808
Revision store:
795
809
         0 revisions
796
 
""" % (format.repository_format.get_format_description(),
 
810
         0 KiB
 
811
""" % (repo.bzrdir.root_transport.base,
 
812
       format.repository_format.get_format_description(),
797
813
       ), out)
798
814
        self.assertEqual('', err)
799
815
 
804
820
        branch2 = branch1.bzrdir.sprout('repo/branch2').open_branch()
805
821
 
806
822
        # Empty first branch
807
 
        out, err = self.run_bzr('info repo/branch1 --verbose')
 
823
        out, err = self.runbzr('info repo/branch1 --verbose')
808
824
        self.assertEqualDiff(
809
 
"""Repository tree (format: knit)
810
 
Location:
811
 
  shared repository: repo
812
 
  repository branch: repo/branch1
 
825
"""Location:
 
826
    shared repository: %s
 
827
  repository checkout: branch1
813
828
 
814
829
Format:
815
830
       control: Meta directory format 1
829
844
 
830
845
Branch history:
831
846
         0 revisions
 
847
         0 committers
832
848
 
833
 
Repository:
 
849
Revision store:
834
850
         0 revisions
835
 
""" % (format.get_branch_format().get_format_description(),
 
851
         0 KiB
 
852
""" % (repo.bzrdir.root_transport.base,
 
853
       format.get_branch_format().get_format_description(),
836
854
       format.repository_format.get_format_description(),
837
855
       ), out)
838
856
        self.assertEqual('', err)
843
861
        tree1.add('a')
844
862
        tree1.commit('commit one')
845
863
        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')
 
864
        datestring_first = format_date(rev.timestamp, rev.timezone)
 
865
        out, err = self.runbzr('info repo/branch1')
848
866
        self.assertEqualDiff(
849
 
"""Repository tree (format: knit)
850
 
Location:
851
 
  shared repository: repo
852
 
  repository branch: repo/branch1
 
867
"""Location:
 
868
    shared repository: %s
 
869
  repository checkout: branch1
853
870
 
854
871
Format:
855
872
       control: Meta directory format 1
873
890
   first revision: %s
874
891
  latest revision: %s
875
892
 
876
 
Repository:
 
893
Revision store:
877
894
         1 revision
878
 
""" % (format.get_branch_format().get_format_description(),
 
895
         %d KiB
 
896
""" % (repo.bzrdir.root_transport.base,
 
897
       format.get_branch_format().get_format_description(),
879
898
       format.repository_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
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(),
 
938
         %d KiB
 
939
""" % (repo.bzrdir.root_transport.base,
 
940
       branch1.bzrdir.root_transport.base,
 
941
       format.get_branch_format().get_format_description(),
917
942
       format.repository_format.get_format_description(),
 
943
       # poking at _revision_store isn't all that clean, but neither is
 
944
       # having the ui test dependent on the exact overhead of a given store.
 
945
       repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
918
946
       ), out)
919
947
        self.assertEqual('', err)
920
948
 
921
949
        # Update second branch
922
950
        tree2 = branch2.bzrdir.open_workingtree()
923
951
        tree2.pull(branch1)
924
 
        out, err = self.run_bzr('info -v repo/branch2')
 
952
        out, err = self.runbzr('info repo/branch2')
925
953
        self.assertEqualDiff(
926
 
"""Repository tree (format: knit)
927
 
Location:
928
 
  shared repository: repo
929
 
  repository branch: repo/branch2
 
954
"""Location:
 
955
    shared repository: %s
 
956
  repository checkout: branch2
930
957
 
931
958
Related branches:
932
 
  parent branch: repo/branch1
 
959
  parent branch: %s
933
960
 
934
961
Format:
935
962
       control: Meta directory format 1
953
980
   first revision: %s
954
981
  latest revision: %s
955
982
 
956
 
Repository:
 
983
Revision store:
957
984
         1 revision
958
 
""" % (format.get_branch_format().get_format_description(),
 
985
         %d KiB
 
986
""" % (repo.bzrdir.root_transport.base,
 
987
       branch1.bzrdir.root_transport.base,
 
988
       format.get_branch_format().get_format_description(),
959
989
       format.repository_format.get_format_description(),
960
990
       datestring_first, datestring_first,
 
991
       # poking at _revision_store isn't all that clean, but neither is
 
992
       # having the ui test dependent on the exact overhead of a given store.
 
993
       repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
961
994
       ), out)
962
995
        self.assertEqual('', err)
963
996
 
964
997
        # Show info about repository with revisions
965
 
        out, err = self.run_bzr('info -v repo')
 
998
        out, err = self.runbzr('info repo')
966
999
        self.assertEqualDiff(
967
 
"""Shared repository with trees (format: dirstate or dirstate-tags or knit)
968
 
Location:
969
 
  shared repository: repo
 
1000
"""Location:
 
1001
  shared repository: %s
970
1002
 
971
1003
Format:
972
1004
       control: Meta directory format 1
974
1006
 
975
1007
Create working tree for new branches inside the repository.
976
1008
 
977
 
Repository:
 
1009
Revision store:
978
1010
         1 revision
979
 
""" % (format.repository_format.get_format_description(),
 
1011
         %d KiB
 
1012
""" % (repo.bzrdir.root_transport.base,
 
1013
       format.repository_format.get_format_description(),
 
1014
       # poking at _revision_store isn't all that clean, but neither is
 
1015
       # having the ui test dependent on the exact overhead of a given store.
 
1016
       repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
980
1017
       ),
981
1018
       out)
982
1019
        self.assertEqual('', err)
983
 
 
 
1020
    
984
1021
    def test_info_shared_repository_with_tree_in_root(self):
985
1022
        format = bzrdir.format_registry.make_bzrdir('knit')
986
1023
        transport = self.get_transport()
988
1025
        # Create shared repository with working trees
989
1026
        repo = self.make_repository('repo', shared=True, format=format)
990
1027
        repo.set_make_working_trees(True)
991
 
        out, err = self.run_bzr('info -v repo')
 
1028
        out, err = self.runbzr('info repo')
992
1029
        self.assertEqualDiff(
993
 
"""Shared repository with trees (format: dirstate or dirstate-tags or knit)
994
 
Location:
995
 
  shared repository: repo
 
1030
"""Location:
 
1031
  shared repository: %s
996
1032
 
997
1033
Format:
998
1034
       control: Meta directory format 1
1000
1036
 
1001
1037
Create working tree for new branches inside the repository.
1002
1038
 
1003
 
Repository:
 
1039
Revision store:
1004
1040
         0 revisions
1005
 
""" % (format.repository_format.get_format_description(),
 
1041
         0 KiB
 
1042
""" % (repo.bzrdir.root_transport.base,
 
1043
       format.repository_format.get_format_description(),
1006
1044
       ), out)
1007
1045
        self.assertEqual('', err)
1008
1046
 
1010
1048
        control = repo.bzrdir
1011
1049
        branch = control.create_branch()
1012
1050
        control.create_workingtree()
1013
 
        out, err = self.run_bzr('info -v repo')
 
1051
        out, err = self.runbzr('info repo')
1014
1052
        self.assertEqualDiff(
1015
 
"""Repository tree (format: knit)
1016
 
Location:
1017
 
  shared repository: repo
1018
 
  repository branch: repo
 
1053
"""Location:
 
1054
    shared repository: %s
 
1055
  repository checkout: .
1019
1056
 
1020
1057
Format:
1021
1058
       control: Meta directory format 1
1036
1073
Branch history:
1037
1074
         0 revisions
1038
1075
 
1039
 
Repository:
 
1076
Revision store:
1040
1077
         0 revisions
1041
 
""" % (format.get_branch_format().get_format_description(),
 
1078
         0 KiB
 
1079
""" % (repo.bzrdir.root_transport.base,
 
1080
       format.get_branch_format().get_format_description(),
1042
1081
       format.repository_format.get_format_description(),
1043
1082
       ), out)
1044
1083
        self.assertEqual('', err)
1045
1084
 
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,
 
1085
    def assertCheckoutStatusOutput(self, 
1073
1086
        command_string, lco_tree, shared_repo=None,
1074
1087
        repo_branch=None,
1075
1088
        tree_locked=False,
1076
1089
        branch_locked=False, repo_locked=False,
1077
1090
        verbose=False,
1078
 
        light_checkout=True,
1079
 
        checkout_root=None):
1080
 
        """Check the output of info in a checkout.
 
1091
        light_checkout=True):
 
1092
        """Check the output of info in a light checkout tree.
1081
1093
 
1082
1094
        This is not quite a mirror of the info code: rather than using the
1083
1095
        tree being examined to predict output, it uses a bunch of flags which
1084
1096
        allow us, the test writers, to document what *should* be present in
1085
1097
        the output. Removing this separation would remove the value of the
1086
1098
        tests.
1087
 
 
 
1099
        
1088
1100
        :param path: the path to the light checkout.
1089
1101
        :param lco_tree: the tree object for the light checkout.
1090
1102
        :param shared_repo: A shared repository is in use, expect that in
1094
1106
        :param tree_locked: If true, expect the tree to be locked.
1095
1107
        :param branch_locked: If true, expect the branch to be locked.
1096
1108
        :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
 
1109
        :param verbose: If true, expect verbose output
1102
1110
        """
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()
 
1111
        out, err = self.runbzr('info %s' % command_string)
1130
1112
        if repo_locked or branch_locked or tree_locked:
1131
1113
            def locked_message(a_bool):
1132
1114
                if a_bool:
1144
1126
                    locked_message(repo_locked)))
1145
1127
        else:
1146
1128
            expected_lock_output = ''
1147
 
        tree_data = ''
1148
 
        extra_space = ''
1149
1129
        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)))
 
1130
            tree_data = (" light checkout root: %s" %
 
1131
                lco_tree.bzrdir.root_transport.base)
 
1132
        else:
 
1133
            tree_data = ("       checkout root: %s" %
 
1134
                lco_tree.bzrdir.root_transport.base)
1156
1135
        if shared_repo is not None:
1157
1136
            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)))
 
1137
                "   shared repository: %s\n"
 
1138
                "   repository branch: branch\n" %
 
1139
                shared_repo.bzrdir.root_transport.base)
1162
1140
        elif repo_branch is not None:
1163
1141
            branch_data = (
1164
 
                "%s  checkout of branch: %s\n" %
1165
 
                (extra_space,
1166
 
                 friendly_location(repo_branch.bzrdir.root_transport.base)))
 
1142
                "  checkout of branch: %s\n" % 
 
1143
                repo_branch.bzrdir.root_transport.base)
1167
1144
        else:
1168
 
            branch_data = ("   checkout of branch: %s\n" %
 
1145
            branch_data = ("  checkout of branch: %s\n" % 
1169
1146
                lco_tree.branch.bzrdir.root_transport.base)
1170
 
 
1171
 
        if verbose >= 2:
 
1147
        
 
1148
        if verbose:
1172
1149
            verbose_info = '         0 committers\n'
1173
1150
        else:
1174
1151
            verbose_info = ''
1175
 
 
 
1152
            
1176
1153
        self.assertEqualDiff(
1177
 
"""%s (format: %s)
1178
 
Location:
1179
 
%s%s
 
1154
"""Location:
 
1155
%s
 
1156
%s
1180
1157
Format:
1181
1158
       control: Meta directory format 1
1182
1159
  working tree: %s
1196
1173
Branch history:
1197
1174
         0 revisions
1198
1175
%s
1199
 
Repository:
 
1176
Revision store:
1200
1177
         0 revisions
1201
 
""" %  (description,
1202
 
        format,
1203
 
        tree_data,
 
1178
         0 KiB
 
1179
""" %  (tree_data,
1204
1180
        branch_data,
1205
1181
        lco_tree._format.get_format_description(),
1206
1182
        lco_tree.branch._format.get_format_description(),
1214
1190
        transport = self.get_transport()
1215
1191
        # Create shared repository with a branch
1216
1192
        repo = self.make_repository('repo', shared=True,
1217
 
                                    format=bzrdir.BzrDirMetaFormat1())
 
1193
                                    format=bzrlib.bzrdir.BzrDirMetaFormat1())
1218
1194
        repo.set_make_working_trees(False)
1219
1195
        repo.bzrdir.root_transport.mkdir('branch')
1220
1196
        repo_branch = repo.bzrdir.create_branch_convenience('repo/branch',
1221
 
                                    format=bzrdir.BzrDirMetaFormat1())
 
1197
                                    format=bzrlib.bzrdir.BzrDirMetaFormat1())
1222
1198
        # Do a heavy checkout
1223
1199
        transport.mkdir('tree')
1224
1200
        transport.mkdir('tree/checkout')
1225
 
        co_branch = bzrdir.BzrDir.create_branch_convenience('tree/checkout',
1226
 
            format=bzrdir.BzrDirMetaFormat1())
 
1201
        co_branch = bzrlib.bzrdir.BzrDir.create_branch_convenience('tree/checkout',
 
1202
            format=bzrlib.bzrdir.BzrDirMetaFormat1())
1227
1203
        co_branch.bind(repo_branch)
1228
1204
        # Do a light checkout of the heavy one
1229
1205
        transport.mkdir('tree/lightcheckout')
1230
 
        lco_dir = bzrdir.BzrDirMetaFormat1().initialize('tree/lightcheckout')
1231
 
        branch.BranchReferenceFormat().initialize(lco_dir,
1232
 
            target_branch=co_branch)
 
1206
        lco_dir = bzrlib.bzrdir.BzrDirMetaFormat1().initialize('tree/lightcheckout')
 
1207
        bzrlib.branch.BranchReferenceFormat().initialize(lco_dir, co_branch)
1233
1208
        lco_dir.create_workingtree()
1234
1209
        lco_tree = lco_dir.open_workingtree()
1235
1210
 
1237
1212
        # W B R
1238
1213
 
1239
1214
        # U U U
1240
 
        self.assertCheckoutStatusOutput('-v tree/lightcheckout', lco_tree,
1241
 
                                        repo_branch=repo_branch,
1242
 
                                        verbose=True, light_checkout=True)
 
1215
        self.assertCheckoutStatusOutput('tree/lightcheckout', lco_tree)
1243
1216
        # U U L
1244
1217
        lco_tree.branch.repository.lock_write()
1245
1218
        try:
1246
 
            self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1247
 
            lco_tree, repo_branch=repo_branch,
1248
 
            repo_locked=True, verbose=True, light_checkout=True)
 
1219
            self.assertCheckoutStatusOutput('tree/lightcheckout',
 
1220
            lco_tree,
 
1221
            repo_locked=True)
1249
1222
        finally:
1250
1223
            lco_tree.branch.repository.unlock()
1251
1224
        # U L L
1252
1225
        lco_tree.branch.lock_write()
1253
1226
        try:
1254
 
            self.assertCheckoutStatusOutput('-v tree/lightcheckout',
 
1227
            self.assertCheckoutStatusOutput('tree/lightcheckout',
1255
1228
            lco_tree,
1256
1229
            branch_locked=True,
1257
 
            repo_locked=True,
1258
 
            repo_branch=repo_branch,
1259
 
            verbose=True)
 
1230
            repo_locked=True)
1260
1231
        finally:
1261
1232
            lco_tree.branch.unlock()
1262
1233
        # L L L
1263
1234
        lco_tree.lock_write()
1264
1235
        try:
1265
 
            self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1266
 
            lco_tree, repo_branch=repo_branch,
 
1236
            self.assertCheckoutStatusOutput('tree/lightcheckout',
 
1237
            lco_tree,
1267
1238
            tree_locked=True,
1268
1239
            branch_locked=True,
1269
 
            repo_locked=True,
1270
 
            verbose=True)
 
1240
            repo_locked=True)
1271
1241
        finally:
1272
1242
            lco_tree.unlock()
1273
1243
        # L L U
1274
1244
        lco_tree.lock_write()
1275
1245
        lco_tree.branch.repository.unlock()
1276
1246
        try:
1277
 
            self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1278
 
            lco_tree, repo_branch=repo_branch,
 
1247
            self.assertCheckoutStatusOutput('tree/lightcheckout',
 
1248
            lco_tree,
1279
1249
            tree_locked=True,
1280
 
            branch_locked=True,
1281
 
            verbose=True)
 
1250
            branch_locked=True)
1282
1251
        finally:
1283
1252
            lco_tree.branch.repository.lock_write()
1284
1253
            lco_tree.unlock()
1286
1255
        lco_tree.lock_write()
1287
1256
        lco_tree.branch.unlock()
1288
1257
        try:
1289
 
            self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1290
 
            lco_tree, repo_branch=repo_branch,
1291
 
            tree_locked=True,
1292
 
            verbose=True)
 
1258
            self.assertCheckoutStatusOutput('tree/lightcheckout',
 
1259
            lco_tree,
 
1260
            tree_locked=True)
1293
1261
        finally:
1294
1262
            lco_tree.branch.lock_write()
1295
1263
            lco_tree.unlock()
1298
1266
        lco_tree.branch.unlock()
1299
1267
        lco_tree.branch.repository.lock_write()
1300
1268
        try:
1301
 
            self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1302
 
            lco_tree, repo_branch=repo_branch,
 
1269
            self.assertCheckoutStatusOutput('tree/lightcheckout',
 
1270
            lco_tree,
1303
1271
            tree_locked=True,
1304
 
            repo_locked=True,
1305
 
            verbose=True)
 
1272
            repo_locked=True)
1306
1273
        finally:
1307
1274
            lco_tree.branch.repository.unlock()
1308
1275
            lco_tree.branch.lock_write()
1311
1278
        lco_tree.branch.lock_write()
1312
1279
        lco_tree.branch.repository.unlock()
1313
1280
        try:
1314
 
            self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1315
 
            lco_tree, repo_branch=repo_branch,
1316
 
            branch_locked=True,
1317
 
            verbose=True)
 
1281
            self.assertCheckoutStatusOutput('tree/lightcheckout',
 
1282
            lco_tree,
 
1283
            branch_locked=True)
1318
1284
        finally:
1319
1285
            lco_tree.branch.repository.lock_write()
1320
1286
            lco_tree.branch.unlock()
1321
1287
 
1322
 
        if sys.platform == 'win32':
1323
 
            self.knownFailure('Win32 cannot run "bzr info"'
1324
 
                              ' when the tree is locked.')
1325
 
 
1326
1288
    def test_info_locking_oslocks(self):
1327
1289
        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()
 
1290
            raise TestSkipped("don't use oslocks on win32 in unix manner")
1334
1291
 
1335
1292
        tree = self.make_branch_and_tree('branch',
1336
 
                                         format=bzrdir.BzrDirFormat6())
 
1293
                                         format=bzrlib.bzrdir.BzrDirFormat6())
1337
1294
 
1338
1295
        # Test all permutations of locking the working tree, branch and repository
1339
1296
        # XXX: Well not yet, as we can't query oslocks yet. Currently, it's
1342
1299
        # W B R
1343
1300
 
1344
1301
        # U U U
1345
 
        out, err = self.run_bzr('info -v branch')
 
1302
        out, err = self.runbzr('info branch')
1346
1303
        self.assertEqualDiff(
1347
 
"""Standalone tree (format: weave)
1348
 
Location:
 
1304
"""Location:
1349
1305
  branch root: %s
1350
1306
 
1351
1307
Format:
1367
1323
Branch history:
1368
1324
         0 revisions
1369
1325
 
1370
 
Repository:
 
1326
Revision store:
1371
1327
         0 revisions
1372
 
""" % ('branch', tree.branch.repository._format.get_format_description(),
 
1328
         0 KiB
 
1329
""" % (tree.bzrdir.root_transport.base,
 
1330
       tree.branch.repository._format.get_format_description(),
1373
1331
       ), out)
1374
1332
        self.assertEqual('', err)
1375
1333
        # L L L
1376
1334
        tree.lock_write()
1377
 
        out, err = self.run_bzr('info -v branch')
 
1335
        out, err = self.runbzr('info branch')
1378
1336
        self.assertEqualDiff(
1379
 
"""Standalone tree (format: weave)
1380
 
Location:
 
1337
"""Location:
1381
1338
  branch root: %s
1382
1339
 
1383
1340
Format:
1399
1356
Branch history:
1400
1357
         0 revisions
1401
1358
 
1402
 
Repository:
 
1359
Revision store:
1403
1360
         0 revisions
1404
 
""" % ('branch', tree.branch.repository._format.get_format_description(),
 
1361
         0 KiB
 
1362
""" % (tree.bzrdir.root_transport.base,
 
1363
       tree.branch.repository._format.get_format_description(),
1405
1364
       ), out)
1406
1365
        self.assertEqual('', err)
1407
1366
        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)