/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 tests/test_builder.py

  • Committer: Martin Pool
  • Date: 2005-06-28 03:02:31 UTC
  • Revision ID: mbp@sourcefrog.net-20050628030231-d311e4ebcd467ef4
Merge John's import-speedup branch:

                                                                                         
  777 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 22:20:32 -0500
      revision-id: john@arbash-meinel.com-20050627032031-e82a50db3863b18e
      bzr selftest was not using the correct bzr

  776 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 22:20:22 -0500
      revision-id: john@arbash-meinel.com-20050627032021-c9f21fde989ddaee
      Add was using an old mutter

  775 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 22:02:33 -0500
      revision-id: john@arbash-meinel.com-20050627030233-9165cfe98fc63298
      Cleaned up to be less different

  774 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 21:54:53 -0500
      revision-id: john@arbash-meinel.com-20050627025452-4260d0e744edef43
      Allow BZR_PLUGIN_PATH='' to negate plugin loading.

  773 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 21:49:34 -0500
      revision-id: john@arbash-meinel.com-20050627024933-b7158f67b7b9eae5
      Finished the previous cleanup (allowing load_plugins to be called twice)

  772 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 21:45:08 -0500
      revision-id: john@arbash-meinel.com-20050627024508-723b1df510d196fc
      Work on making the tests pass. versioning.py is calling run_cmd directly, but plugins have been loaded.

  771 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 21:32:29 -0500
      revision-id: john@arbash-meinel.com-20050627023228-79972744d7c53e15
      Got it down a little bit more by removing import of tree and inventory.

  770 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 21:26:05 -0500
      revision-id: john@arbash-meinel.com-20050627022604-350b9773ef622f95
      Reducing the number of import from bzrlib/__init__.py and bzrlib/branch.py

  769 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 20:32:25 -0500
      revision-id: john@arbash-meinel.com-20050627013225-32dd044f10d23948
      Updated revision.py and xml.py to include SubElement.

  768 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 20:03:56 -0500
      revision-id: john@arbash-meinel.com-20050627010356-ee66919e1c377faf
      Minor typo

  767 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 20:03:13 -0500
      revision-id: john@arbash-meinel.com-20050627010312-40d024007eb85051
      Caching the import

  766 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 19:51:47 -0500
      revision-id: john@arbash-meinel.com-20050627005147-5281c99e48ed1834
      Created wrapper functions for lazy import of ElementTree

  765 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 19:46:37 -0500
      revision-id: john@arbash-meinel.com-20050627004636-bf432902004a94c5
      Removed all of the test imports of cElementTree

  764 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 19:43:59 -0500
      revision-id: john@arbash-meinel.com-20050627004358-d137fbe9570dd71b
      Trying to make bzr startup faster.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2007 Canonical Ltd
2
 
#
3
 
# This program is free software; you can redistribute it and/or modify
4
 
# it under the terms of the GNU General Public License as published by
5
 
# the Free Software Foundation; either version 2 of the License, or
6
 
# (at your option) any later version.
7
 
#
8
 
# This program is distributed in the hope that it will be useful,
9
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
 
# GNU General Public License for more details.
12
 
#
13
 
# You should have received a copy of the GNU General Public License
14
 
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
 
 
17
 
"""Test our ability to build up test repositories"""
18
 
 
19
 
from cStringIO import StringIO
20
 
 
21
 
from dulwich.repo import Repo as GitRepo
22
 
 
23
 
from bzrlib.plugins.git import tests
24
 
 
25
 
 
26
 
class TestGitBranchBuilder(tests.TestCase):
27
 
 
28
 
    def test__create_blob(self):
29
 
        stream = StringIO()
30
 
        builder = tests.GitBranchBuilder(stream)
31
 
        self.assertEqual(1, builder._create_blob('foo\nbar\n'))
32
 
        self.assertEqualDiff('blob\nmark :1\ndata 8\nfoo\nbar\n\n',
33
 
                             stream.getvalue())
34
 
 
35
 
    def test_set_file(self):
