/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.200.196 by Jelmer Vernooij
Add simple tests and docstrings for GraphWalker.
1
# Copyright (C) 2009 Jelmer Vernooij <jelmer@samba.org>
0.200.298 by Jelmer Vernooij
Add test for non-ascii characters.
2
# -*- coding: utf-8 -*-
0.200.196 by Jelmer Vernooij
Add simple tests and docstrings for GraphWalker.
3
#
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; either version 2 of the License, or
7
# (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
0.200.264 by Jelmer Vernooij
Add more tests.
18
from dulwich.objects import (
19
    Blob,
0.200.265 by Jelmer Vernooij
Add more tests.
20
    Tree,
0.200.264 by Jelmer Vernooij
Add more tests.
21
    )
0.200.447 by Jelmer Vernooij
Rely less on command-line git.
22
from dulwich.repo import (
23
    Repo as GitRepo,
24
    )
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
25
import os
0.200.817 by Jelmer Vernooij
Deal with all modes locally.
26
import stat
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
27
0.200.264 by Jelmer Vernooij
Add more tests.
28
from bzrlib import (
29
    knit,
0.200.265 by Jelmer Vernooij
Add more tests.
30
    osutils,
0.200.264 by Jelmer Vernooij
Add more tests.
31
    versionedfile,
32
    )
33
from bzrlib.bzrdir import (
34
    BzrDir,
35
    )
36
from bzrlib.inventory import (
37
    Inventory,
38
    )
39
from bzrlib.repository import (
40
    Repository,
41
    )
42
from bzrlib.tests import (
43
    TestCaseWithTransport,
44
    )
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
45
0.200.264 by Jelmer Vernooij
Add more tests.
46
from bzrlib.plugins.git.fetch import (
47
    import_git_blob,
48
    import_git_tree,
49
    )
50
from bzrlib.plugins.git.mapping import (
51
    BzrGitMappingv1,
0.200.816 by Jelmer Vernooij
Leave mode handling for blobs to import_git_blob.
52
    DEFAULT_FILE_MODE,
0.200.264 by Jelmer Vernooij
Add more tests.
53
    )
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
54
from bzrlib.plugins.git.tests import (
55
    GitBranchBuilder,
56
    )
0.200.196 by Jelmer Vernooij
Add simple tests and docstrings for GraphWalker.
57
58
0.259.8 by Jelmer Vernooij
Add test.
59
class RepositoryFetchTests(object):
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
60
61
    def make_git_repo(self, path):
62
        os.mkdir(path)
0.200.447 by Jelmer Vernooij
Rely less on command-line git.
63
        GitRepo.init(path)
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
64
0.200.268 by Jelmer Vernooij
Add more fetch tests.
65
    def clone_git_repo(self, from_url, to_url, revision_id=None):
66
        oldrepos = self.open_git_repo(from_url)
0.200.927 by Jelmer Vernooij
Remove explicit use of rich root formats.
67
        dir = BzrDir.create(to_url)
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
68
        newrepos = dir.create_repository()
0.200.268 by Jelmer Vernooij
Add more fetch tests.
69
        oldrepos.copy_content_into(newrepos, revision_id=revision_id)
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
70
        return newrepos
71
72
    def test_empty(self):
73
        self.make_git_repo("d")
74
        newrepos = self.clone_git_repo("d", "f")
75
        self.assertEquals([], newrepos.all_revision_ids())
76
0.200.268 by Jelmer Vernooij
Add more fetch tests.
77
    def make_onerev_branch(self):
78
        self.make_git_repo("d")
79
        os.chdir("d")
80
        bb = GitBranchBuilder()
81
        bb.set_file("foobar", "foo\nbar\n", False)
82
        mark = bb.commit("Somebody <somebody@someorg.org>", "mymsg")
83
        gitsha = bb.finish()[mark]
84
        os.chdir("..")
85
        return "d", gitsha
86
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
87
    def test_single_rev(self):
0.200.268 by Jelmer Vernooij
Add more fetch tests.
88
        path, gitsha = self.make_onerev_branch()
89
        oldrepo = self.open_git_repo(path)
90
        newrepo = self.clone_git_repo(path, "f")
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
91
        self.assertEquals([oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha)], newrepo.all_revision_ids())
92
0.200.268 by Jelmer Vernooij
Add more fetch tests.
93
    def test_single_rev_specific(self):
94
        path, gitsha = self.make_onerev_branch()
95
        oldrepo = self.open_git_repo(path)
96
        revid = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha)
