~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Vincent Ladeuil
  • Date: 2010-03-10 09:33:04 UTC
  • mto: (5082.1.1 integration)
  • mto: This revision was merged to the branch mainline in revision 5083.
  • Revision ID: v.ladeuil+lp@free.fr-20100310093304-4245t4tazd4sxoav
Cleanup test from overly cautious checks.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2012, 2016 Canonical Ltd
 
1
# Copyright (C) 2006-2010 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 update command of bzr."""
19
19
 
20
20
import os
 
21
import re
21
22
 
22
23
from bzrlib import (
23
24
    branch,
24
25
    bzrdir,
25
26
    osutils,
26
27
    tests,
 
28
    urlutils,
27
29
    workingtree,
28
30
    )
29
31
from bzrlib.tests.script import ScriptRunner
88
90
Updated to revision 1 of branch %s
89
91
""" % osutils.pathjoin(self.test_dir, 'branch',),
90
92
                         err)
91
 
        self.assertPathExists('branch/file')
 
93
        self.failUnlessExists('branch/file')
92
94
 
93
95
    def test_update_out_of_date_light_checkout(self):
94
96
        self.make_branch_and_tree('branch')
138
140
        # smoke test for doing an update of a checkout of a bound
139
141
        # branch with local commits.
140
142
        master = self.make_branch_and_tree('master')
141
 
        master.commit('first commit')
142
143
        # make a bound branch
143
144
        self.run_bzr('checkout master child')
 
145
        # get an object form of child
 
146
        child = workingtree.WorkingTree.open('child')
144
147
        # check that out
145
148
        self.run_bzr('checkout --lightweight child checkout')
146
149
        # get an object form of the checkout to manipulate
155
158
        a_file = file('child/file_b', 'wt')
156
159
        a_file.write('Foo')
157
160
        a_file.close()
158
 
        # get an object form of child
159
 
        child = workingtree.WorkingTree.open('child')
160
161
        child.add(['file_b'])
161
162
        child_tip = child.commit('add file_b', local=True)
162
163
        # check checkout
173
174
All changes applied successfully.
174
175
+N  file
175
176
All changes applied successfully.
176
 
Updated to revision 2 of branch %s
 
177
Updated to revision 1 of branch %s
177
178
Your local commits will now show as pending merges with 'bzr status', and can be committed with 'bzr commit'.
178
179
""" % osutils.pathjoin(self.test_dir, 'master',),
179
180
                         err)
180
181
        self.assertEqual([master_tip, child_tip], wt.get_parent_ids())
181
 
        self.assertPathExists('checkout/file')
182
 
        self.assertPathExists('checkout/file_b')
183
 
        self.assertPathExists('checkout/file_c')
 
182
        self.failUnlessExists('checkout/file')
 
183
        self.failUnlessExists('checkout/file_b')
 
184
        self.failUnlessExists('checkout/file_c')
184
185
        self.assertTrue(wt.has_filename('file_c'))
185
186
 
186
187
    def test_update_with_merges(self):
194
195
 
195
196
        self.build_tree(['checkout1/'])
196
197
        checkout_dir = bzrdir.BzrDirMetaFormat1().initialize('checkout1')
197
 
        checkout_dir.set_branch_reference(master.branch)
 
198
        branch.BranchReferenceFormat().initialize(checkout_dir, master.branch)
198
199
        checkout1 = checkout_dir.create_workingtree('m1')
199
200
 
200
201
        # Create a second branch, with an extra commit
239
240
        tree.commit('empty commit')
240
241
        self.run_bzr('update checkout')
241
242
 
242
 
    def test_update_with_merge_merged_to_master(self):
243
 
        # Test that 'bzr update' works correctly when you have
244
 
        # an update in the master tree, and a [lightweight or otherwise]
245
 
        # checkout which has merge a revision merged to master already.
246
 
        master = self.make_branch_and_tree('master')
247
 
        self.build_tree(['master/file'])
248
 
        master.add(['file'])
249
 
        master.commit('one', rev_id='m1')
250
 
 
251
 
        self.build_tree(['checkout1/'])
252
 
        checkout_dir = bzrdir.BzrDirMetaFormat1().initialize('checkout1')
253
 
        checkout_dir.set_branch_reference(master.branch)
254
 
        checkout1 = checkout_dir.create_workingtree('m1')
255
 
 
256
 
        # Create a second branch, with an extra commit
257
 
        other = master.bzrdir.sprout('other').open_workingtree()
258
 
        self.build_tree(['other/file2'])
259
 
        other.add(['file2'])
260
 
        other.commit('other2', rev_id='o2')
261
 
 
262
 
        # Merge the other branch into checkout -  'start reviewing a patch'
263
 
        checkout1.merge_from_branch(other.branch)
264
 
        self.assertEqual(['o2'], checkout1.get_parent_ids()[1:])
265
 
 
266
 
        # Create a new commit in the master branch - 'someone else lands its'
267
 
        master.merge_from_branch(other.branch)
268
 
        master.commit('f3', rev_id='m2')
269
 
 
270
 
        # This should not report about local commits being pending
271
 
        # merges, because they were real merges (but are now gone).
272
 
        # It should perhaps report on them.
273
 
        out, err = self.run_bzr('update', working_dir='checkout1')
274
 
        self.assertEqual('', out)
275
 
        self.assertEqualDiff('''All changes applied successfully.
276
 
Updated to revision 2 of branch %s
277
 
''' % osutils.pathjoin(self.test_dir, 'master',),
278
 
                         err)
279
 
        # The pending merges should still be there
280
 
        self.assertEqual([], checkout1.get_parent_ids()[1:])
281
 
 
282
243
    def test_update_dash_r(self):
283
244
        master = self.make_branch_and_tree('master')
284
245
        os.chdir('master')