36
 
        stream = StringIO()
37
 
        builder = tests.GitBranchBuilder(stream)
38
 
        builder.set_file('foobar', 'foo\nbar\n', False)
39
 
        self.assertEqualDiff('blob\nmark :1\ndata 8\nfoo\nbar\n\n',
40
 
                             stream.getvalue())
41
 
        self.assertEqual(['M 100644 :1 foobar\n'], builder.commit_info)
42
 
 
43
 
    def test_set_file_unicode(self):
44
 
        stream = StringIO()
45
 
        builder = tests.GitBranchBuilder(stream)
46
 
        builder.set_file(u'f\xb5/bar', 'contents\nbar\n', False)
47
 
        self.assertEqualDiff('blob\nmark :1\ndata 13\ncontents\nbar\n\n',
48
 
                             stream.getvalue())
49
 
        self.assertEqual(['M 100644 :1 f\xc2\xb5/bar\n'], builder.commit_info)
50
 
 
51
 
    def test_set_file_newline(self):
52
 
        stream = StringIO()
53
 
        builder = tests.GitBranchBuilder(stream)
54
 
        builder.set_file(u'foo\nbar', 'contents\nbar\n', False)
55
 
        self.assertEqualDiff('blob\nmark :1\ndata 13\ncontents\nbar\n\n',
56
 
                             stream.getvalue())
57
 
        self.assertEqual(['M 100644 :1 "foo\\nbar"\n'], builder.commit_info)
58
 
 
59
 
    def test_set_file_executable(self):
60
 
        stream = StringIO()
61
 
        builder = tests.GitBranchBuilder(stream)
62
 
        builder.set_file(u'f\xb5/bar', 'contents\nbar\n', True)
63
 
        self.assertEqualDiff('blob\nmark :1\ndata 13\ncontents\nbar\n\n',
64
 
                             stream.getvalue())
65
 
        self.assertEqual(['M 100755 :1 f\xc2\xb5/bar\n'], builder.commit_info)
66
 
 
67
 
    def test_set_link(self):
68
 
        stream = StringIO()
69
 
        builder = tests.GitBranchBuilder(stream)
70
 
        builder.set_link(u'f\xb5/bar', 'link/contents')
71
 
        self.assertEqualDiff('blob\nmark :1\ndata 13\nlink/contents\n',
72
 
                             stream.getvalue())
73
 
        self.assertEqual(['M 120000 :1 f\xc2\xb5/bar\n'], builder.commit_info)
74
 
 
75
 
    def test_set_link_newline(self):
76
 
        stream = StringIO()
77
 
        builder = tests.GitBranchBuilder(stream)
78
 
        builder.set_link(u'foo\nbar', 'link/contents')
79
 
        self.assertEqualDiff('blob\nmark :1\ndata 13\nlink/contents\n',
80
 
                             stream.getvalue())
81
 
        self.assertEqual(['M 120000 :1 "foo\\nbar"\n'], builder.commit_info)
82
 
 
83
 
    def test_delete_entry(self):
84
 
        stream = StringIO()
85
 
        builder = tests.GitBranchBuilder(stream)
86
 
        builder.delete_entry(u'path/to/f\xb5')
87
 
        self.assertEqual(['D path/to/f\xc2\xb5\n'], builder.commit_info)
88
 
 
89
 
    def test_delete_entry_newline(self):
90
 
        stream = StringIO()
91
 
        builder = tests.GitBranchBuilder(stream)
92
 
        builder.delete_entry(u'path/to/foo\nbar')
93
 
        self.assertEqual(['D "path/to/foo\\nbar"\n'], builder.commit_info)
94
 
 
95
 
    def test_encode_path(self):
96
 
        encode = tests.GitBranchBuilder._encode_path
97
 
        # Unicode is encoded to utf-8
98
 
        self.assertEqual(encode(u'f\xb5'), 'f\xc2\xb5')
99
 
        # The name must be quoted if it starts by a double quote or contains a
100
 
        # newline.