97
        newrepo = self.clone_git_repo(path, "f", revision_id=revid)
98
        self.assertEquals([revid], newrepo.all_revision_ids())
99
100
    def test_incremental(self):
101
        self.make_git_repo("d")
102
        os.chdir("d")
103
        bb = GitBranchBuilder()
104
        bb.set_file("foobar", "foo\nbar\n", False)
105
        mark1 = bb.commit("Somebody <somebody@someorg.org>", "mymsg")
106
        bb.set_file("foobar", "fooll\nbar\n", False)
107
        mark2 = bb.commit("Somebody <somebody@someorg.org>", "nextmsg")
108
        marks = bb.finish()
109
        gitsha1 = marks[mark1]
110
        gitsha2 = marks[mark2]
111
        os.chdir("..")
112
        oldrepo = self.open_git_repo("d")
113
        revid1 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha1)
114
        newrepo = self.clone_git_repo("d", "f", revision_id=revid1)
115
        self.assertEquals([revid1], newrepo.all_revision_ids())
116
        revid2 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha2)
117
        newrepo.fetch(oldrepo, revision_id=revid2)
0.200.269 by Jelmer Vernooij
Prepare for testing remote repos.
118
        self.assertEquals(set([revid1, revid2]), set(newrepo.all_revision_ids()))
0.200.268 by Jelmer Vernooij
Add more fetch tests.
119
0.200.552 by Jelmer Vernooij
Cope with directories becoming symlinks.
120
    def test_dir_becomes_symlink(self):
121
        self.make_git_repo("d")
122
        os.chdir("d")
123
        bb = GitBranchBuilder()
124
        bb.set_file("mylink/somefile", "foo\nbar\n", False)
125
        mark1 = bb.commit("Somebody <somebody@someorg.org>", "mymsg1")
126
        bb.set_symlink("mylink", "target/")
127
        mark2 = bb.commit("Somebody <somebody@someorg.org>", "mymsg2")
128
        marks = bb.finish()
129
        gitsha1 = marks[mark1]
130
        gitsha2 = marks[mark2]
131
        os.chdir("..")
132
        oldrepo = self.open_git_repo("d")
133
        newrepo = self.clone_git_repo("d", "f")
134
        revid1 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha1)
135
        revid2 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha2)
136
        tree1 = newrepo.revision_tree(revid1)
137
        tree2 = newrepo.revision_tree(revid2)
138
        fileid = tree1.path2id("mylink")
0.200.1194 by Jelmer Vernooij
Use get_file_revision.
139
        self.assertEquals(revid1, tree1.get_file_revision(fileid))
140
        self.assertEquals("directory", tree1.kind(fileid))
141
        self.assertEquals(None, tree1.get_symlink_target(fileid))
142
        self.assertEquals(revid2, tree2.get_file_revision(fileid))
143
        self.assertEquals("symlink", tree2.kind(fileid))
144
        self.assertEquals("target/", tree2.get_symlink_target(fileid))
0.200.552 by Jelmer Vernooij
Cope with directories becoming symlinks.
145
0.200.553 by Jelmer Vernooij
Support symlinks being turned into directories.
146
    def test_symlink_becomes_dir(self):
147
        self.make_git_repo("d")
148
        os.chdir("d")
149
        bb = GitBranchBuilder()
150
        bb.set_symlink("mylink", "target/")
151
        mark1 = bb.commit("Somebody <somebody@someorg.org>", "mymsg1")
152
        bb.set_file("mylink/somefile", "foo\nbar\n", False)
153
        mark2 = bb.commit("Somebody <somebody@someorg.org>", "mymsg2")
154
        marks = bb.finish()
155
        gitsha1 = marks[mark1]
156
        gitsha2 = marks[mark2]
157
        os.chdir("..")
158
        oldrepo = self.open_git_repo("d")
159
        newrepo = self.clone_git_repo("d", "f")
160
        revid1 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha1)
161
        revid2 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha2)
162
        tree1 = newrepo.revision_tree(revid1)
163
        tree2 = newrepo.revision_tree(revid2)
164
        fileid = tree1.path2id("mylink")
0.200.1194 by Jelmer Vernooij
Use get_file_revision.
165
        self.assertEquals(revid1, tree1.get_file_revision(fileid))
166
        self.assertEquals("symlink", tree1.kind(fileid))
167
        self.assertEquals("target/", tree1.get_symlink_target(fileid))
168
        self.assertEquals(revid2, tree2.get_file_revision(fileid))
