/breezy/unstable

To get this branch, use:
bzr branch https://code.breezy-vcs.org/breezy/unstable

« back to all changes in this revision

Viewing changes to breezy/tests/blackbox/test_commit.py

  • Committer: Jelmer Vernooij
  • Date: 2017-05-24 01:39:33 UTC
  • mfrom: (3815.3776.6)
  • Revision ID: jelmer@jelmer.uk-20170524013933-ir4y4tqtrsiz2ka2
New upstream snapshot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
 
25
25
from testtools.matchers import DocTestMatches
26
26
 
27
 
from bzrlib import (
 
27
from ... import (
28
28
    config,
29
29
    osutils,
30
30
    ignores,
31
31
    msgeditor,
32
32
    )
33
 
from bzrlib.controldir import ControlDir
34
 
from bzrlib.tests import (
 
33
from ...controldir import ControlDir
 
34
from .. import (
35
35
    test_foreign,
36
36
    features,
37
37
    )
38
 
from bzrlib.tests import TestCaseWithTransport
39
 
from bzrlib.tests.matchers import ContainsNoVfsCalls
 
38
from .. import TestCaseWithTransport
 
39
from ..matchers import ContainsNoVfsCalls
40
40
 
41
41
 
42
42
class TestCommit(TestCaseWithTransport):
50
50
        self.assertEqual('', out)
51
51
        # Two ugly bits here.
52
52
        # 1) We really don't want 'aborting commit write group' anymore.
53
 
        # 2) bzr: ERROR: is a really long line, so we wrap it with '\'
 
53
        # 2) brz: ERROR: is a really long line, so we wrap it with '\'
54
54
        self.assertThat(
55
55
            err,
56
56
            DocTestMatches("""\
57
57
Committing to: ...
58
 
bzr: ERROR: No changes to commit.\
59
 
 Please 'bzr add' the files you want to commit,\
 
58
brz: ERROR: No changes to commit.\
 
59
 Please 'brz add' the files you want to commit,\
60
60
 or use --unchanged to force an empty commit.
61
61
""", flags=doctest.ELLIPSIS|doctest.REPORT_UDIFF))
62
62
 
214
214
        wt.rename_one('hello.txt', 'subdir/hello.txt')
215
215
        out, err = self.run_bzr('commit -m renamed')
216
216
        self.assertEqual('', out)
217
 
        self.assertEqual(set([
 
217
        self.assertEqual({
218
218
            'Committing to: %s/' % osutils.getcwd(),
219
219
            'added subdir',
220
220
            'renamed hello.txt => subdir/hello.txt',
221
221
            'Committed revision 2.',
222
222
            '',
223
 
            ]), set(err.split('\n')))
 
223
            }, set(err.split('\n')))
224
224
 
225
225
    def test_verbose_commit_with_unknown(self):
226
226
        """Unknown files should not be listed by default in verbose output"""
262
262
 
263
263
    def test_commit_sanitizes_CR_in_message(self):
264
264
        # See bug #433779, basically Emacs likes to pass '\r\n' style line
265
 
        # endings to 'bzr commit -m ""' which breaks because we don't allow
 
265
        # endings to 'brz commit -m ""' which breaks because we don't allow
266
266
        # '\r' in commit messages. (Mostly because of issues where XML style
267
267
        # formats arbitrarily strip it out of the data while parsing.)
268
268
        # To make life easier for users, we just always translate '\r\n' =>
280
280
 
281
281
    def test_commit_merge_reports_all_modified_files(self):
282
282
        # the commit command should show all the files that are shown by
283
 
        # bzr diff or bzr status when committing, even when they were not
 
283
        # brz diff or brz status when committing, even when they were not
284
284
        # changed by the user but rather through doing a merge.
285
285
        this_tree = self.make_branch_and_tree('this')
286
286
        # we need a bunch of files and dirs, to perform one action on each.
330
330
        this_tree.merge_from_branch(other_tree.branch)
331
331
        out, err = self.run_bzr('commit -m added', working_dir='this')
332
332
        self.assertEqual('', out)
333
 
        self.assertEqual(set([
 
333
        self.assertEqual({
334
334
            'Committing to: %s/' % osutils.pathjoin(osutils.getcwd(), 'this'),
335
335
            'modified filetomodify',
336
336
            'added newdir',
343
343
            'deleted filetoremove',
344
344
            'Committed revision 2.',
345
345
            ''
346
 
            ]), set(err.split('\n')))
 
346
            }, set(err.split('\n')))
347
347
 
348
348
    def test_empty_commit_message(self):
349
349
        tree = self.make_branch_and_tree('.')
378
378
        # commit to the original branch to make the checkout out of date
379
379
        tree.commit('message branch', allow_pointless=True)
380
380
        # now commit to the checkout should emit
381
 
        # ERROR: Out of date with the branch, 'bzr update' is suggested
 
381
        # ERROR: Out of date with the branch, 'brz update' is suggested
382
382
        output = self.run_bzr('commit --unchanged -m checkout_message '
383
383
                             'checkout', retcode=3)
384
384
        self.assertEqual(output,
385
385
                         ('',
386
 
                          "bzr: ERROR: Working tree is out of date, please "
387
 
                          "run 'bzr update'.\n"))
 
386
                          "brz: ERROR: Working tree is out of date, please "
 
387
                          "run 'brz update'.\n"))
