~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Aaron Bentley
  • Date: 2006-06-21 14:30:57 UTC
  • mfrom: (1801.1.1 bzr.dev)
  • mto: This revision was merged to the branch mainline in revision 1803.
  • Revision ID: abentley@panoramicfeedback.com-20060621143057-776e4b8d707e430e
Install benchmarks. (Jelmer Vernooij)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006 Canonical Ltd
 
1
# Copyright (C) 2006 by Canonical Ltd
2
2
# -*- coding: utf-8 -*-
3
 
#
 
3
 
4
4
# This program is free software; you can redistribute it and/or modify
5
5
# it under the terms of the GNU General Public License as published by
6
6
# the Free Software Foundation; either version 2 of the License, or
7
7
# (at your option) any later version.
8
 
#
 
8
 
9
9
# This program is distributed in the hope that it will be useful,
10
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
12
# GNU General Public License for more details.
13
 
#
 
13
 
14
14
# You should have received a copy of the GNU General Public License
15
15
# along with this program; if not, write to the Free Software
16
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
17
 
18
18
 
19
19
"""Tests for the update command of bzr."""
20
20
 
21
 
import os
22
21
 
23
 
from bzrlib import branch, bzrdir
 
22
from bzrlib.tests import TestSkipped
24
23
from bzrlib.tests.blackbox import ExternalBase
25
24
from bzrlib.workingtree import WorkingTree
26
25
 
28
27
class TestUpdate(ExternalBase):
29
28
 
30
29
    def test_update_standalone_trivial(self):
31
 
        self.make_branch_and_tree('.')
32
 
        out, err = self.run_bzr('update')
33
 
        self.assertEqual('Tree is up to date at revision 0.\n', err)
34
 
        self.assertEqual('', out)
35
 
 
36
 
    def test_update_standalone_trivial_with_alias_up(self):
37
 
        self.make_branch_and_tree('.')
38
 
        out, err = self.run_bzr('up')
39
 
        self.assertEqual('Tree is up to date at revision 0.\n', err)
 
30
        self.runbzr("init")
 
31
        out, err = self.runbzr('update')
 
32
        self.assertEqual('Tree is up to date.\n', err)
40
33
        self.assertEqual('', out)
41
34
 
42
35
    def test_update_up_to_date_light_checkout(self):
43
36
        self.make_branch_and_tree('branch')
44
 
        self.run_bzr('checkout --lightweight branch checkout')
45
 
        out, err = self.run_bzr('update checkout')
46
 
        self.assertEqual('Tree is up to date at revision 0.\n', err)
47
 
        self.assertEqual('', out)
48
 
 
49
 
    def test_update_up_to_date_checkout(self):
50
 
        self.make_branch_and_tree('branch')
51
 
        self.run_bzr('checkout branch checkout')
52
 
        out, err = self.run_bzr('update checkout')
53
 
        self.assertEqual('Tree is up to date at revision 0.\n', err)
 
37
        self.runbzr('checkout --lightweight branch checkout')
 
38
        out, err = self.runbzr('update checkout')
 
39
        self.assertEqual('Tree is up to date.\n', err)
54
40
        self.assertEqual('', out)
55
41
 
56
42
    def test_update_out_of_date_standalone_tree(self):
57
43
        # FIXME the default format has to change for this to pass
58
44
        # because it currently uses the branch last-revision marker.
 
45
        raise TestSkipped('default format too old')
59
46
        self.make_branch_and_tree('branch')
60
47
        # make a checkout
61
 
        self.run_bzr('checkout --lightweight branch checkout')
 
48
        self.runbzr('checkout --lightweight branch checkout')
62
49
        self.build_tree(['checkout/file'])
63
 
        self.run_bzr('add checkout/file')
64
 
        self.run_bzr('commit -m add-file checkout')
 
50
        self.runbzr('add checkout/file')
 
51
        self.runbzr('commit -m add-file checkout')
65
52
        # now branch should be out of date
66
 
        out,err = self.run_bzr('update branch')
67
 
        self.assertEqual('', out)
68
 
        self.assertContainsRe(err, '\+N  file')
69
 
        self.assertEndsWith(err, 'All changes applied successfully.\n'
70
 
                         'Updated to revision 1.\n')
 
53
        out,err = self.runbzr('update branch')
 
54
        self.assertEqual('Updated to revision 1.\n', out)
 