169
        self.assertEquals("directory", tree2.kind(fileid))
170
        self.assertEquals(None, tree2.get_symlink_target(fileid))
0.200.553 by Jelmer Vernooij
Support symlinks being turned into directories.
171
0.200.551 by Jelmer Vernooij
Properly set InventoryEntry revision when changing symlink targets.
172
    def test_changing_symlink(self):
173
        self.make_git_repo("d")
174
        os.chdir("d")
175
        bb = GitBranchBuilder()
176
        bb.set_symlink("mylink", "target")
177
        mark1 = bb.commit("Somebody <somebody@someorg.org>", "mymsg1")
178
        bb.set_symlink("mylink", "target/")
179
        mark2 = bb.commit("Somebody <somebody@someorg.org>", "mymsg2")
180
        marks = bb.finish()
181
        gitsha1 = marks[mark1]
182
        gitsha2 = marks[mark2]
183
        os.chdir("..")
184
        oldrepo = self.open_git_repo("d")
185
        newrepo = self.clone_git_repo("d", "f")
186
        revid1 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha1)
187
        revid2 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha2)
188
        tree1 = newrepo.revision_tree(revid1)
189
        tree2 = newrepo.revision_tree(revid2)
190
        fileid = tree1.path2id("mylink")
0.200.1194 by Jelmer Vernooij
Use get_file_revision.
191
        self.assertEquals(revid1, tree1.get_file_revision(fileid))
192
        self.assertEquals("target", tree1.get_symlink_target(fileid))
193
        self.assertEquals(revid2, tree2.get_file_revision(fileid))
194
        self.assertEquals("target/", tree2.get_symlink_target(fileid))
0.200.551 by Jelmer Vernooij
Properly set InventoryEntry revision when changing symlink targets.
195
0.228.2 by Jelmer Vernooij
Add test for fetching executables.
196
    def test_executable(self):
197
        self.make_git_repo("d")
198
        os.chdir("d")
199
        bb = GitBranchBuilder()
200
        bb.set_file("foobar", "foo\nbar\n", True)
201
        bb.set_file("notexec", "foo\nbar\n", False)
202
        mark = bb.commit("Somebody <somebody@someorg.org>", "mymsg")
203
        gitsha = bb.finish()[mark]
204
        os.chdir("..")
0.200.268 by Jelmer Vernooij
Add more fetch tests.
205
        oldrepo = self.open_git_repo("d")
0.228.2 by Jelmer Vernooij
Add test for fetching executables.
206
        newrepo = self.clone_git_repo("d", "f")
207
        revid = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha)
208
        tree = newrepo.revision_tree(revid)
209
        self.assertTrue(tree.has_filename("foobar"))
0.200.1194 by Jelmer Vernooij
Use get_file_revision.
210
        self.assertEquals(True, tree.is_executable(tree.path2id("foobar")))
0.228.2 by Jelmer Vernooij
Add test for fetching executables.
211
        self.assertTrue(tree.has_filename("notexec"))
0.200.1194 by Jelmer Vernooij
Use get_file_revision.
212
        self.assertEquals(False, tree.is_executable(tree.path2id("notexec")))
0.200.264 by Jelmer Vernooij
Add more tests.
213
0.200.537 by Jelmer Vernooij
Fix handling of not-executable files becoming executable without any other changes.
214
    def test_becomes_executable(self):
215
        self.make_git_repo("d")
216
        os.chdir("d")
217
        bb = GitBranchBuilder()
218
        bb.set_file("foobar", "foo\nbar\n", False)
219
        mark1 = bb.commit("Somebody <somebody@someorg.org>", "mymsg")
220
        bb.set_file("foobar", "foo\nbar\n", True)
221
        mark2 = bb.commit("Somebody <somebody@someorg.org>", "mymsg")
222
        gitsha2 = bb.finish()[mark2]
223
        os.chdir("..")
224
        oldrepo = self.open_git_repo("d")
225
        newrepo = self.clone_git_repo("d", "f")
226
        revid = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha2)
227
        tree = newrepo.revision_tree(revid)
228
        self.assertTrue(tree.has_filename("foobar"))
0.200.1194 by Jelmer Vernooij
Use get_file_revision.
229
        fileid = tree.path2id("foobar")
230
        self.assertEquals(True, tree.is_executable(fileid))
231
        self.assertEquals(revid, tree.get_file_revision(fileid))
0.200.537 by Jelmer Vernooij
Fix handling of not-executable files becoming executable without any other changes.
232
0.200.298 by Jelmer Vernooij
Add test for non-ascii characters.
233
    def test_non_ascii_characters(self):
