/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_commit.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2010-01-11 13:15:01 UTC
  • mfrom: (4900.1.6 command-cleanup)
  • Revision ID: pqm@pqm.ubuntu.com-20100111131501-btdm0vi95l7xjlp1
(andrew) Implement Command.add_cleanup,
        and replace try/finally blocks in bzrlib.builtins with it.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
 
1
# Copyright (C) 2005, 2006, 2007, 2009 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
18
18
"""Tests for the commit CLI of bzr."""
19
19
 
20
20
import os
21
 
import re
22
21
import sys
23
22
 
24
23
from bzrlib import (
108
107
                              'modified hello\.txt\n'
109
108
                              'Committed revision 2\.\n$')
110
109
 
111
 
    def test_unicode_commit_message_is_filename(self):
112
 
        """Unicode commit message same as a filename (Bug #563646).
113
 
        """
114
 
        file_name = u'\N{euro sign}'
115
 
        self.run_bzr(['init'])
116
 
        open(file_name, 'w').write('hello world')
117
 
        self.run_bzr(['add'])
118
 
        out, err = self.run_bzr(['commit', '-m', file_name])
119
 
        reflags = re.MULTILINE|re.DOTALL|re.UNICODE
120
 
        te = osutils.get_terminal_encoding()
121
 
        self.assertContainsRe(err.decode(te),
122
 
            u'The commit message is a file name:',
123
 
            flags=reflags)
124
 
 
125
 
        # Run same test with a filename that causes encode
126
 
        # error for the terminal encoding. We do this
127
 
        # by forcing terminal encoding of ascii for
128
 
        # osutils.get_terminal_encoding which is used
129
 
        # by ui.text.show_warning
130
 
        default_get_terminal_enc = osutils.get_terminal_encoding
131
 
        try:
132
 
            osutils.get_terminal_encoding = lambda: 'ascii'
133
 
            file_name = u'foo\u1234'
134
 
            open(file_name, 'w').write('hello world')
135
 
            self.run_bzr(['add'])
136
 
            out, err = self.run_bzr(['commit', '-m', file_name])
137
 
            reflags = re.MULTILINE|re.DOTALL|re.UNICODE
138
 
            te = osutils.get_terminal_encoding()
139
 
            self.assertContainsRe(err.decode(te, 'replace'),
140
 
                u'The commit message is a file name:',
141
 
                flags=reflags)
142
 
        finally:
143
 
            osutils.get_terminal_encoding = default_get_terminal_enc
144
 
 
145
110
    def test_warn_about_forgotten_commit_message(self):
146
111
        """Test that the lack of -m parameter is caught"""
147
112
        wt = self.make_branch_and_tree('.')
378
343
        trunk = self.make_branch_and_tree('trunk')
379
344
 
380
345
        u1 = trunk.branch.create_checkout('u1')
381
 
        self.build_tree_contents([('u1/hosts', 'initial contents\n')])
 
346
        self.build_tree_contents([('u1/hosts', 'initial contents')])
382
347
        u1.add('hosts')
383
348
        self.run_bzr('commit -m add-hosts u1')
384
349
 
385
350
        u2 = trunk.branch.create_checkout('u2')
386
 
        self.build_tree_contents([('u2/hosts', 'altered in u2\n')])
 
351
        self.build_tree_contents([('u2/hosts', 'altered in u2')])
387
352
        self.run_bzr('commit -m checkin-from-u2 u2')
388
353
 
389
354
        # make an offline commits
390
 
        self.build_tree_contents([('u1/hosts', 'first offline change in u1\n')])
 
355
        self.build_tree_contents([('u1/hosts', 'first offline change in u1')])
391
356
        self.run_bzr('commit -m checkin-offline --local u1')
392
357
 
393
358
        # now try to pull in online work from u2, and then commit our offline
394
359
        # work as a merge
395
360
        # retcode 1 as we expect a text conflict
396
361
        self.run_bzr('update u1', retcode=1)
397
 
        self.assertFileEqual('''\
398
 
<<<<<<< TREE
399
 
first offline change in u1
400
 
=======
401
 
altered in u2
402
 
>>>>>>> MERGE-SOURCE
403
 
''',
404
 
                             'u1/hosts')
405
 
 
406
362
        self.run_bzr('resolved u1/hosts')
407
363
        # add a text change here to represent resolving the merge conflicts in
408
364
        # favour of a new version of the file not identical to either the u1
710
666
        self.assertContainsRe(err,
711
667
            r'^bzr: ERROR: Cannot lock.*readonly transport')
712
668
 
713
 
    def setup_editor(self):
 
669
    def test_commit_hook_template(self):
714
670
        # Test that commit template hooks work
 
671
        def restoreDefaults():
 
672
            msgeditor.hooks['commit_message_template'] = []
 
673
            osutils.set_or_unset_env('BZR_EDITOR', default_editor)
715
674
        if sys.platform == "win32":
716
675
            f = file('fed.bat', 'w')
717
676
            f.write('@rem dummy fed')
718
677
            f.close()
719
 
            osutils.set_or_unset_env('BZR_EDITOR', "fed.bat")
 
678
            default_editor = osutils.set_or_unset_env('BZR_EDITOR', "fed.bat")
720
679
        else:
721
680
            f = file('fed.sh', 'wb')
722
681
            f.write('#!/bin/sh\n')
723
682
            f.close()
724
683
            os.chmod('fed.sh', 0755)
725
 
            osutils.set_or_unset_env('BZR_EDITOR', "./fed.sh")
726
 
 
727
 
    def setup_commit_with_template(self):
728
 
        self.setup_editor()
 
684
            default_editor = osutils.set_or_unset_env('BZR_EDITOR', "./fed.sh")
 
685
        self.addCleanup(restoreDefaults)
729
686
        msgeditor.hooks.install_named_hook("commit_message_template",
730
687
                lambda commit_obj, msg: "save me some typing\n", None)
731
688
        tree = self.make_branch_and_tree('tree')
732
689
        self.build_tree(['tree/hello.txt'])
733
690
        tree.add('hello.txt')
734
 
        return tree
735
 
 
736
 
    def test_commit_hook_template_accepted(self):
737
 
        tree = self.setup_commit_with_template()
738
 
        out, err = self.run_bzr("commit tree/hello.txt", stdin="y\n")
 
691
        out, err = self.run_bzr("commit tree/hello.txt")
739
692
        last_rev = tree.branch.repository.get_revision(tree.last_revision())
740
693
        self.assertEqual('save me some typing\n', last_rev.message)
741
 
 
742
 
    def test_commit_hook_template_rejected(self):
743
 
        tree = self.setup_commit_with_template()
744
 
        expected = tree.last_revision()
745
 
        out, err = self.run_bzr_error(["empty commit message"],
746
 
            "commit tree/hello.txt", stdin="n\n")
747
 
        self.assertEqual(expected, tree.last_revision())
748
 
 
749
 
    def test_commit_without_username(self):
750
 
        """Ensure commit error if username is not set.
751
 
        """
752
 
        self.run_bzr(['init', 'foo'])
753
 
        os.chdir('foo')
754
 
        open('foo.txt', 'w').write('hello')
755
 
        self.run_bzr(['add'])
756
 
        osutils.set_or_unset_env('EMAIL', None)
757
 
        osutils.set_or_unset_env('BZR_EMAIL', None)
758
 
        out, err = self.run_bzr(['commit', '-m', 'initial'], 3)
759
 
        self.assertContainsRe(err, 'Unable to determine your name')