55
        self.assertEqual('', err)
71
56
        self.failUnlessExists('branch/file')
72
57
 
73
58
    def test_update_out_of_date_light_checkout(self):
74
59
        self.make_branch_and_tree('branch')
75
60
        # make two checkouts
76
 
        self.run_bzr('checkout --lightweight branch checkout')
77
 
        self.run_bzr('checkout --lightweight branch checkout2')
 
61
        self.runbzr('checkout --lightweight branch checkout')
 
62
        self.runbzr('checkout --lightweight branch checkout2')
78
63
        self.build_tree(['checkout/file'])
79
 
        self.run_bzr('add checkout/file')
80
 
        self.run_bzr('commit -m add-file checkout')
 
64
        self.runbzr('add checkout/file')
 
65
        self.runbzr('commit -m add-file checkout')
81
66
        # now checkout2 should be out of date
82
 
        out,err = self.run_bzr('update checkout2')
83
 
        self.assertContainsRe(err, '\+N  file')
84
 
        self.assertEndsWith(err, 'All changes applied successfully.\n'
85
 
                         'Updated to revision 1.\n')
 
67
        out,err = self.runbzr('update checkout2')
 
68
        self.assertEqual('All changes applied successfully.\n'
 
69
                         'Updated to revision 1.\n',
 
70
                         err)
86
71
        self.assertEqual('', out)
87
72
 
88
73
    def test_update_conflicts_returns_2(self):
89
74
        self.make_branch_and_tree('branch')
90
75
        # make two checkouts
91
 
        self.run_bzr('checkout --lightweight branch checkout')
 
76
        self.runbzr('checkout --lightweight branch checkout')
92
77
        self.build_tree(['checkout/file'])
93
 
        self.run_bzr('add checkout/file')
94
 
        self.run_bzr('commit -m add-file checkout')
95
 
        self.run_bzr('checkout --lightweight branch checkout2')
 
78
        self.runbzr('add checkout/file')
 
79
        self.runbzr('commit -m add-file checkout')
 
80
        self.runbzr('checkout --lightweight branch checkout2')
96
81
        # now alter file in checkout
97
82
        a_file = file('checkout/file', 'wt')
98
83
        a_file.write('Foo')
99
84
        a_file.close()
100
 
        self.run_bzr('commit -m checnge-file checkout')
 
85
        self.runbzr('commit -m checnge-file checkout')
101
86
        # now checkout2 should be out of date
102
87
        # make a local change to file
103
88
        a_file = file('checkout2/file', 'wt')
104
89
        a_file.write('Bar')
105
90
        a_file.close()
106
 
        out,err = self.run_bzr('update checkout2', retcode=1)
107
 
        self.assertContainsRe(err, 'M  file')
 
91
        out,err = self.runbzr('update checkout2', retcode=1)
108
92
        self.assertEqual(['1 conflicts encountered.',
109
93
                          'Updated to revision 2.'],
110
 
                         err.split('\n')[-3:-1])
 
94
                         err.split('\n')[1:3])
111
95
        self.assertContainsRe(err, 'Text conflict in file\n')
112
96
        self.assertEqual('', out)
113
97
 
114
98
    def test_smoke_update_checkout_bound_branch_local_commits(self):
115
99
        # smoke test for doing an update of a checkout of a bound
116
100
        # branch with local commits.
117
 
        master = self.make_branch_and_tree('master')
 
101
        self.make_branch_and_tree('master')
118
102
        # make a bound branch
119
 
        self.run_bzr('checkout master child')
120
 
        # get an object form of child
121
 
        child = WorkingTree.open('child')
 
103
        self.run_bzr('checkout', 'master', 'child')
122
104
        # check that out
123
 
        self.run_bzr('checkout --lightweight child checkout')
124
 
        # get an object form of the checkout to manipulate
125
 
        wt = WorkingTree.open('checkout')
 
105
        self.run_bzr('checkout', '--lightweight', 'child', 'checkout')
126
106
        # change master
127
107
        a_file = file('master/file', 'wt')
128
108
        a_file.write('Foo')
129
109
        a_file.close()
130
 
        master.add(['file'])
131
 
        master_tip = master.commit('add file')
 
110
        self.run_bzr('add', 'master')
 
111
        self.run_bzr('commit', '-m', 'add file', 'master')
