~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Alexander Belchenko
  • Date: 2006-07-30 16:43:12 UTC
  • mto: (1711.2.111 jam-integration)
  • mto: This revision was merged to the branch mainline in revision 1906.
  • Revision ID: bialix@ukr.net-20060730164312-b025fd3ff0cee59e
rename  gpl.txt => COPYING.txt

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2007 Canonical Ltd
 
1
# Copyright (C) 2005 by Canonical Ltd
 
2
# -*- coding: utf-8 -*-
2
3
#
3
4
# This program is free software; you can redistribute it and/or modify
4
5
# it under the terms of the GNU General Public License as published by
19
20
 
20
21
import os
21
22
 
22
 
from bzrlib import (
23
 
    errors,
24
 
    urlutils,
25
 
    )
 
23
import bzrlib
26
24
from bzrlib.branch import Branch
27
25
from bzrlib.bzrdir import BzrDirMetaFormat1
28
26
from bzrlib.osutils import abspath
29
 
from bzrlib.repofmt.knitrepo import RepositoryFormatKnit1
 
27
from bzrlib.repository import RepositoryFormatKnit1
30
28
from bzrlib.tests.blackbox import ExternalBase
31
29
from bzrlib.uncommit import uncommit
32
30
from bzrlib.urlutils import local_path_from_url
58
56
 
59
57
        # test push for failure without push location set
60
58
        os.chdir('branch_a')
61
 
        out = self.run_bzr('push', retcode=3)
 
59
        out = self.runbzr('push', retcode=3)
62
60
        self.assertEquals(out,
63
61
                ('','bzr: ERROR: No push location known or specified.\n'))
64
62
 
65
63
        # test not remembered if cannot actually push
66
 
        self.run_bzr('push ../path/which/doesnt/exist', retcode=3)
 
64
        self.run_bzr('push', '../path/which/doesnt/exist', retcode=3)
67
65
        out = self.run_bzr('push', retcode=3)
68
66
        self.assertEquals(
69
67
                ('', 'bzr: ERROR: No push location known or specified.\n'),
70
68
                out)
71
69
 
72
70
        # test implicit --remember when no push location set, push fails
73
 
        out = self.run_bzr('push ../branch_b', retcode=3)
 
71
        out = self.run_bzr('push', '../branch_b', retcode=3)
74
72
        self.assertEquals(out,
75
73
                ('','bzr: ERROR: These branches have diverged.  '
76
 
                    'Try using "merge" and then "push".\n'))
 
74
                    'Try a merge then push with overwrite.\n'))
77
75
        self.assertEquals(abspath(branch_a.get_push_location()),
78
76
                          abspath(branch_b.bzrdir.root_transport.base))
79
77
 
80
78
        # test implicit --remember after resolving previous failure
81
79
        uncommit(branch=branch_b, tree=tree_b)
82
80
        transport.delete('branch_b/c')
83
 
        out, err = self.run_bzr('push')
 
81
        out = self.run_bzr('push')
84
82
        path = branch_a.get_push_location()
85
 
        self.assertEquals(out,
86
 
                          'Using saved location: %s\n' 
87
 
                          'Pushed up to revision 2.\n'
88
 
                          % local_path_from_url(path))
89
 
        self.assertEqual(err,
90
 
                         'All changes applied successfully.\n')
 
83
        self.assertEquals(('Using saved location: %s\n' 
 
84
                           % (local_path_from_url(path),)
 
85
                          , 'All changes applied successfully.\n'
 
86
                            '1 revision(s) pushed.\n'), out)
91
87
        self.assertEqual(path,
92
88
                         branch_b.bzrdir.root_transport.base)
93
89
        # test explicit --remember
94
 
        self.run_bzr('push ../branch_c --remember')
 
90
        self.run_bzr('push', '../branch_c', '--remember')
95
91
        self.assertEquals(branch_a.get_push_location(),
96
92
                          branch_c.bzrdir.root_transport.base)
97
93
    
98
94
    def test_push_without_tree(self):
99
95
        # bzr push from a branch that does not have a checkout should work.
100
96
        b = self.make_branch('.')
101
 
        out, err = self.run_bzr('push pushed-location')
 
97
        out, err = self.run_bzr('push', 'pushed-location')
102
98
        self.assertEqual('', out)
103
 
        self.assertEqual('Created new branch.\n', err)
104
 
        b2 = Branch.open('pushed-location')
 
99
        self.assertEqual('0 revision(s) pushed.\n', err)
 
100
        b2 = bzrlib.branch.Branch.open('pushed-location')
105
101
        self.assertEndsWith(b2.base, 'pushed-location/')
106
102
 
107
103
    def test_push_new_branch_revision_count(self):
113
109
        t.add('file')
114
110
        t.commit('commit 1')
115
111
        os.chdir('tree')
116
 
        out, err = self.run_bzr('push pushed-to')
 
112
        out, err = self.run_bzr('push', 'pushed-to')
