/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

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

  • Committer: Martin Pool
  • Date: 2006-10-06 02:04:17 UTC
  • mfrom: (1908.10.1 bench_usecases.merge2)
  • mto: This revision was merged to the branch mainline in revision 2068.
  • Revision ID: mbp@sourcefrog.net-20061006020417-4949ca86f4417a4d
merge additional fix from cfbolz

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# Copyright (C) 2005 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
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
17
 
18
18
 
19
 
"""Black-box tests for bzr push.
20
 
"""
 
19
"""Black-box tests for bzr push."""
21
20
 
22
21
import os
23
22
 
 
23
import bzrlib
24
24
from bzrlib.branch import Branch
 
25
from bzrlib.bzrdir import BzrDirMetaFormat1
25
26
from bzrlib.osutils import abspath
 
27
from bzrlib.repository import RepositoryFormatKnit1
26
28
from bzrlib.tests.blackbox import ExternalBase
27
29
from bzrlib.uncommit import uncommit
 
30
from bzrlib.urlutils import local_path_from_url
 
31
from bzrlib.workingtree import WorkingTree
28
32
 
29
33
 
30
34
class TestPush(ExternalBase):
37
41
        self.build_tree(['branch_a/a'])
38
42
        tree_a.add('a')
39
43
        tree_a.commit('commit a')
40
 
        branch_b = branch_a.bzrdir.sprout('branch_b').open_branch()
41
 
        tree_b = branch_b.bzrdir.open_workingtree()
42
 
        branch_c = branch_a.bzrdir.sprout('branch_c').open_branch()
43
 
        tree_c = branch_c.bzrdir.open_workingtree()
 
44
        tree_b = branch_a.bzrdir.sprout('branch_b').open_workingtree()
 
45
        branch_b = tree_b.branch
 
46
        tree_c = branch_a.bzrdir.sprout('branch_c').open_workingtree()
 
47
        branch_c = tree_c.branch
44
48
        self.build_tree(['branch_a/b'])
45
49
        tree_a.add('b')
46
50
        tree_a.commit('commit b')
49
53
        tree_b.commit('commit c')
50
54
        # initial push location must be empty
51
55
        self.assertEqual(None, branch_b.get_push_location())
 
56
 
52
57
        # test push for failure without push location set
53
58
        os.chdir('branch_a')
54
59
        out = self.runbzr('push', retcode=3)
55
60
        self.assertEquals(out,
56
61
                ('','bzr: ERROR: No push location known or specified.\n'))
 
62
 
 
63
        # test not remembered if cannot actually push
 
64
        self.run_bzr('push', '../path/which/doesnt/exist', retcode=3)
 
65
        out = self.run_bzr('push', retcode=3)
 
66
        self.assertEquals(
 
67
                ('', 'bzr: ERROR: No push location known or specified.\n'),
 
68
                out)
 
69
 
57
70
        # test implicit --remember when no push location set, push fails
58
 
        out = self.runbzr('push ../branch_b', retcode=3)
 
71
        out = self.run_bzr('push', '../branch_b', retcode=3)
59
72
        self.assertEquals(out,
60
73
                ('','bzr: ERROR: These branches have diverged.  '
61
74
                    'Try a merge then push with overwrite.\n'))
62
75
        self.assertEquals(abspath(branch_a.get_push_location()),
63
76
                          abspath(branch_b.bzrdir.root_transport.base))
 
77
 
64
78
        # test implicit --remember after resolving previous failure
65
79
        uncommit(branch=branch_b, tree=tree_b)
66
80
        transport.delete('branch_b/c')
67
 
        self.runbzr('push')
68
 
        self.assertEquals(abspath(branch_a.get_push_location()),
69
 
                          abspath(branch_b.bzrdir.root_transport.base))
 
81
        out = self.run_bzr('push')
 
82
        path = branch_a.get_push_location()
 
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)
 
87
        self.assertEqual(path,
 
88
                         branch_b.bzrdir.root_transport.base)
70
89
        # test explicit --remember
71
 
        self.runbzr('push ../branch_c --remember')