234
        self.make_git_repo("d")
235
        os.chdir("d")
236
        bb = GitBranchBuilder()
237
        bb.set_file(u"foőbar", "foo\nbar\n", False)
238
        mark = bb.commit("Somebody <somebody@someorg.org>", "mymsg")
239
        gitsha = bb.finish()[mark]
240
        os.chdir("..")
241
        oldrepo = self.open_git_repo("d")
242
        newrepo = self.clone_git_repo("d", "f")
243
        revid = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha)
244
        tree = newrepo.revision_tree(revid)
245
        self.assertTrue(tree.has_filename(u"foőbar"))
246
0.200.264 by Jelmer Vernooij
Add more tests.
247
0.200.269 by Jelmer Vernooij
Prepare for testing remote repos.
248
class LocalRepositoryFetchTests(RepositoryFetchTests, TestCaseWithTransport):
249
250
    def open_git_repo(self, path):
251
        return Repository.open(path)
252
253
0.200.839 by Jelmer Vernooij
Add convenience object for updating the object store caching layer.
254
class DummyStoreUpdater(object):
255
0.200.952 by Jelmer Vernooij
Write git pack files rather than loose objects.
256
    def add_object(self, obj, ie, path):
0.200.839 by Jelmer Vernooij
Add convenience object for updating the object store caching layer.
257
        pass
258
259
    def finish(self):
260
        pass
261
262
0.200.264 by Jelmer Vernooij
Add more tests.
263
class ImportObjects(TestCaseWithTransport):
264
265
    def setUp(self):
266
        super(ImportObjects, self).setUp()
0.200.265 by Jelmer Vernooij
Add more tests.
267
        self._mapping = BzrGitMappingv1()
0.200.264 by Jelmer Vernooij
Add more tests.
268
        factory = knit.make_file_factory(True, versionedfile.PrefixMapper())
269
        self._texts = factory(self.get_transport('texts'))
270
271
    def test_import_blob_simple(self):
272
        blob = Blob.from_string("bar")
0.229.3 by Jelmer Vernooij
Use inventory deltas internally so fetch is O(changes) rather than O(tree).
273
        base_inv = Inventory()
0.200.306 by Jelmer Vernooij
Fix tests, split up InterGitNonGitRepository.
274
        objs = { "blobname": blob}
0.200.839 by Jelmer Vernooij
Add convenience object for updating the object store caching layer.
275
        ret = import_git_blob(self._texts, self._mapping, "bla", "bla",
0.200.815 by Jelmer Vernooij
Pass tuple with base_sha, sha to make the argument list for import_git_* a bit more understandable.
276
            (None, "blobname"), 
0.200.848 by Jelmer Vernooij
remove unnecessary parent_inv_shamap.
277
            base_inv, None, "somerevid", [], objs.__getitem__, 
0.200.896 by Jelmer Vernooij
Add separate function for looking up file ids.
278
            (None, DEFAULT_FILE_MODE), DummyStoreUpdater(),
279
            self._mapping.generate_file_id)
0.200.264 by Jelmer Vernooij
Add more tests.
280
        self.assertEquals(set([('bla', 'somerevid')]), self._texts.keys())
0.200.265 by Jelmer Vernooij
Add more tests.
281
        self.assertEquals(self._texts.get_record_stream([('bla', 'somerevid')],
282
            "unordered", True).next().get_bytes_as("fulltext"), "bar")
0.229.3 by Jelmer Vernooij
Use inventory deltas internally so fetch is O(changes) rather than O(tree).
283
        self.assertEquals(1, len(ret)) 
284
        self.assertEquals(None, ret[0][0])
285
        self.assertEquals("bla", ret[0][1])
286
        ie = ret[0][3]
287
        self.assertEquals(False, ie.executable)
288
        self.assertEquals("file", ie.kind)
289
        self.assertEquals("somerevid", ie.revision)
290
        self.assertEquals(osutils.sha_strings(["bar"]), ie.text_sha1)
0.200.265 by Jelmer Vernooij
Add more tests.
291
292
    def test_import_tree_empty_root(self):
0.229.3 by Jelmer Vernooij
Use inventory deltas internally so fetch is O(changes) rather than O(tree).
293
        base_inv = Inventory(root_id=None)
0.200.265 by Jelmer Vernooij
Add more tests.
294
        tree = Tree()
