~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Robert Collins
  • Date: 2007-03-08 04:06:06 UTC
  • mfrom: (2323.1.1 integration)
  • mto: This revision was merged to the branch mainline in revision 2442.
  • Revision ID: robertc@robertcollins.net-20070308040606-84gsniv56huiyjt4
Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006 by Canonical Ltd
2
 
 
 
1
# Copyright (C) 2005, 2006 Canonical Ltd
 
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
5
5
# the Free Software Foundation; either version 2 of the License, or
6
6
# (at your option) any later version.
7
 
 
 
7
#
8
8
# This program is distributed in the hope that it will be useful,
9
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
11
# GNU General Public License for more details.
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
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21
21
import re
22
22
import sys
23
23
 
 
24
from bzrlib import (
 
25
    ignores,
 
26
    )
24
27
from bzrlib.branch import Branch
25
28
from bzrlib.bzrdir import BzrDir
26
29
from bzrlib.errors import BzrCommandError
33
36
    def test_05_empty_commit(self):
34
37
        """Commit of tree with no versioned files should fail"""
35
38
        # If forced, it should succeed, but this is not tested here.
36
 
        self.runbzr("init")
 
39
        self.run_bzr("init")
37
40
        self.build_tree(['hello.txt'])
38
 
        self.runbzr("commit -m empty", retcode=3)
 
41
        out,err = self.run_bzr("commit", "-m", "empty", retcode=3)
 
42
        self.assertEqual('', out)
 
43
        self.assertStartsWith(err, 'bzr: ERROR: no changes to commit.'
 
44
                                  ' use --unchanged to commit anyhow\n')
 
45
 
 
46
    def test_commit_success(self):
 
47
        """Successful commit should not leave behind a bzr-commit-* file"""
 
48
        self.run_bzr("init")
 
49
        self.run_bzr("commit", "--unchanged", "-m", "message")
 
50
        self.assertEqual('', self.capture('unknowns'))
 
51
 
 
52
        # same for unicode messages
 
53
        self.run_bzr("commit", "--unchanged", "-m", u'foo\xb5')
 
54
        self.assertEqual('', self.capture('unknowns'))
39
55
 
40
56
    def test_commit_with_path(self):
41
57
        """Commit tree with path of root specified"""
184
200
            other_tree.commit('modify all sample files and dirs.')
185
201
        finally:
186
202
            other_tree.unlock()
187
 
        self.merge(other_tree.branch, this_tree)
 
203
        this_tree.merge_from_branch(other_tree.branch)
188
204
        os.chdir('this')
189
205
        out,err = self.run_bzr("commit", "-m", "added")
190
206
        os.chdir('..')
284
300
        # version or the u2 version.
285
301
        self.build_tree_contents([('u1/hosts', 'merge resolution\n')])
286
302
        self.run_bzr('commit', '-m', 'checkin merge of the offline work from u1', 'u1')
 
303
 
 
304
    def test_commit_respects_spec_for_removals(self):
 
305
        """Commit with a file spec should only commit removals that match"""
 
306
        t = self.make_branch_and_tree('.')
 
307
        self.build_tree(['file-a', 'dir-a/', 'dir-a/file-b'])
 
308
        t.add(['file-a', 'dir-a', 'dir-a/file-b'])
 
309
        t.commit('Create')
 
310
        t.remove(['file-a', 'dir-a/file-b'])
 
311
        os.chdir('dir-a')
 
312
        result = self.run_bzr('commit', '.', '-m' 'removed file-b')[1]
 
313
        self.assertNotContainsRe(result, 'file-a')
 
314
        result = self.run_bzr('status')[0]
 
315
        self.assertContainsRe(result, 'removed:\n  file-a')
 
316
 
 
317
    def test_strict_commit(self):
 
318
        """Commit with --strict works if everything is known"""
 
319
        ignores._set_user_ignores([])
 
320
        tree = self.make_branch_and_tree('tree')
 
321
        self.build_tree(['tree/a'])
 
322
        tree.add('a')
 
323
        # A simple change should just work
 
324
        self.run_bzr('commit', '--strict', '-m', 'adding a',
 
325
                     working_dir='tree')
 
326
 
 
327
    def test_strict_commit_no_changes(self):
 
328
        """commit --strict gives "no changes" if there is nothing to commit"""
 
329
        tree = self.make_branch_and_tree('tree')
 
330
        self.build_tree(['tree/a'])
 
331
        tree.add('a')
 
332
        tree.commit('adding a')
 
333
 
 
334
        # With no changes, it should just be 'no changes'
 
335
        # Make sure that commit is failing because there is nothing to do
 
336
        self.run_bzr_error(['no changes to commit'],
 
337
                           'commit', '--strict', '-m', 'no changes',
 
338
                           working_dir='tree')
 
339
 
 
340
        # But --strict doesn't care if you supply --unchanged
 
341
        self.run_bzr('commit', '--strict', '--unchanged', '-m', 'no changes',
 
342
                     working_dir='tree')
 
343
 
 
344
    def test_strict_commit_unknown(self):
 
345
        """commit --strict fails if a file is unknown"""
 
346
        tree = self.make_branch_and_tree('tree')
 
347
        self.build_tree(['tree/a'])
 
348
        tree.add('a')
 
349
        tree.commit('adding a')
 
350
 
 
351
        # Add one file so there is a change, but forget the other
 
352
        self.build_tree(['tree/b', 'tree/c'])
 
353
        tree.add('b')
 
354
        self.run_bzr_error(['Commit refused because there are unknown files'],
 
355
                           'commit', '--strict', '-m', 'add b',
 
356
                           working_dir='tree')
 
357
 
 
358
        # --no-strict overrides --strict
 
359
        self.run_bzr('commit', '--strict', '-m', 'add b', '--no-strict',
 
360
                     working_dir='tree')