72
 
        self.assertEquals(abspath(branch_a.get_push_location()),
73
 
                          abspath(branch_c.bzrdir.root_transport.base))
 
90
        self.run_bzr('push', '../branch_c', '--remember')
 
91
        self.assertEquals(branch_a.get_push_location(),
 
92
                          branch_c.bzrdir.root_transport.base)
 
93
    
 
94
    def test_push_without_tree(self):
 
95
        # bzr push from a branch that does not have a checkout should work.
 
96
        b = self.make_branch('.')
 
97
        out, err = self.run_bzr('push', 'pushed-location')
 
98
        self.assertEqual('', out)
 
99
        self.assertEqual('0 revision(s) pushed.\n', err)
 
100
        b2 = bzrlib.branch.Branch.open('pushed-location')
 
101
        self.assertEndsWith(b2.base, 'pushed-location/')
 
102
 
 
103
    def test_push_new_branch_revision_count(self):
 
104
        # bzr push of a branch with revisions to a new location 
 
105
        # should print the number of revisions equal to the length of the 
 
106
        # local branch.
 
107
        t = self.make_branch_and_tree('tree')
 
108
        self.build_tree(['tree/file'])
 
109
        t.add('file')
 
110
        t.commit('commit 1')
 
111
        os.chdir('tree')
 
112
        out, err = self.run_bzr('push', 'pushed-to')
 
113
        os.chdir('..')
 
114
        self.assertEqual('', out)
 
115
        self.assertEqual('1 revision(s) pushed.\n', err)
 
116
 
 
117
    def test_push_only_pushes_history(self):
 
118
        # Knit branches should only push the history for the current revision.
 
119
        format = BzrDirMetaFormat1()
 
120
        format.repository_format = RepositoryFormatKnit1()
 
121
        shared_repo = self.make_repository('repo', format=format, shared=True)
 
122
        shared_repo.set_make_working_trees(True)
 
123
 
 
124
        def make_shared_tree(path):
 
125
            shared_repo.bzrdir.root_transport.mkdir(path)
 
126
            shared_repo.bzrdir.create_branch_convenience('repo/' + path)
 
127
            return WorkingTree.open('repo/' + path)
 
128
        tree_a = make_shared_tree('a')
 
129
        self.build_tree(['repo/a/file'])
 
130
        tree_a.add('file')
 
131
        tree_a.commit('commit a-1', rev_id='a-1')
 
132
        f = open('repo/a/file', 'ab')
 
133
        f.write('more stuff\n')
 
134
        f.close()
 
135
        tree_a.commit('commit a-2', rev_id='a-2')
 
136
 
 
137
        tree_b = make_shared_tree('b')
 
138
        self.build_tree(['repo/b/file'])
 
139
        tree_b.add('file')
 
140
        tree_b.commit('commit b-1', rev_id='b-1')
 
141
 
 
142
        self.assertTrue(shared_repo.has_revision('a-1'))
 
143
        self.assertTrue(shared_repo.has_revision('a-2'))
 
144
        self.assertTrue(shared_repo.has_revision('b-1'))
 
145
 
 
146
        # Now that we have a repository with shared files, make sure
 
147
        # that things aren't copied out by a 'push'
 
148
        os.chdir('repo/b')
 
149
        self.run_bzr('push', '../../push-b')
 
150
        pushed_tree = WorkingTree.open('../../push-b')
 
151
        pushed_repo = pushed_tree.branch.repository
 
152
        self.assertFalse(pushed_repo.has_revision('a-1'))
 
153
        self.assertFalse(pushed_repo.has_revision('a-2'))
 
154
        self.assertTrue(pushed_repo.has_revision('b-1'))
 
155
 
 
156
    def test_push_funky_id(self):
 
157
        t = self.make_branch_and_tree('tree')
 
158
        os.chdir('tree')
 
159
        self.build_tree(['filename'])
 
160
        t.add('filename', 'funky-chars<>%&;"\'')
 
161
        t.commit('commit filename')
 
162
        self.run_bzr('push', '../new-tree')