~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Vincent Ladeuil
  • Date: 2011-12-21 14:25:26 UTC
  • mto: This revision was merged to the branch mainline in revision 6397.
  • Revision ID: v.ladeuil+lp@free.fr-20111221142526-pnwau0xnalimujts
Provides MemoryStack to simplify configuration setup in tests

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006, 2009 Canonical Ltd
 
1
# Copyright (C) 2006, 2007, 2009, 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
16
16
 
17
17
"""Tests for the 'checkout' CLI command."""
18
18
 
19
 
from cStringIO import StringIO
20
19
import os
21
 
import re
22
 
import shutil
23
 
import sys
24
20
 
25
21
from bzrlib import (
26
22
    branch as _mod_branch,
28
24
    errors,
29
25
    workingtree,
30
26
    )
31
 
from bzrlib.tests.blackbox import (
32
 
    ExternalBase,
33
 
    )
34
27
from bzrlib.tests import (
 
28
    TestCaseWithTransport,
 
29
    )
 
30
from bzrlib.tests.matchers import ContainsNoVfsCalls
 
31
from bzrlib.tests.features import (
35
32
    HardlinkFeature,
36
 
    KnownFailure,
37
33
    )
38
34
 
39
35
 
40
 
class TestCheckout(ExternalBase):
 
36
class TestCheckout(TestCaseWithTransport):
41
37
 
42
38
    def setUp(self):
43
39
        super(TestCheckout, self).setUp()
64
60
                         result.open_branch().bzrdir.root_transport.base)
65
61
 
66
62
    def test_checkout_dash_r(self):
67
 
        self.run_bzr('checkout -r -2 branch checkout')
 
63
        out, err = self.run_bzr(['checkout', '-r', '-2', 'branch', 'checkout'])
68
64
        # the working tree should now be at revision '1' with the content
69
65
        # from 1.
70
66
        result = bzrdir.BzrDir.open('checkout')
71
67
        self.assertEqual(['1'], result.open_workingtree().get_parent_ids())
72
 
        self.failIfExists('checkout/added_in_2')
 
68
        self.assertPathDoesNotExist('checkout/added_in_2')
73
69
 
74
70
    def test_checkout_light_dash_r(self):
75
 
        self.run_bzr('checkout --lightweight -r -2 branch checkout')
 
71
        out, err = self.run_bzr(['checkout','--lightweight', '-r', '-2',
 
72
            'branch', 'checkout'])
76
73
        # the working tree should now be at revision '1' with the content
77
74
        # from 1.
78
75
        result = bzrdir.BzrDir.open('checkout')
79
76
        self.assertEqual(['1'], result.open_workingtree().get_parent_ids())
80
 
        self.failIfExists('checkout/added_in_2')
 
77
        self.assertPathDoesNotExist('checkout/added_in_2')
81
78
 
82
79
    def test_checkout_reconstitutes_working_trees(self):
83
80
        # doing a 'bzr checkout' in the directory of a branch with no tree
123
120
            cmd.append('--lightweight')
124
121
        self.run_bzr('checkout source target')
125
122
        # files with unique content should be moved
126
 
        self.failUnlessExists('target/file2.moved')
 
123
        self.assertPathExists('target/file2.moved')
127
124
        # files with content matching tree should not be moved
128
 
        self.failIfExists('target/file1.moved')
 
125
        self.assertPathDoesNotExist('target/file1.moved')
129
126
 
130
127
    def test_checkout_existing_dir_heavy(self):
131
128
        self._test_checkout_existing_dir(False)
155
152
        self.build_tree(['source/file1'])
156
153
        source.add('file1')
157
154
        source.commit('added file')
158
 
        out, err = self.run_bzr(['checkout', 'source', 'target',
159
 
            '--files-from', 'source',
160
 
            '--hardlink'])
 
155
        out, err = self.run_bzr('checkout source target --hardlink')
161
156
        source_stat = os.stat('source/file1')
162
157
        target_stat = os.stat('target/file1')
163
158
        self.assertEqual(source_stat, target_stat)
 
159
 
 
160
    def test_checkout_hardlink_files_from(self):
 
161
        self.requireFeature(HardlinkFeature)
 
162
        source = self.make_branch_and_tree('source')
 
163
        self.build_tree(['source/file1'])
 
164
        source.add('file1')
 
165
        source.commit('added file')
 
166
        source.bzrdir.sprout('second')
 
167
        out, err = self.run_bzr('checkout source target --hardlink'
 
168
                                ' --files-from second')
 
169
        second_stat = os.stat('second/file1')
 
170
        target_stat = os.stat('target/file1')
 
171
        self.assertEqual(second_stat, target_stat)
 
172
 
 
173
 
 
174
class TestSmartServerCheckout(TestCaseWithTransport):
 
175
 
 
176
    def test_heavyweight_checkout(self):
 
177
        self.setup_smart_server_with_call_log()
 
178
        t = self.make_branch_and_tree('from')
 
179
        for count in range(9):
 
180
            t.commit(message='commit %d' % count)
 
181
        self.reset_smart_call_log()
 
182
        out, err = self.run_bzr(['checkout', self.get_url('from'), 'target'])
 
183
        # This figure represent the amount of work to perform this use case. It
 
184
        # is entirely ok to reduce this number if a test fails due to rpc_count
 
185
        # being too low. If rpc_count increases, more network roundtrips have
 
186
        # become necessary for this use case. Please do not adjust this number
 
187
        # upwards without agreement from bzr's network support maintainers.
 
188
        self.assertLength(10, self.hpss_calls)
 
189
        self.assertThat(self.hpss_calls, ContainsNoVfsCalls)
 
190
 
 
191
    def test_lightweight_checkout(self):
 
192
        self.setup_smart_server_with_call_log()
 
193
        t = self.make_branch_and_tree('from')
 
194
        for count in range(9):
 
195
            t.commit(message='commit %d' % count)
 
196
        self.reset_smart_call_log()
 
197
        out, err = self.run_bzr(['checkout', '--lightweight', self.get_url('from'),
 
198
            'target'])
 
199
        # This figure represent the amount of work to perform this use case. It
 
200
        # is entirely ok to reduce this number if a test fails due to rpc_count
 
201
        # being too low. If rpc_count increases, more network roundtrips have
 
202
        # become necessary for this use case. Please do not adjust this number
 
203
        # upwards without agreement from bzr's network support maintainers.
 
204
        self.assertLength(15, self.hpss_calls)
 
205
        self.assertThat(self.hpss_calls, ContainsNoVfsCalls)