~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Alexander Belchenko
  • Date: 2006-07-31 16:12:57 UTC
  • mto: (1711.2.111 jam-integration)
  • mto: This revision was merged to the branch mainline in revision 1906.
  • Revision ID: bialix@ukr.net-20060731161257-91a231523255332c
new official bzr.ico

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