117
113
        os.chdir('..')
118
114
        self.assertEqual('', out)
119
 
        self.assertEqual('Created new branch.\n', err)
 
115
        self.assertEqual('1 revision(s) pushed.\n', err)
120
116
 
121
117
    def test_push_only_pushes_history(self):
122
118
        # Knit branches should only push the history for the current revision.
150
146
        # Now that we have a repository with shared files, make sure
151
147
        # that things aren't copied out by a 'push'
152
148
        os.chdir('repo/b')
153
 
        self.run_bzr('push ../../push-b')
 
149
        self.run_bzr('push', '../../push-b')
154
150
        pushed_tree = WorkingTree.open('../../push-b')
155
151
        pushed_repo = pushed_tree.branch.repository
156
152
        self.assertFalse(pushed_repo.has_revision('a-1'))
163
159
        self.build_tree(['filename'])
164
160
        t.add('filename', 'funky-chars<>%&;"\'')
165
161
        t.commit('commit filename')
166
 
        self.run_bzr('push ../new-tree')
167
 
 
168
 
    def test_push_dash_d(self):
169
 
        t = self.make_branch_and_tree('from')
170
 
        t.commit(allow_pointless=True,
171
 
                message='first commit')
172
 
        self.run_bzr('push -d from to-one')
173
 
        self.failUnlessExists('to-one')
174
 
        self.run_bzr('push -d %s %s' 
175
 
            % tuple(map(urlutils.local_path_to_url, ['from', 'to-two'])))
176
 
        self.failUnlessExists('to-two')
177
 
 
178
 
    def create_simple_tree(self):
179
 
        tree = self.make_branch_and_tree('tree')
180
 
        self.build_tree(['tree/a'])
181
 
        tree.add(['a'], ['a-id'])
182
 
        tree.commit('one', rev_id='r1')
183
 
        return tree
184
 
 
185
 
    def test_push_create_prefix(self):
186
 
        """'bzr push --create-prefix' will create leading directories."""
187
 
        tree = self.create_simple_tree()
188
 
 
189
 
        self.run_bzr_error(['Parent directory of ../new/tree does not exist'],
190
 
                           'push ../new/tree',
191
 
                           working_dir='tree')
192
 
        self.run_bzr('push ../new/tree --create-prefix',
193
 
                     working_dir='tree')
194
 
        new_tree = WorkingTree.open('new/tree')
195
 
        self.assertEqual(tree.last_revision(), new_tree.last_revision())
196
 
        self.failUnlessExists('new/tree/a')
197
 
 
198
 
    def test_push_use_existing(self):
199
 
        """'bzr push --use-existing-dir' can push into an existing dir.
200
 
 
201
 
        By default, 'bzr push' will not use an existing, non-versioned dir.
202
 
        """
203
 
        tree = self.create_simple_tree()
204
 
        self.build_tree(['target/'])
205
 
 
206
 
        self.run_bzr_error(['Target directory ../target already exists',
207
 
                            'Supply --use-existing-dir',
208
 
                           ],
209
 
                           'push ../target', working_dir='tree')
210
 
 
211
 
        self.run_bzr('push --use-existing-dir ../target',
212
 
                     working_dir='tree')
213
 
 
214
 
        new_tree = WorkingTree.open('target')
215
 
        self.assertEqual(tree.last_revision(), new_tree.last_revision())
216
 
        # The push should have created target/a
217
 
        self.failUnlessExists('target/a')
218
 
 
219
 
    def test_push_onto_repo(self):
220
 
        """We should be able to 'bzr push' into an existing bzrdir."""
221
 
        tree = self.create_simple_tree()
222
 
        repo = self.make_repository('repo', shared=True)
223
 
 
224
 
        self.run_bzr('push ../repo',
225
 
                     working_dir='tree')
226
 
 
227
 
        # Pushing onto an existing bzrdir will create a repository and
228
 
        # branch as needed, but will only create a working tree if there was
229
 
        # no BzrDir before.
230
 
        self.assertRaises(errors.NoWorkingTree, WorkingTree.open, 'repo')
231
 
        new_branch = Branch.open('repo')
232
 
        self.assertEqual(tree.last_revision(), new_branch.last_revision())
233
 
 
234
 
    def test_push_onto_just_bzrdir(self):
235
 
        """We don't handle when the target is just a bzrdir.
236
 
 
237
 
        Because you shouldn't be able to create *just* a bzrdir in the wild.
238
 
        """
239
 
        # TODO: jam 20070109 Maybe it would be better to create the repository
240
 
        #       if at this point
241
 
        tree = self.create_simple_tree()
242
 
        a_bzrdir = self.make_bzrdir('dir')
243
 
 
244
 
        self.run_bzr_error(['At ../dir you have a valid .bzr control'],
245
 
                'push ../dir',
246
 
                working_dir='tree')
 
162
        self.run_bzr('push', '../new-tree')