/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

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

  • Committer: Robert Collins
  • Date: 2009-02-20 03:28:07 UTC
  • mto: This revision was merged to the branch mainline in revision 4023.
  • Revision ID: robertc@robertcollins.net-20090220032807-9ezo43wv9boso5id
Create a verb for Repository.set_make_working_trees.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 Canonical Ltd
 
1
# Copyright (C) 2005, 2006 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
"""Tests of status command.
18
18
 
19
19
Most of these depend on the particular formatting used.
20
 
As such they really are blackbox tests even though some of the
 
20
As such they really are blackbox tests even though some of the 
21
21
tests are not using self.capture. If we add tests for the programmatic
22
22
interface later, they will be non blackbox tests.
23
23
"""
43
43
 
44
44
 
45
45
class BranchStatus(TestCaseWithTransport):
46
 
 
 
46
    
47
47
    def assertStatus(self, expected_lines, working_tree,
48
48
        revision=None, short=False, pending=True, verbose=False):
49
49
        """Run status in working_tree and look for output.
50
 
 
 
50
        
51
51
        :param expected_lines: The lines to look for.
52
52
        :param working_tree: The tree to run status in.
53
53
        """
54
54
        output_string = self.status_string(working_tree, revision, short,
55
55
                pending, verbose)
56
56
        self.assertEqual(expected_lines, output_string.splitlines(True))
57
 
 
 
57
    
58
58
    def status_string(self, wt, revision=None, short=False, pending=True,
59
59
        verbose=False):
60
60
        # use a real file rather than StringIO because it doesn't handle
147
147
        self.build_tree(['more.c'])
148
148
        wt.add('more.c')
149
149
        wt.commit('Another test message')
150
 
 
 
150
        
151
151
        revs.append(RevisionSpec.from_string('1'))