0.200.878 by Jelmer Vernooij
Fix determining of unusual file modes.
295
        ret, child_modes = import_git_tree(self._texts, self._mapping, "", "",
0.200.848 by Jelmer Vernooij
remove unnecessary parent_inv_shamap.
296
               (None, tree.id), base_inv, 
0.200.817 by Jelmer Vernooij
Deal with all modes locally.
297
               None, "somerevid", [], {tree.id: tree}.__getitem__,
0.200.896 by Jelmer Vernooij
Add separate function for looking up file ids.
298
               (None, stat.S_IFDIR), DummyStoreUpdater(),
299
               self._mapping.generate_file_id)
0.200.878 by Jelmer Vernooij
Fix determining of unusual file modes.
300
        self.assertEquals(child_modes, {})
0.200.265 by Jelmer Vernooij
Add more tests.
301
        self.assertEquals(set([("TREE_ROOT", 'somerevid')]), self._texts.keys())
0.229.3 by Jelmer Vernooij
Use inventory deltas internally so fetch is O(changes) rather than O(tree).
302
        self.assertEquals(1, len(ret))
303
        self.assertEquals(None, ret[0][0])
304
        self.assertEquals("", ret[0][1])
305
        ie = ret[0][3]
306
        self.assertEquals(False, ie.executable)
307
        self.assertEquals("directory", ie.kind)
308
        self.assertEquals({}, ie.children)
309
        self.assertEquals("somerevid", ie.revision)
310
        self.assertEquals(None, ie.text_sha1)
0.200.265 by Jelmer Vernooij
Add more tests.
311
312
    def test_import_tree_empty(self):
0.229.3 by Jelmer Vernooij
Use inventory deltas internally so fetch is O(changes) rather than O(tree).
313
        base_inv = Inventory()
0.200.265 by Jelmer Vernooij
Add more tests.
314
        tree = Tree()
0.200.878 by Jelmer Vernooij
Fix determining of unusual file modes.
315
        ret, child_modes = import_git_tree(self._texts, self._mapping, "bla", "bla",
0.200.848 by Jelmer Vernooij
remove unnecessary parent_inv_shamap.
316
           (None, tree.id), base_inv, None, "somerevid", [], 
0.200.817 by Jelmer Vernooij
Deal with all modes locally.
317
           { tree.id: tree }.__getitem__,
0.200.896 by Jelmer Vernooij
Add separate function for looking up file ids.
318
           (None, stat.S_IFDIR), DummyStoreUpdater(),
319
           self._mapping.generate_file_id)
0.200.878 by Jelmer Vernooij
Fix determining of unusual file modes.
320
        self.assertEquals(child_modes, {})
0.200.265 by Jelmer Vernooij
Add more tests.
321
        self.assertEquals(set([("bla", 'somerevid')]), self._texts.keys())
0.229.3 by Jelmer Vernooij
Use inventory deltas internally so fetch is O(changes) rather than O(tree).
322
        self.assertEquals(1, len(ret))
323
        self.assertEquals(None, ret[0][0])
324
        self.assertEquals("bla", ret[0][1])
325
        ie = ret[0][3]
326
        self.assertEquals("directory", ie.kind)
327
        self.assertEquals(False, ie.executable)
328
        self.assertEquals({}, ie.children)
329
        self.assertEquals("somerevid", ie.revision)
330
        self.assertEquals(None, ie.text_sha1)
0.200.267 by Jelmer Vernooij
Add more tests for fetch code.
331
332
    def test_import_tree_with_file(self):
0.229.3 by Jelmer Vernooij
Use inventory deltas internally so fetch is O(changes) rather than O(tree).
333
        base_inv = Inventory()
0.200.267 by Jelmer Vernooij
Add more tests for fetch code.
334
        blob = Blob.from_string("bar1")
335
        tree = Tree()
0.200.1152 by Jelmer Vernooij
Require dulwich 0.7.1.
336
        tree.add("foo", stat.S_IFREG | 0644, blob.id)
0.200.267 by Jelmer Vernooij
Add more tests for fetch code.
337
        objects = { blob.id: blob, tree.id: tree }
0.200.878 by Jelmer Vernooij
Fix determining of unusual file modes.
338
        ret, child_modes = import_git_tree(self._texts, self._mapping, "bla", "bla",
0.200.848 by Jelmer Vernooij
remove unnecessary parent_inv_shamap.
339
                (None, tree.id), base_inv, None, "somerevid", [],
0.200.896 by Jelmer Vernooij
Add separate function for looking up file ids.
340
            objects.__getitem__, (None, stat.S_IFDIR), DummyStoreUpdater(),
341
            self._mapping.generate_file_id)