101
 
        self.assertEqual(encode(u'"foo'), '"\\"foo"')
102
 
        self.assertEqual(encode(u'fo\no'), '"fo\\no"')
103
 
        # When the name is quoted, all backslash and quote chars must be
104
 
        # escaped.
105
 
        self.assertEqual(encode(u'fo\\o\nbar'), '"fo\\\\o\\nbar"')
106
 
        self.assertEqual(encode(u'fo"o"\nbar'), '"fo\\"o\\"\\nbar"')
107
 
        # Other control chars, such as \r, need not be escaped.
108
 
        self.assertEqual(encode(u'foo\r\nbar'), '"foo\r\\nbar"')
109
 
 
110
 
    def test_add_and_commit(self):
111
 
        stream = StringIO()
112
 
        builder = tests.GitBranchBuilder(stream)
113
 
 
114
 
        builder.set_file(u'f\xb5/bar', 'contents\nbar\n', False)
115
 
        self.assertEqual(2, builder.commit('Joe Foo <joe@foo.com>',
116
 
                                           u'committing f\xb5/bar',
117
 
                                           timestamp=1194586400,
118
 
                                           timezone='+0100'))
119
 
        self.assertEqualDiff('blob\nmark :1\ndata 13\ncontents\nbar\n\n'
120
 
                             'commit refs/heads/master\n'
121
 
                             'mark :2\n'
122
 
                             'committer Joe Foo <joe@foo.com> 1194586400 +0100\n'
123
 
                             'data 18\n'
124
 
                             'committing f\xc2\xb5/bar'
125
 
                             '\n'
126
 
                             'M 100644 :1 f\xc2\xb5/bar\n'
127
 
                             '\n',
128
 
                             stream.getvalue())
129
 
 
130
 
    def test_commit_base(self):
131
 
        stream = StringIO()
132
 
        builder = tests.GitBranchBuilder(stream)
133
 
 
134
 
        builder.set_file(u'foo', 'contents\nfoo\n', False)
135
 
        r1 = builder.commit('Joe Foo <joe@foo.com>', u'first',
136
 
                            timestamp=1194586400)
137
 
        r2 = builder.commit('Joe Foo <joe@foo.com>', u'second',
138
 
                            timestamp=1194586405)
139
 
        r3 = builder.commit('Joe Foo <joe@foo.com>', u'third',
140
 
                            timestamp=1194586410,
141
 
                            base=r1)
142
 
 
143
 
        self.assertEqualDiff('blob\nmark :1\ndata 13\ncontents\nfoo\n\n'
144
 
                             'commit refs/heads/master\n'
145
 
                             'mark :2\n'
146
 
                             'committer Joe Foo <joe@foo.com> 1194586400 +0000\n'
147
 
                             'data 5\n'
148
 
                             'first'
149
 
                             '\n'
150
 
                             'M 100644 :1 foo\n'
151
 
                             '\n'
152
 
                             'commit refs/heads/master\n'
153
 
                             'mark :3\n'
154
 
                             'committer Joe Foo <joe@foo.com> 1194586405 +0000\n'
155
 
                             'data 6\n'
156
 
                             'second'
157
 
                             '\n'
158
 
                             '\n'
159
 
                             'commit refs/heads/master\n'
160
 
                             'mark :4\n'
161
 
                             'committer Joe Foo <joe@foo.com> 1194586410 +0000\n'
162
 
                             'data 5\n'
163
 
                             'third'
164
 
                             '\n'
165
 
                             'from :2\n'
166
 
                             '\n', stream.getvalue())
167
 
 
168
 
    def test_commit_merge(self):
169
 
        stream = StringIO()
170
 
        builder = tests.GitBranchBuilder(stream)
171
 
 
172
 
        builder.set_file(u'foo', 'contents\nfoo\n', False)
173
 
        r1 = builder.commit('Joe Foo <joe@foo.com>', u'first',
174
 
                            timestamp=1194586400)
175
 
        r2 = builder.commit('Joe Foo <joe@foo.com>', u'second',
176
 
                            timestamp=1194586405)