388
388
 
389
389
    def test_local_commit_unbound(self):
390
390
        # a --local commit on an unbound branch is an error
391
391
        self.make_branch_and_tree('.')
392
392
        out, err = self.run_bzr('commit --local', retcode=3)
393
393
        self.assertEqualDiff('', out)
394
 
        self.assertEqualDiff('bzr: ERROR: Cannot perform local-only commits '
 
394
        self.assertEqualDiff('brz: ERROR: Cannot perform local-only commits '
395
395
                             'on unbound branches.\n', err)
396
396
 
397
397
    def test_commit_a_text_merge_in_a_checkout(self):
621
621
        self.build_tree(['tree/hello.txt'])
622
622
        tree.add('hello.txt')
623
623
        self.run_bzr_error(
624
 
            ["bzr: ERROR: No tracker specified for bug 123. Use the form "
 
624
            ["brz: ERROR: No tracker specified for bug 123. Use the form "
625
625
            "'tracker:id' or specify a default bug tracker using the "
626
626
            "`bugtracker` option.\n"
627
 
            "See \"bzr help bugs\" for more information on this feature. "
 
627
            "See \"brz help bugs\" for more information on this feature. "
628
628
            "Commit refused."],
629
629
            'commit -m add-b --fixes=123',
630
630
            working_dir='tree')
640
640
        tree.add('hello.txt')
641
641
        self.run_bzr_error(
642
642
            ["Did not understand bug identifier orange: Must be an integer. "
643
 
             "See \"bzr help bugs\" for more information on this feature.\n"
 
643
             "See \"brz help bugs\" for more information on this feature.\n"
644
644
             "Commit refused."],
645
645
            'commit -m add-b --fixes=lp:orange',
646
646
            working_dir='tree')
652
652
        tree.add('hello.txt')
653
653
        self.run_bzr_error(
654
654
            [r"Invalid bug orange:apples:bananas. Must be in the form of "
655
 
             r"'tracker:id'\. See \"bzr help bugs\" for more information on "
 
655
             r"'tracker:id'\. See \"brz help bugs\" for more information on "
656
656
             r"this feature.\nCommit refused\."],
657
657
            'commit -m add-b --fixes=orange:apples:bananas',
658
658
            working_dir='tree')
713
713
        self.assertEqual(
714
714
            'Sat 2009-10-10 08:00:00 +0100',
715
715
            osutils.format_date(last_rev.timestamp, last_rev.timezone))
716
 
        
 
716
 
 
717
    def test_commit_time_negative_windows(self):
 
718
        tree = self.make_branch_and_tree('tree')
 
719
        self.build_tree(['tree/hello.txt'])
 
720
        tree.add('hello.txt')
 
721
        out, err = self.run_bzr("commit -m hello "
 
722
            "--commit-time='1969-10-10 00:00:00 +0000' tree/hello.txt")
 
723
        last_rev = tree.branch.repository.get_revision(tree.last_revision())
 
724
        self.assertEqual(
 
725
            'Fri 1969-10-10 00:00:00 +0000',
 
726
            osutils.format_date(last_rev.timestamp, last_rev.timezone))
 
727
 
 
728
    def test_commit_time_negative_32bit(self):
 
729
        tree = self.make_branch_and_tree('tree')
 
730
        self.build_tree(['tree/hello.txt'])
 
731
        tree.add('hello.txt')
 
732
        out, err = self.run_bzr("commit -m hello "
 
733
            "--commit-time='1900-01-01 00:00:00 +0000' tree/hello.txt")
 
734
        last_rev = tree.branch.repository.get_revision(tree.last_revision())
 
735
        self.assertEqual(
 
736
            'Mon 1900-01-01 00:00:00 +0000',
 
737
            osutils.format_date(last_rev.timestamp, last_rev.timezone))
 
738
 
 
739
    def test_commit_time_positive_32bit(self):
 
740
        tree = self.make_branch_and_tree('tree')
 
741
        self.build_tree(['tree/hello.txt'])
 
742
        tree.add('hello.txt')
 
743
        out, err = self.run_bzr("commit -m hello "
 
744
            "--commit-time='2039-01-01 00:00:00 +0000' tree/hello.txt")
 
745
        last_rev = tree.branch.repository.get_revision(tree.last_revision())
 
746
        self.assertEqual(
 
747
            'Sat 2039-01-01 00:00:00 +0000',
 
748
            osutils.format_date(last_rev.timestamp, last_rev.timezone))
 
749
 
717
750
    def test_commit_time_bad_time(self):
718
751
        tree = self.make_branch_and_tree('tree')
719
752
        self.build_tree(['tree/hello.txt'])
721
754
        out, err = self.run_bzr("commit -m hello "
722
755
            "--commit-time='NOT A TIME' tree/hello.txt", retcode=3)
723
756
        self.assertStartsWith(
724
 
            err, "bzr: ERROR: Could not parse --commit-time:")
 
757
            err, "brz: ERROR: Could not parse --commit-time:")
725
758
 
726
759
    def test_commit_time_missing_tz(self):
727
760
        tree = self.make_branch_and_tree('tree')
730
763
        out, err = self.run_bzr("commit -m hello "
731
764
            "--commit-time='2009-10-10 08:00:00' tree/hello.txt", retcode=3)
732
765
        self.assertStartsWith(
733
 
            err, "bzr: ERROR: Could not parse --commit-time:")
 
766
            err, "brz: ERROR: Could not parse --commit-time:")
