~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: abentley
  • Date: 2005-10-14 03:50:50 UTC
  • mto: (1185.25.1)
  • mto: This revision was merged to the branch mainline in revision 1460.
  • Revision ID: abentley@lappy-20051014035050-d779472ccb599a51
semi-broke merge

Show diffs side-by-side

added added

removed removed

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