/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: John Arbash Meinel
  • Date: 2009-06-12 18:05:15 UTC
  • mto: (4371.4.5 vila-better-heads)
  • mto: This revision was merged to the branch mainline in revision 4449.
  • Revision ID: john@arbash-meinel.com-20090612180515-t0cwbjsnve094oik
Add a failing test for handling nodes that are in the same linear chain.

It fails because the ancestry skipping causes us to miss the fact that the two nodes
are actually directly related. We could check at the beginning, as the 
code used to do, but I think that will be incomplete for the more-than-two
heads cases.

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 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
25
25
    ignores,
26
26
    msgeditor,
27
27
    osutils,
28
 
    tests,
29
28
    )
30
29
from bzrlib.bzrdir import BzrDir
31
30
from bzrlib.tests import (
107
106
                              'modified hello\.txt\n'
108
107
                              'Committed revision 2\.\n$')
109
108
 
110
 
    def test_warn_about_forgotten_commit_message(self):
111
 
        """Test that the lack of -m parameter is caught"""
112
 
        wt = self.make_branch_and_tree('.')
113
 
        self.build_tree(['one', 'two'])
114
 
        wt.add(['two'])
115
 
        out, err = self.run_bzr('commit -m one two')
116
 
        self.assertContainsRe(err, "The commit message is a file name")
117
 
 
118
109
    def test_verbose_commit_renamed(self):
119
110
        # Verbose commit of renamed file should say so
120
111
        wt = self.prepare_simple_history()
179
170
        self.assertEqual(err, 'Committing to: %s\n'
180
171
                         'Committed revision 2.\n' % expected)
181
172
 
182
 
    def test_commit_sanitizes_CR_in_message(self):
183
 
        # See bug #433779, basically Emacs likes to pass '\r\n' style line
184
 
        # endings to 'bzr commit -m ""' which breaks because we don't allow
185
 
        # '\r' in commit messages. (Mostly because of issues where XML style
186
 
        # formats arbitrarily strip it out of the data while parsing.)
187
 
        # To make life easier for users, we just always translate '\r\n' =>
188
 
        # '\n'. And '\r' => '\n'.
189
 
        a_tree = self.make_branch_and_tree('a')
190
 
        self.build_tree(['a/b'])
191
 
        a_tree.add('b')
192
 
        self.run_bzr(['commit',
193
 
                      '-m', 'a string\r\n\r\nwith mixed\r\rendings\n'],
194
 
                     working_dir='a')
195
 
        rev_id = a_tree.branch.last_revision()
196
 
        rev = a_tree.branch.repository.get_revision(rev_id)
197
 
        self.assertEqualDiff('a string\n\nwith mixed\n\nendings\n',
198
 
                             rev.message)
199
 
 
200
173
    def test_commit_merge_reports_all_modified_files(self):
201
174
        # the commit command should show all the files that are shown by
202
175
        # bzr diff or bzr status when committing, even when they were not
272
245
        self.run_bzr('commit -m ""', retcode=3)
273
246
 
274
247
    def test_unsupported_encoding_commit_message(self):
275
 
        if sys.platform == 'win32':
276
 
            raise tests.TestNotApplicable('Win32 parses arguments directly'
277
 
                ' as Unicode, so we can\'t pass invalid non-ascii')
278
248
        tree = self.make_branch_and_tree('.')
279
249
        self.build_tree_contents([('foo.c', 'int main() {}')])
280
250
        tree.add('foo.c')
299
269
        self.build_tree_contents([
300
270
            ('branch/foo.c', 'int main() {}'),
301
271
            ('branch/bar.c', 'int main() {}')])
302
 
        inner_tree.add(['foo.c', 'bar.c'])
 
272
        inner_tree.add('foo.c')
 
273
        inner_tree.add('bar.c')
303
274
        # can't commit files in different trees; sane error
304
275
        self.run_bzr('commit -m newstuff branch/foo.c .', retcode=3)
305
 
        # can commit to branch - records foo.c only
306
276
        self.run_bzr('commit -m newstuff branch/foo.c')
307
 
        # can commit to branch - records bar.c
308
277
        self.run_bzr('commit -m newstuff branch')
309
 
        # No changes left
310
 
        self.run_bzr_error(["No changes to commit"], 'commit -m newstuff branch')
 
278
        self.run_bzr('commit -m newstuff branch', retcode=3)
311
279
 
312
280
    def test_out_of_date_tree_commit(self):
313
281
        # check we get an error code and a clear message committing with an out
343
311
        trunk = self.make_branch_and_tree('trunk')
344
312
 
345
313
        u1 = trunk.branch.create_checkout('u1')
346
 
        self.build_tree_contents([('u1/hosts', 'initial contents\n')])
 
314
        self.build_tree_contents([('u1/hosts', 'initial contents')])
347
315
        u1.add('hosts')
348
316
        self.run_bzr('commit -m add-hosts u1')
349
317
 
350
318
        u2 = trunk.branch.create_checkout('u2')
351
 
        self.build_tree_contents([('u2/hosts', 'altered in u2\n')])
 
