/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_commit.py

  • Committer: Wouter van Heyst
  • Date: 2006-06-06 12:06:20 UTC
  • mfrom: (1740 +trunk)
  • mto: This revision was merged to the branch mainline in revision 1752.
  • Revision ID: larstiq@larstiq.dyndns.org-20060606120620-50066b0951e4ef7c
merge bzr.dev 1740

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
        self.build_tree(['hello.txt'])
38
38
        self.runbzr("commit -m empty", retcode=3)
39
39
 
 
40
    def test_commit_with_path(self):
 
41
        """Commit tree with path of root specified"""
 
42
        self.run_bzr('init', 'a')
 
43
        self.build_tree(['a/a_file'])
 
44
        self.run_bzr('add', 'a/a_file')
 
45
        self.run_bzr('commit', '-m', 'first commit', 'a')
 
46
 
 
47
        self.run_bzr('branch', 'a', 'b')
 
48
        self.build_tree_contents([('b/a_file', 'changes in b')])
 
49
        self.run_bzr('commit', '-m', 'first commit in b', 'b')
 
50
 
 
51
        self.build_tree_contents([('a/a_file', 'new contents')])
 
52
        self.run_bzr('commit', '-m', 'change in a', 'a')
 
53
 
 
54
        os.chdir('b')
 
55
        self.run_bzr('merge', '../a', retcode=1) # will conflict
 
56
        os.chdir('..')
 
57
        self.run_bzr('resolved', 'b/a_file')
 
58
        self.run_bzr('commit', '-m', 'merge into b', 'b')
 
59
 
 
60
 
40
61
    def test_10_verbose_commit(self):
41
62
        """Add one file and examine verbose commit output"""
42
63
        self.runbzr("init")
73
94
        wt.rename_one('hello.txt', 'gutentag.txt')
74
95
        out, err = self.run_bzr("commit", "-m", "renamed")
75
96
        self.assertEqual('', out)
76
 
        self.assertEqual('renamed gutentag.txt\n'
 
97
        self.assertEqual('renamed hello.txt => gutentag.txt\n'
77
98
                         'Committed revision 2.\n',
78
99
                         err)
79
100
 
86
107
        out, err = self.run_bzr("commit", "-m", "renamed")
87
108
        self.assertEqual('', out)
88
109
        self.assertEqualDiff('added subdir\n'
89
 
                             'renamed subdir/hello.txt\n'
 
110
                             'renamed hello.txt => subdir/hello.txt\n'
90
111
                             'Committed revision 2.\n',
91
112
                             err)
92
113
 
102
123
                         'Committed revision 1.\n',
103
124
                         err)
104
125
 
105
 
    def test_16_verbose_commit_with_unchanged(self):
 
126
    def test_verbose_commit_with_unchanged(self):
106
127
        """Unchanged files should not be listed by default in verbose output"""
107
128
        self.runbzr("init")
108
129
        self.build_tree(['hello.txt', 'unchanged.txt'])
115
136
                         'Committed revision 2.\n',
116
137
                         err)
117
138
 
 
139
    def test_commit_merge_reports_all_modified_files(self):
 
140
        # the commit command should show all the files that are shown by
 
141
        # bzr diff or bzr status when committing, even when they were not
 
142
        # changed by the user but rather through doing a merge.
 
143
        this_tree = self.make_branch_and_tree('this')
 
144
        # we need a bunch of files and dirs, to perform one action on each.
 
145
        self.build_tree([
 
146
            'this/dirtorename/',
 
147
            'this/dirtoreparent/',
 
148
            'this/dirtoleave/',
 
149
            'this/dirtoremove/',
 
150
            'this/filetoreparent',
 
151
            'this/filetorename',
 
152
            'this/filetomodify',
 
153
            'this/filetoremove',
 
154
            'this/filetoleave']
 
155
            )
 
156
        this_tree.add([
 
157
            'dirtorename',
 
158
            'dirtoreparent',
 
159
            'dirtoleave',
 
160
            'dirtoremove',
 
161
            'filetoreparent',
 
162
            'filetorename',
 
163
            'filetomodify',
 
164
            'filetoremove',
 
165
            'filetoleave']
 
166
            )
 