177
 
        r3 = builder.commit('Joe Foo <joe@foo.com>', u'third',
178
 
                            timestamp=1194586410,
179
 
                            base=r1)
180
 
        r4 = builder.commit('Joe Foo <joe@foo.com>', u'Merge',
181
 
                            timestamp=1194586415,
182
 
                            merge=[r2])
183
 
 
184
 
        self.assertEqualDiff('blob\nmark :1\ndata 13\ncontents\nfoo\n\n'
185
 
                             'commit refs/heads/master\n'
186
 
                             'mark :2\n'
187
 
                             'committer Joe Foo <joe@foo.com> 1194586400 +0000\n'
188
 
                             'data 5\n'
189
 
                             'first'
190
 
                             '\n'
191
 
                             'M 100644 :1 foo\n'
192
 
                             '\n'
193
 
                             'commit refs/heads/master\n'
194
 
                             'mark :3\n'
195
 
                             'committer Joe Foo <joe@foo.com> 1194586405 +0000\n'
196
 
                             'data 6\n'
197
 
                             'second'
198
 
                             '\n'
199
 
                             '\n'
200
 
                             'commit refs/heads/master\n'
201
 
                             'mark :4\n'
202
 
                             'committer Joe Foo <joe@foo.com> 1194586410 +0000\n'
203
 
                             'data 5\n'
204
 
                             'third'
205
 
                             '\n'
206
 
                             'from :2\n'
207
 
                             '\n'
208
 
                             'commit refs/heads/master\n'
209
 
                             'mark :5\n'
210
 
                             'committer Joe Foo <joe@foo.com> 1194586415 +0000\n'
211
 
                             'data 5\n'
212
 
                             'Merge'
213
 
                             '\n'
214
 
                             'merge :3\n'
215
 
                             '\n', stream.getvalue())
216
 
 
217
 
    def test_auto_timestamp(self):
218
 
        stream = StringIO()
219
 
        builder = tests.GitBranchBuilder(stream)
220
 
        builder.commit('Joe Foo <joe@foo.com>', u'message')
221
 
        self.assertContainsRe(stream.getvalue(),
222
 
                              r'committer Joe Foo <joe@foo\.com> \d+ \+0000')
223
 
 
224
 
    def test_reset(self):
225
 
        stream = StringIO()
226
 
        builder = tests.GitBranchBuilder(stream)
227
 
        builder.reset()
228
 
        self.assertEqualDiff('reset refs/heads/master\n\n', stream.getvalue())
229
 
 
230
 
    def test_reset_named_ref(self):
231
 
        stream = StringIO()
232
 
        builder = tests.GitBranchBuilder(stream)
233
 
        builder.reset('refs/heads/branch')
234
 
        self.assertEqualDiff('reset refs/heads/branch\n\n', stream.getvalue())
235
 
 
236
 
    def test_reset_revision(self):
237
 
        stream = StringIO()
238
 
        builder = tests.GitBranchBuilder(stream)
239
 
        builder.reset(mark=123)
240
 
        self.assertEqualDiff(
241
 
            'reset refs/heads/master\n'
242
 
            'from :123\n'
243
 
            '\n', stream.getvalue())
244
 
 
245
 
 
246
 
class TestGitBranchBuilderReal(tests.TestCaseInTempDir):
247
 
 
248
 
    def test_create_real_branch(self):
249
 
        GitRepo.init(".")
250
 
 
251
 
        builder = tests.GitBranchBuilder()
252
 
        builder.set_file(u'foo', 'contents\nfoo\n', False)
253
 
        r1 = builder.commit('Joe Foo <joe@foo.com>', u'first',
254
 
                            timestamp=1194586400)
255
 
        mapping = builder.finish()
256
 
        self.assertEqual({1:'44411e8e9202177dd19b6599d7a7991059fa3cb4',
257
 
                          2: 'b0b62e674f67306fddcf72fa888c3b56df100d64',
258
 
                         }, mapping)