734
767
        # Test that it is actually checking and does not simply crash with
735
768
        # some other exception
736
769
        self.assertContainsString(err, "missing a timezone offset")
763
796
        out, err = self.run_bzr(['commit', '--unchanged', '-mfoo', 'checkout'],
764
797
            retcode=3)
765
798
        self.assertContainsRe(err,
766
 
            r'^bzr: ERROR: Cannot lock.*readonly transport')
 
799
            r'^brz: ERROR: Cannot lock.*readonly transport')
767
800
 
768
801
    def setup_editor(self):
769
802
        # Test that commit template hooks work
771
804
            f = file('fed.bat', 'w')
772
805
            f.write('@rem dummy fed')
773
806
            f.close()
774
 
            self.overrideEnv('BZR_EDITOR', "fed.bat")
 
807
            self.overrideEnv('BRZ_EDITOR', "fed.bat")
775
808
        else:
776
809
            f = file('fed.sh', 'wb')
777
810
            f.write('#!/bin/sh\n')
778
811
            f.close()
779
 
            os.chmod('fed.sh', 0755)
780
 
            self.overrideEnv('BZR_EDITOR', "./fed.sh")
 
812
            os.chmod('fed.sh', 0o755)
 
813
            self.overrideEnv('BRZ_EDITOR', "./fed.sh")
781
814
 
782
815
    def setup_commit_with_template(self):
783
816
        self.setup_editor()
796
829
        out, err = self.run_bzr("commit tree/hello.txt", retcode=3,
797
830
            stdin="y\n")
798
831
        self.assertContainsRe(err,
799
 
            "bzr: ERROR: Empty commit message specified")
 
832
            "brz: ERROR: Empty commit message specified")
800
833
 
801
834
    def test_commit_hook_template_accepted(self):
802
835
        tree = self.setup_commit_with_template()
832
865
            f.write('hello')
833
866
        self.run_bzr(['add'], working_dir='foo')
834
867
        self.overrideEnv('EMAIL', None)
835
 
        self.overrideEnv('BZR_EMAIL', None)
 
868
        self.overrideEnv('BRZ_EMAIL', None)
836
869
        # Also, make sure that it's not inferred from mailname.
837
870
        self.overrideAttr(config, '_auto_user_id',
838
871
            lambda: (None, None))