0.200.878 by Jelmer Vernooij
Fix determining of unusual file modes.
342
        self.assertEquals(child_modes, {})
0.229.3 by Jelmer Vernooij
Use inventory deltas internally so fetch is O(changes) rather than O(tree).
343
        self.assertEquals(2, len(ret))
344
        self.assertEquals(None, ret[0][0])
345
        self.assertEquals("bla", ret[0][1])
346
        self.assertEquals(None, ret[1][0])
347
        self.assertEquals("bla/foo", ret[1][1])
348
        ie = ret[0][3]
349
        self.assertEquals("directory", ie.kind)
350
        ie = ret[1][3]
0.200.267 by Jelmer Vernooij
Add more tests for fetch code.
351
        self.assertEquals("file", ie.kind)
352
        self.assertEquals("bla/foo", ie.file_id)
353
        self.assertEquals("somerevid", ie.revision)
354
        self.assertEquals(osutils.sha_strings(["bar1"]), ie.text_sha1)
355
        self.assertEquals(False, ie.executable)
356
0.200.878 by Jelmer Vernooij
Fix determining of unusual file modes.
357
    def test_import_tree_with_unusual_mode_file(self):
358
        base_inv = Inventory()
359
        blob = Blob.from_string("bar1")
360
        tree = Tree()
0.200.1152 by Jelmer Vernooij
Require dulwich 0.7.1.
361
        tree.add("foo", stat.S_IFREG | 0664, blob.id)
0.200.878 by Jelmer Vernooij
Fix determining of unusual file modes.
362
        objects = { blob.id: blob, tree.id: tree }
0.200.1152 by Jelmer Vernooij
Require dulwich 0.7.1.
363
        ret, child_modes = import_git_tree(self._texts, self._mapping,
364
            "bla", "bla", (None, tree.id), base_inv, None, "somerevid", [],
0.200.896 by Jelmer Vernooij
Add separate function for looking up file ids.
365
            objects.__getitem__, (None, stat.S_IFDIR), DummyStoreUpdater(),
366
            self._mapping.generate_file_id)
0.200.880 by Jelmer Vernooij
remove unused function.
367
        self.assertEquals(child_modes, { "bla/foo": stat.S_IFREG | 0664 })
0.200.878 by Jelmer Vernooij
Fix determining of unusual file modes.
368
0.200.267 by Jelmer Vernooij
Add more tests for fetch code.
369
    def test_import_tree_with_file_exe(self):
0.229.3 by Jelmer Vernooij
Use inventory deltas internally so fetch is O(changes) rather than O(tree).
370
        base_inv = Inventory(root_id=None)
0.200.267 by Jelmer Vernooij
Add more tests for fetch code.
371
        blob = Blob.from_string("bar")
372
        tree = Tree()
0.200.1152 by Jelmer Vernooij
Require dulwich 0.7.1.
373
        tree.add("foo", 0100755, blob.id)
0.200.267 by Jelmer Vernooij
Add more tests for fetch code.
374
        objects = { blob.id: blob, tree.id: tree }
0.200.878 by Jelmer Vernooij
Fix determining of unusual file modes.
375
        ret, child_modes = import_git_tree(self._texts, self._mapping, "", "",
0.200.848 by Jelmer Vernooij
remove unnecessary parent_inv_shamap.
376
                (None, tree.id), base_inv, None, "somerevid", [],
0.200.896 by Jelmer Vernooij
Add separate function for looking up file ids.
377
            objects.__getitem__, (None, stat.S_IFDIR), DummyStoreUpdater(),
378
            self._mapping.generate_file_id)
0.200.878 by Jelmer Vernooij
Fix determining of unusual file modes.
379
        self.assertEquals(child_modes, {})
0.229.3 by Jelmer Vernooij
Use inventory deltas internally so fetch is O(changes) rather than O(tree).
380
        self.assertEquals(2, len(ret))
381
        self.assertEquals(None, ret[0][0])
382
        self.assertEquals("", ret[0][1])
383
        self.assertEquals(None, ret[1][0])
384
        self.assertEquals("foo", ret[1][1])
385
        ie = ret[0][3]
386
        self.assertEquals("directory", ie.kind)
387
        ie = ret[1][3]
0.200.267 by Jelmer Vernooij
Add more tests for fetch code.
388
        self.assertEquals("file", ie.kind)
389
        self.assertEquals(True, ie.executable)