167
        this_tree.commit('create_files')
 
168
        other_dir = this_tree.bzrdir.sprout('other')
 
169
        other_tree = other_dir.open_workingtree()
 
170
        other_tree.lock_write()
 
171
        # perform the needed actions on the files and dirs.
 
172
        try:
 
173
            other_tree.rename_one('dirtorename', 'renameddir')
 
174
            other_tree.rename_one('dirtoreparent', 'renameddir/reparenteddir')
 
175
            other_tree.rename_one('filetorename', 'renamedfile')
 
176
            other_tree.rename_one('filetoreparent', 'renameddir/reparentedfile')
 
177
            other_tree.remove(['dirtoremove', 'filetoremove'])
 
178
            self.build_tree_contents([
 
179
                ('other/newdir/', ),
 
180
                ('other/filetomodify', 'new content'),
 
181
                ('other/newfile', 'new file content')])
 
182
            other_tree.add('newfile')
 
183
            other_tree.add('newdir/')
 
184
            other_tree.commit('modify all sample files and dirs.')
 
185
        finally:
 
186
            other_tree.unlock()
 
187
        self.merge(other_tree.branch, this_tree)
 
188
        os.chdir('this')
 
189
        out,err = self.run_bzr("commit", "-m", "added")
 
190
        os.chdir('..')
 
191
        self.assertEqual('', out)
 
192
        self.assertEqualDiff(
 
193
            'modified filetomodify\n'
 
194
            'added newdir\n'
 
195
            'added newfile\n'
 
196
            'renamed dirtorename => renameddir\n'
 
197
            'renamed dirtoreparent => renameddir/reparenteddir\n'
 
198
            'renamed filetoreparent => renameddir/reparentedfile\n'
 
199
            'renamed filetorename => renamedfile\n'
 
200
            'deleted dirtoremove\n'
 
201
            'deleted filetoremove\n'
 
202
            'Committed revision 2.\n',
 
203
            err)
 
204
 
118
205
    def test_empty_commit_message(self):
119
206
        self.runbzr("init")
120
207
        file('foo.c', 'wt').write('int main() {}')
165
252
        self.assertEqualDiff('', out)
166
253
        self.assertEqualDiff('bzr: ERROR: Cannot perform local-only commits '
167
254
                             'on unbound branches.\n', err)
 
255
 
 
256
    def test_commit_a_text_merge_in_a_checkout(self):
 
257
        # checkouts perform multiple actions in a transaction across bond
 
258
        # branches and their master, and have been observed to fail in the
 
259
        # past. This is a user story reported to fail in bug #43959 where 
 
260
        # a merge done in a checkout (using the update command) failed to
 
261
        # commit correctly.
 
262
        self.run_bzr('init', 'trunk')
 
263
 
 
264
        self.run_bzr('checkout', 'trunk', 'u1')
 
265
        self.build_tree_contents([('u1/hosts', 'initial contents')])
 
266
        self.run_bzr('add', 'u1/hosts')
 
267
        self.run_bzr('commit', '-m', 'add hosts', 'u1')
 
268
 
 
269
        self.run_bzr('checkout', 'trunk', 'u2')
 
270
        self.build_tree_contents([('u2/hosts', 'altered in u2')])
 
271
        self.run_bzr('commit', '-m', 'checkin from u2', 'u2')
 
272
 
 
273
        # make an offline commits
 
274
        self.build_tree_contents([('u1/hosts', 'first offline change in u1')])
 
275
        self.run_bzr('commit', '-m', 'checkin offline', '--local', 'u1')
 
276
 
 
277
        # now try to pull in online work from u2, and then commit our offline
 
278
        # work as a merge
 
279
        # retcode 1 as we expect a text conflict
 
280
        self.run_bzr('update', 'u1', retcode=1)
 
281
        self.run_bzr('resolved', 'u1/hosts')
 
282
        # add a text change here to represent resolving the merge conflicts in
 
283
        # favour of a new version of the file not identical to either the u1
 
284
        # version or the u2 version.
 
285
        self.build_tree_contents([('u1/hosts', 'merge resolution\n')])
 
286
        self.run_bzr('commit', '-m', 'checkin merge of the offline work from u1', 'u1')