132
112
        # change child
133
113
        a_file = file('child/file_b', 'wt')
134
114
        a_file.write('Foo')
135
115
        a_file.close()
136
 
        child.add(['file_b'])
137
 
        child_tip = child.commit('add file_b', local=True)
 
116
        self.run_bzr('add', 'child')
 
117
        self.run_bzr('commit', '--local', '-m', 'add file_b', 'child')
138
118
        # check checkout
139
119
        a_file = file('checkout/file_c', 'wt')
140
120
        a_file.write('Foo')
141
121
        a_file.close()
142
 
        wt.add(['file_c'])
 
122
        self.run_bzr('add', 'checkout')
143
123
 
144
124
        # now, update checkout ->
145
125
        # get all three files and a pending merge.
146
 
        out, err = self.run_bzr('update checkout')
147
 
        self.assertEqual('', out)
148
 
        self.assertContainsRe(err, '\+N  file')
149
 
        self.assertContainsRe(err, '\+N  file_b')
150
 
        self.assertContainsRe(err, 'Updated to revision 1.\n'
151
 
                                   'Your local commits will now show as'
152
 
                                   ' pending merges')
153
 
        self.assertEqual([master_tip, child_tip], wt.get_parent_ids())
 
126
        self.run_bzr('update', 'checkout')
 
127
        wt = WorkingTree.open('checkout')
 
128
        self.assertNotEqual([], wt.pending_merges())
154
129
        self.failUnlessExists('checkout/file')
155
130
        self.failUnlessExists('checkout/file_b')
156
131
        self.failUnlessExists('checkout/file_c')
157
132
        self.assertTrue(wt.has_filename('file_c'))
158
 
 
159
 
    def test_update_with_merges(self):
160
 
        # Test that 'bzr update' works correctly when you have
161
 
        # an update in the master tree, and a lightweight checkout
162
 
        # which has merged another branch
163
 
        master = self.make_branch_and_tree('master')
164
 
        self.build_tree(['master/file'])
165
 
        master.add(['file'])
166
 
        master.commit('one', rev_id='m1')
167
 
 
168
 
        self.build_tree(['checkout1/'])
169
 
        checkout_dir = bzrdir.BzrDirMetaFormat1().initialize('checkout1')
170
 
        branch.BranchReferenceFormat().initialize(checkout_dir, master.branch)
171
 
        checkout1 = checkout_dir.create_workingtree('m1')
172
 
 
173
 
        # Create a second branch, with an extra commit
174
 
        other = master.bzrdir.sprout('other').open_workingtree()
175
 
        self.build_tree(['other/file2'])
176
 
        other.add(['file2'])
177
 
        other.commit('other2', rev_id='o2')
178
 
 
179
 
        # Create a new commit in the master branch
180
 
        self.build_tree(['master/file3'])
181
 
        master.add(['file3'])
182
 
        master.commit('f3', rev_id='m2')
183
 
 
184
 
        # Merge the other branch into checkout
185
 
        os.chdir('checkout1')
186
 
        self.run_bzr('merge ../other')
187
 
 
188
 
        self.assertEqual(['o2'], checkout1.get_parent_ids()[1:])
189
 
 
190
 
        # At this point, 'commit' should fail, because we are out of date
191
 
        self.run_bzr_error(["please run 'bzr update'"],
192
 
                           'commit -m merged')
193
 
 
194
 
        # This should not report about local commits being pending
195
 
        # merges, because they were real merges
196
 
        out, err = self.run_bzr('update')
197
 
        self.assertEqual('', out)
198
 
        self.assertEndsWith(err, 'All changes applied successfully.\n'
199
 
                         'Updated to revision 2.\n')
200
 
        self.assertContainsRe(err, r'\+N  file3')
201
 
        # The pending merges should still be there
202
 
        self.assertEqual(['o2'], checkout1.get_parent_ids()[1:])
203
 
 
204
 
    def test_readonly_lightweight_update(self):
205
 
        """Update a light checkout of a readonly branch"""
206
 
        tree = self.make_branch_and_tree('branch')
207
 
        readonly_branch = branch.Branch.open(self.get_readonly_url('branch'))
208
 
        checkout = readonly_branch.create_checkout('checkout',
209
 
                                                   lightweight=True)
210
 
        tree.commit('empty commit')
211
 
        self.run_bzr('update checkout')