319
        self.build_tree_contents([('u2/hosts', 'altered in u2')])
352
320
        self.run_bzr('commit -m checkin-from-u2 u2')
353
321
 
354
322
        # make an offline commits
355
 
        self.build_tree_contents([('u1/hosts', 'first offline change in u1\n')])
 
323
        self.build_tree_contents([('u1/hosts', 'first offline change in u1')])
356
324
        self.run_bzr('commit -m checkin-offline --local u1')
357
325
 
358
326
        # now try to pull in online work from u2, and then commit our offline
359
327
        # work as a merge
360
328
        # retcode 1 as we expect a text conflict
361
329
        self.run_bzr('update u1', retcode=1)
362
 
        self.assertFileEqual('''\
363
 
<<<<<<< TREE
364
 
first offline change in u1
365
 
=======
366
 
altered in u2
367
 
>>>>>>> MERGE-SOURCE
368
 
''',
369
 
                             'u1/hosts')
370
 
 
371
330
        self.run_bzr('resolved u1/hosts')
372
331
        # add a text change here to represent resolving the merge conflicts in
373
332
        # favour of a new version of the file not identical to either the u1
625
584
        properties = last_rev.properties
626
585
        self.assertEqual('John Doe\nJane Rey', properties['authors'])
627
586
 
628
 
    def test_commit_time(self):
629
 
        tree = self.make_branch_and_tree('tree')
630
 
        self.build_tree(['tree/hello.txt'])
631
 
        tree.add('hello.txt')
632
 
        out, err = self.run_bzr("commit -m hello "
633
 
            "--commit-time='2009-10-10 08:00:00 +0100' tree/hello.txt")
634
 
        last_rev = tree.branch.repository.get_revision(tree.last_revision())
635
 
        self.assertEqual(
636
 
            'Sat 2009-10-10 08:00:00 +0100',
637
 
            osutils.format_date(last_rev.timestamp, last_rev.timezone))
638
 
        
639
 
    def test_commit_time_bad_time(self):
640
 
        tree = self.make_branch_and_tree('tree')
641
 
        self.build_tree(['tree/hello.txt'])
642
 
        tree.add('hello.txt')
643
 
        out, err = self.run_bzr("commit -m hello "
644
 
            "--commit-time='NOT A TIME' tree/hello.txt", retcode=3)
645
 
        self.assertStartsWith(
646
 
            err, "bzr: ERROR: Could not parse --commit-time:")
647
 
 
648
587
    def test_partial_commit_with_renames_in_tree(self):
649
588
        # this test illustrates bug #140419
650
589
        t = self.make_branch_and_tree('.')
675
614
        self.assertContainsRe(err,
676
615
            r'^bzr: ERROR: Cannot lock.*readonly transport')
677
616
 
678
 
    def setup_editor(self):
 
617
    def test_commit_hook_template(self):
679
618
        # Test that commit template hooks work
 
619
        def restoreDefaults():
 
620
            msgeditor.hooks['commit_message_template'] = []
 
621
            osutils.set_or_unset_env('BZR_EDITOR', default_editor)
680
622
        if sys.platform == "win32":
681
623
            f = file('fed.bat', 'w')
682
624
            f.write('@rem dummy fed')
683
625
            f.close()
684
 
            osutils.set_or_unset_env('BZR_EDITOR', "fed.bat")
 
626
            default_editor = osutils.set_or_unset_env('BZR_EDITOR', "fed.bat")
685
627
        else:
686
628
            f = file('fed.sh', 'wb')
687
629
            f.write('#!/bin/sh\n')
688
630
            f.close()
689
631
            os.chmod('fed.sh', 0755)
690
 
            osutils.set_or_unset_env('BZR_EDITOR', "./fed.sh")
691
 
 
692
 
    def setup_commit_with_template(self):
693
 
        self.setup_editor()
 
632
            default_editor = osutils.set_or_unset_env('BZR_EDITOR', "./fed.sh")
 
633
        self.addCleanup(restoreDefaults)
694
634
        msgeditor.hooks.install_named_hook("commit_message_template",
695
635
                lambda commit_obj, msg: "save me some typing\n", None)
696
636
        tree = self.make_branch_and_tree('tree')
697
637
        self.build_tree(['tree/hello.txt'])
698
638
        tree.add('hello.txt')
699
 
        return tree
700
 
 
701
 
    def test_commit_hook_template_accepted(self):
702
 
        tree = self.setup_commit_with_template()
703
 
        out, err = self.run_bzr("commit tree/hello.txt", stdin="y\n")
 
639
        out, err = self.run_bzr("commit tree/hello.txt")
704
640
        last_rev = tree.branch.repository.get_revision(tree.last_revision())
705
641
        self.assertEqual('save me some typing\n', last_rev.message)
706
 
 
707
 
    def test_commit_hook_template_rejected(self):
708
 
        tree = self.setup_commit_with_template()
709
 
        expected = tree.last_revision()
710
 
        out, err = self.run_bzr_error(["empty commit message"],
711
 
            "commit tree/hello.txt", stdin="n\n")
712
 
        self.assertEqual(expected, tree.last_revision())