296
257
2>All changes applied successfully.
297
258
2>Updated to revision 1 of .../master
298
259
''')
299
 
        self.assertPathExists('./file1')
300
 
        self.assertPathDoesNotExist('./file2')
301
 
        self.assertEqual(['m1'], master.get_parent_ids())
 
260
        self.failUnlessExists('./file1')
 
261
        self.failIfExists('./file2')
 
262
        self.assertEquals(['m1'], master.get_parent_ids())
302
263
 
303
264
    def test_update_dash_r_outside_history(self):
304
 
        """Ensure that we can update -r to dotted revisions.
305
 
        """
306
265
        master = self.make_branch_and_tree('master')
307
266
        self.build_tree(['master/file1'])
308
267
        master.add(['file1'])
309
268
        master.commit('one', rev_id='m1')
310
269
 
311
 
        # Create a second branch, with extra commits
 
270
        # Create a second branch, with an extra commit
312
271
        other = master.bzrdir.sprout('other').open_workingtree()
313
 
        self.build_tree(['other/file2', 'other/file3'])
 
272
        self.build_tree(['other/file2'])
314
273
        other.add(['file2'])
315
274
        other.commit('other2', rev_id='o2')
316
 
        other.add(['file3'])
317
 
        other.commit('other3', rev_id='o3')
318
275
 
319
276
        os.chdir('master')
320
277
        self.run_bzr('merge ../other')
321
278
        master.commit('merge', rev_id='merge')
322
279
 
323
 
        # Switch to o2. file3 was added only in o3 and should be deleted.
324
 
        out, err = self.run_bzr('update -r revid:o2')
325
 
        self.assertContainsRe(err, '-D\s+file3')
326
 
        self.assertContainsRe(err, 'All changes applied successfully\.')
327
 
        self.assertContainsRe(err, 'Updated to revision 1.1.1 of branch .*')
328
 
 
329
 
        # Switch back to latest
330
 
        out, err = self.run_bzr('update')
331
 
        self.assertContainsRe(err, '\+N\s+file3')
332
 
        self.assertContainsRe(err, 'All changes applied successfully\.')
333
 
        self.assertContainsRe(err, 'Updated to revision 2 of branch .*')
 
280
        out, err = self.run_bzr('update -r revid:o2',
 
281
                                retcode=3)
 
282
        self.assertEqual('', out)
 
283
        self.assertEqual('bzr: ERROR: branch has no revision o2\n'
 
284
                         'bzr update --revision only works'
 
285
                         ' for a revision in the branch history\n',
 
286
                         err)
334
287
 
335
288
    def test_update_dash_r_in_master(self):
336
289
        # Test that 'bzr update' works correctly when you have
356
309
2>Updated to revision 2 of branch .../master
357
310
''')
358
311
 
359
 
    def test_update_show_base(self):
360
 
        """bzr update support --show-base
361
 
 
362
 
        see https://bugs.launchpad.net/bzr/+bug/202374"""
363
 
 
364
 
        tree=self.make_branch_and_tree('.')
365
 
 
366
 
        f = open('hello','wt')
367
 
        f.write('foo')
368
 
        f.close()
369
 
        tree.add('hello')
370
 
        tree.commit('fie')
371
 
 
372
 
        f = open('hello','wt')
373
 
        f.write('fee')
374
 
        f.close()
375
 
        tree.commit('fee')
376
 
 
377
 
        #tree.update() gives no such revision, so ...
378
 
        self.run_bzr(['update','-r1'])
379
 
 
380
 
        #create conflict
381
 
        f = open('hello','wt')
382
 
        f.write('fie')
383
 
        f.close()
384
 
 
385
 
        out, err = self.run_bzr(['update','--show-base'],retcode=1)
386
 
 
387
 
        # check for conflict notification
388
 
        self.assertContainsString(err,
389
 
                                  ' M  hello\nText conflict in hello\n1 conflicts encountered.\n')
390
 
        
391
 
        self.assertEqualDiff('<<<<<<< TREE\n'
392
 
                             'fie||||||| BASE-REVISION\n'
393
 
                             'foo=======\n'
394
 
                             'fee>>>>>>> MERGE-SOURCE\n',
395
 
                             open('hello').read())
396
 
 
397
312
    def test_update_checkout_prevent_double_merge(self):
398
313
        """"Launchpad bug 113809 in bzr "update performs two merges"
399
314
        https://launchpad.net/bugs/113809"""
452
367
>>>>>>> MERGE-SOURCE
453
368
''',
454
369
                             'lightweight/file')
455
 
 
456
 
 
457
 
    def test_no_upgrade_single_file(self):
458
 
        """There's one basis revision per tree.
459
 
 
460
 
        Since you can't actually change the basis for a single file at the
461
 
        moment, we don't let you think you can.
462
 
 
463
 
        See bug 557886.
464
 
        """
465
 
        self.make_branch_and_tree('.')
466
 
        self.build_tree_contents([('a/',),
467
 
            ('a/file', 'content')])
468
 
        sr = ScriptRunner()
469
 
        sr.run_script(self, '''
470
 
            $ bzr update ./a
471
 
            2>bzr: ERROR: bzr update can only update a whole tree, not a file or subdirectory
472
 
            $ bzr update ./a/file
473
 
            2>bzr: ERROR: bzr update can only update a whole tree, not a file or subdirectory
474
 
            $ bzr update .
475
 
            2>Tree is up to date at revision 0 of branch ...
476
 
            $ cd a
477
 
            $ bzr update .
478
 
            2>bzr: ERROR: bzr update can only update a whole tree, not a file or subdirectory
479
 
            # however, you can update the whole tree from a subdirectory
480
 
            $ bzr update
481
 
            2>Tree is up to date at revision 0 of branch ...
482
 
            ''')