152
152
        self.assertStatus([
153
153
                'added:\n',
206
206
        wt.add('directory')
207
207
        wt.add('test.c')
208
208
        wt.commit('testing')
209
 
 
 
209
        
210
210
        self.assertStatus([
211
211
                'unknown:\n',
212
212
                '  bye.c\n',
225
225
        tof = StringIO()
226
226
        self.assertRaises(errors.PathsDoNotExist,
227
227
                          show_tree_status,
228
 
                          wt, specific_files=['bye.c','test.c','absent.c'],
 
228
                          wt, specific_files=['bye.c','test.c','absent.c'], 
229
229
                          to_file=tof)
230
 
 
 
230
        
231
231
        tof = StringIO()
232
232
        show_tree_status(wt, specific_files=['directory'], to_file=tof)
233
233
        tof.seek(0)
296
296
        wt.commit('Create five empty files.')
297
297
        open('FILE_B', 'w').write('Modification to file FILE_B.')
298
298
        open('FILE_C', 'w').write('Modification to file FILE_C.')
299
 
        unlink('FILE_E')  # FILE_E will be versioned but missing
 
299
        unlink('FILE_E')  # FILE_E will be versioned but missing 
300
300
        open('FILE_Q', 'w').write('FILE_Q is added but not committed.')
301
301
        wt.add('FILE_Q')  # FILE_Q will be added but not committed
302
302
        open('UNVERSIONED_BUT_EXISTING', 'w')
347
347
        self.assertContainsRe(err,
348
348
                              r'.*ERROR: Path\(s\) do not exist: '
349
349
                              'NONEXISTENT.*')
350
 
 
 
350
        
351
351
    def test_status_nonexistent_file_with_others(self):
352
352
        # bzr st [--short] NONEXISTENT ...others..
353
353
        wt = self._prepare_nonexistent()
380
380
        self.assertContainsRe(err,
381
381
                              r'.*ERROR: Path\(s\) do not exist: '
382
382
                              'NONEXISTENT.*')
383
 
 
 
383
        
384
384
    def test_status_multiple_nonexistent_files(self):
385
385
        # bzr st [--short] NONEXISTENT ... ANOTHER_NONEXISTENT ...
386
386
        wt = self._prepare_nonexistent()
415
415
        self.assertContainsRe(err,
416
416
                              r'.*ERROR: Path\(s\) do not exist: '
417
417
                              'ANOTHER_NONEXISTENT NONEXISTENT.*')
418
 
 
 
418
        
419
419
    def test_status_nonexistent_file_with_unversioned(self):
420
420
        # bzr st [--short] NONEXISTENT A B UNVERSIONED_BUT_EXISTING C D E Q
421
421
        wt = self._prepare_nonexistent()
472
472
        self.assertEqual("working tree is out of date, run 'bzr update'\n",
473
473
                         err)
474
474
 
475
 
    def test_status_on_ignored(self):
476
 
        """Tests branch status on an unversioned file which is considered ignored.
477
 
 
478
 
        See https://bugs.launchpad.net/bzr/+bug/40103
479
 
        """
480
 
        tree = self.make_branch_and_tree('.')
481
 
 
482
 
        self.build_tree(['test1.c', 'test1.c~', 'test2.c~'])
483
 
        result = self.run_bzr('status')[0]
484
 
        self.assertContainsRe(result, "unknown:\n  test1.c\n")
485
 
        short_result = self.run_bzr('status --short')[0]
486
 
        self.assertContainsRe(short_result, "\?   test1.c\n")
487
 
 
488
 
        result = self.run_bzr('status test1.c')[0]
489
 
        self.assertContainsRe(result, "unknown:\n  test1.c\n")
490
 
        short_result = self.run_bzr('status --short test1.c')[0]
491
 
        self.assertContainsRe(short_result, "\?   test1.c\n")
492
 
 
493
 
        result = self.run_bzr('status test1.c~')[0]
494
 
        self.assertContainsRe(result, "ignored:\n  test1.c~\n")
495
 
        short_result = self.run_bzr('status --short test1.c~')[0]
496
 
        self.assertContainsRe(short_result, "I   test1.c~\n")
497
 
 
498
 
        result = self.run_bzr('status test1.c~ test2.c~')[0]
499
 
        self.assertContainsRe(result, "ignored:\n  test1.c~\n  test2.c~\n")
500
 
        short_result = self.run_bzr('status --short test1.c~ test2.c~')[0]
501
 
        self.assertContainsRe(short_result, "I   test1.c~\nI   test2.c~\n")
502
 
 
503
 
        result = self.run_bzr('status test1.c test1.c~ test2.c~')[0]
504
 
        self.assertContainsRe(result, "unknown:\n  test1.c\nignored:\n  test1.c~\n  test2.c~\n")
505
 
        short_result = self.run_bzr('status --short test1.c test1.c~ test2.c~')[0]
506
 
        self.assertContainsRe(short_result, "\?   test1.c\nI   test1.c~\nI   test2.c~\n")
507
 
 
508
475
    def test_status_write_lock(self):
509
476
        """Test that status works without fetching history and
510
477
        having a write lock.
527
494
        super(CheckoutStatus, self).setUp()
528
495
        mkdir('codir')
529
496
        chdir('codir')
530
 
 
 
497
        
531
498
    def make_branch_and_tree(self, relpath):
532
499
        source = self.make_branch(pathjoin('..', relpath))
533
500
        checkout = bzrdir.BzrDirMetaFormat1().initialize(relpath)
534
 
        bzrlib.branch.BranchReferenceFormat().initialize(checkout,
535
 
            target_branch=source)
 
501
        bzrlib.branch.BranchReferenceFormat().initialize(checkout, source)
536
502
        return checkout.create_workingtree()
537
503
 
538
504
 
629
595
        result2 = self.run_bzr("status -SV -r 0..")[0]
630
596
        self.assertEquals(result2, result)
631
597
 
632
 
    def assertStatusContains(self, pattern, short=False):
 
598
    def assertStatusContains(self, pattern):
633
599
        """Run status, and assert it contains the given pattern"""
634
 
        if short:
635
 
            result = self.run_bzr("status --short")[0]
636
 
        else:
637
 
            result = self.run_bzr("status")[0]
 
600
        result = self.run_bzr("status --short")[0]
638
601
        self.assertContainsRe(result, pattern)
639
602
 
640
 
    def test_kind_change_plain(self):
641
 
        tree = self.make_branch_and_tree('.')
642
 
        self.build_tree(['file'])
643
 
        tree.add('file')
644
 
        tree.commit('added file')
645
 
        unlink('file')
646
 
        self.build_tree(['file/'])
647
 
        self.assertStatusContains('kind changed:\n  file \(file => directory\)')
648
 
        tree.rename_one('file', 'directory')
649
 
        self.assertStatusContains('renamed:\n  file/ => directory/\n' \
650
 
                                  'modified:\n  directory/\n')
651
 
        rmdir('directory')
652
 
        self.assertStatusContains('removed:\n  file\n')
653
 
 
654
603
    def test_kind_change_short(self):
655
604
        tree = self.make_branch_and_tree('.')
656
605
        self.build_tree(['file'])
658
607
        tree.commit('added file')
659
608
        unlink('file')
660
609
        self.build_tree(['file/'])
661
 
        self.assertStatusContains('K  file => file/',
662
 
                                   short=True)
 
610
        self.assertStatusContains('K  file => file/')
663
611
        tree.rename_one('file', 'directory')
664
 
        self.assertStatusContains('RK  file => directory/',
665
 
                                   short=True)
 
612
        self.assertStatusContains('RK  file => directory/')
666
613
        rmdir('directory')
667
 
        self.assertStatusContains('RD  file => directory',
668
 
                                   short=True)
 
614
        self.assertStatusContains('RD  file => directory')
669
615
 
670
616
    def test_status_illegal_revision_specifiers(self):
671
617
        out, err = self.run_bzr('status -r 1..23..123', retcode=3)
703
649
 
704
650
 
705
651
class TestStatusEncodings(TestCaseWithTransport):
706
 
 
 
652
    
707
653
    def setUp(self):
708
654
        TestCaseWithTransport.setUp(self)
709
655
        self.user_encoding = osutils._cached_user_encoding
710
656
        self.stdout = sys.stdout
711
657
 
712
658
    def tearDown(self):
713
 
        osutils._cached_user_encoding = self.user_encoding
 
659
        bzrlib.user_encoding = self.user_encoding
714
660
        sys.stdout = self.stdout
715
661
        TestCaseWithTransport.tearDown(self)
716
662