/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.358.2 by Jelmer Vernooij
Refresh copyright headers, add my email.
1
# Copyright (C) 2009-2018 Jelmer Vernooij <jelmer@jelmer.uk>
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
0.358.1 by Jelmer Vernooij
Fix FSF address.
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0.200.196 by Jelmer Vernooij
Add simple tests and docstrings for GraphWalker.
17
0.358.3 by Jelmer Vernooij
Enable absolute import.
18
"""Tests from fetching from git into bzr."""
19
20
from __future__ import absolute_import
21
0.200.264 by Jelmer Vernooij
Add more tests.
22
from dulwich.objects import (
23
    Blob,
0.200.1403 by Jelmer Vernooij
Cope with tags pointing at tree objects when cloning local git repositories.
24
    Tag,
0.200.265 by Jelmer Vernooij
Add more tests.
25
    Tree,
0.200.1408 by Jelmer Vernooij
Remove old ie children when converting directory into tree reference.
26
    S_IFGITLINK,
0.200.264 by Jelmer Vernooij
Add more tests.
27
    )
0.200.447 by Jelmer Vernooij
Rely less on command-line git.
28
from dulwich.repo import (
29
    Repo as GitRepo,
30
    )
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
31
import os
0.200.817 by Jelmer Vernooij
Deal with all modes locally.
32
import stat
0.200.1403 by Jelmer Vernooij
Cope with tags pointing at tree objects when cloning local git repositories.
33
import time
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
34
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
35
from ... import (
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
36
    osutils,
37
    )
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
38
from ...bzr import (
0.200.264 by Jelmer Vernooij
Add more tests.
39
    knit,
40
    versionedfile,
41
    )
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
42
from ...branch import (
0.200.1404 by jelmer at samba
Add test for stacked on.
43
    Branch,
44
    )
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
45
from ...controldir import (
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
46
    ControlDir,
0.200.264 by Jelmer Vernooij
Add more tests.
47
    )
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
48
from ...bzr.inventory import (
0.200.264 by Jelmer Vernooij
Add more tests.
49
    Inventory,
50
    )
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
51
from ...repository import (
0.200.264 by Jelmer Vernooij
Add more tests.
52
    Repository,
53
    )
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
54
from ...tests import (
0.200.264 by Jelmer Vernooij
Add more tests.
55
    TestCaseWithTransport,
56
    )
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
57
0.200.1642 by Jelmer Vernooij
Use relative imports in tests.
58
from ..fetch import (
0.200.264 by Jelmer Vernooij
Add more tests.
59
    import_git_blob,
60
    import_git_tree,
0.200.1408 by Jelmer Vernooij
Remove old ie children when converting directory into tree reference.
61
    import_git_submodule,
0.200.264 by Jelmer Vernooij
Add more tests.
62
    )
0.200.1642 by Jelmer Vernooij
Use relative imports in tests.
63
from ..mapping import (
0.200.264 by Jelmer Vernooij
Add more tests.
64
    BzrGitMappingv1,
0.200.816 by Jelmer Vernooij
Leave mode handling for blobs to import_git_blob.
65
    DEFAULT_FILE_MODE,
0.200.264 by Jelmer Vernooij
Add more tests.
66
    )
0.200.1642 by Jelmer Vernooij
Use relative imports in tests.
67
from . import (
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
68
    GitBranchBuilder,
69
    )
0.200.196 by Jelmer Vernooij
Add simple tests and docstrings for GraphWalker.
70
71
0.259.8 by Jelmer Vernooij
Add test.
72
class RepositoryFetchTests(object):
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
73
74
    def make_git_repo(self, path):
75
        os.mkdir(path)
0.200.1403 by Jelmer Vernooij
Cope with tags pointing at tree objects when cloning local git repositories.
76
        return GitRepo.init(os.path.abspath(path))
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
77
0.200.268 by Jelmer Vernooij
Add more fetch tests.
78
    def clone_git_repo(self, from_url, to_url, revision_id=None):
79
        oldrepos = self.open_git_repo(from_url)
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
80
        dir = ControlDir.create(to_url)
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
81
        newrepos = dir.create_repository()
0.200.268 by Jelmer Vernooij
Add more fetch tests.
82
        oldrepos.copy_content_into(newrepos, revision_id=revision_id)
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
83
        return newrepos
84
85
    def test_empty(self):
86
        self.make_git_repo("d")
87
        newrepos = self.clone_git_repo("d", "f")
6964.2.3 by Jelmer Vernooij
Review comments.
88
        self.assertEqual([], newrepos.all_revision_ids())
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
89
0.200.268 by Jelmer Vernooij
Add more fetch tests.
90
    def make_onerev_branch(self):
91
        self.make_git_repo("d")
92
        os.chdir("d")
93
        bb = GitBranchBuilder()
7027.2.1 by Jelmer Vernooij
Port fastimport to python3.
94
        bb.set_file("foobar", b"foo\nbar\n", False)
95
        mark = bb.commit(b"Somebody <somebody@someorg.org>", b"mymsg")
0.200.268 by Jelmer Vernooij
Add more fetch tests.
96
        gitsha = bb.finish()[mark]
97
        os.chdir("..")
98
        return "d", gitsha
99
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
100
    def test_single_rev(self):
0.200.268 by Jelmer Vernooij
Add more fetch tests.
101
        path, gitsha = self.make_onerev_branch()
102
        oldrepo = self.open_git_repo(path)
103
        newrepo = self.clone_git_repo(path, "f")
0.200.1404 by jelmer at samba
Add test for stacked on.
104
        revid = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha)
6964.2.3 by Jelmer Vernooij
Review comments.
105
        self.assertEqual([revid], newrepo.all_revision_ids())
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
106
0.200.268 by Jelmer Vernooij
Add more fetch tests.
107
    def test_single_rev_specific(self):
108
        path, gitsha = self.make_onerev_branch()
109
        oldrepo = self.open_git_repo(path)
110
        revid = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha)
111
        newrepo = self.clone_git_repo(path, "f", revision_id=revid)
6964.2.3 by Jelmer Vernooij
Review comments.
112
        self.assertEqual([revid], newrepo.all_revision_ids())
0.200.268 by Jelmer Vernooij
Add more fetch tests.
113
114
    def test_incremental(self):
115
        self.make_git_repo("d")
116
        os.chdir("d")
117
        bb = GitBranchBuilder()
7027.2.1 by Jelmer Vernooij
Port fastimport to python3.
118
        bb.set_file("foobar", b"foo\nbar\n", False)
119
        mark1 = bb.commit(b"Somebody <somebody@someorg.org>", b"mymsg")
120
        bb.set_file("foobar", b"fooll\nbar\n", False)
121
        mark2 = bb.commit(b"Somebody <somebody@someorg.org>", b"nextmsg")
0.200.268 by Jelmer Vernooij
Add more fetch tests.
122
        marks = bb.finish()
123
        gitsha1 = marks[mark1]
124
        gitsha2 = marks[mark2]
125
        os.chdir("..")
126
        oldrepo = self.open_git_repo("d")
127
        revid1 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha1)
128
        newrepo = self.clone_git_repo("d", "f", revision_id=revid1)
6964.2.3 by Jelmer Vernooij
Review comments.
129
        self.assertEqual([revid1], newrepo.all_revision_ids())
0.200.268 by Jelmer Vernooij
Add more fetch tests.
130
        revid2 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha2)
131
        newrepo.fetch(oldrepo, revision_id=revid2)
6964.2.3 by Jelmer Vernooij
Review comments.
132
        self.assertEqual(set([revid1, revid2]), set(newrepo.all_revision_ids()))
0.200.268 by Jelmer Vernooij
Add more fetch tests.
133
0.200.552 by Jelmer Vernooij
Cope with directories becoming symlinks.
134
    def test_dir_becomes_symlink(self):
135
        self.make_git_repo("d")
136
        os.chdir("d")
137
        bb = GitBranchBuilder()
7027.2.1 by Jelmer Vernooij
Port fastimport to python3.
138
        bb.set_file("mylink/somefile", b"foo\nbar\n", False)
139
        mark1 = bb.commit(b"Somebody <somebody@someorg.org>", b"mymsg1")
7058.4.37 by Jelmer Vernooij
Fix dir deletion.
140
        bb.delete_entry("mylink/somefile")
0.200.552 by Jelmer Vernooij
Cope with directories becoming symlinks.
141
        bb.set_symlink("mylink", "target/")
7027.2.1 by Jelmer Vernooij
Port fastimport to python3.
142
        mark2 = bb.commit(b"Somebody <somebody@someorg.org>", b"mymsg2")
0.200.552 by Jelmer Vernooij
Cope with directories becoming symlinks.
143
        marks = bb.finish()
144
        gitsha1 = marks[mark1]
145
        gitsha2 = marks[mark2]
146
        os.chdir("..")
147
        oldrepo = self.open_git_repo("d")
148
        newrepo = self.clone_git_repo("d", "f")
149
        revid1 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha1)
150
        revid2 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha2)
151
        tree1 = newrepo.revision_tree(revid1)
152
        tree2 = newrepo.revision_tree(revid2)
6964.2.3 by Jelmer Vernooij
Review comments.
153
        self.assertEqual(revid1, tree1.get_file_revision("mylink"))
154
        self.assertEqual("directory", tree1.kind("mylink"))
155
        self.assertEqual(None, tree1.get_symlink_target("mylink"))
156
        self.assertEqual(revid2, tree2.get_file_revision("mylink"))
157
        self.assertEqual("symlink", tree2.kind("mylink"))
158
        self.assertEqual("target/", tree2.get_symlink_target("mylink"))
0.200.552 by Jelmer Vernooij
Cope with directories becoming symlinks.
159
0.200.553 by Jelmer Vernooij
Support symlinks being turned into directories.
160
    def test_symlink_becomes_dir(self):
161
        self.make_git_repo("d")
162
        os.chdir("d")
163
        bb = GitBranchBuilder()
164
        bb.set_symlink("mylink", "target/")
7027.2.1 by Jelmer Vernooij
Port fastimport to python3.
165
        mark1 = bb.commit(b"Somebody <somebody@someorg.org>", b"mymsg1")
7105.1.2 by Jelmer Vernooij
Add missing delete commands.
166
        bb.delete_entry("mylink")
7027.2.1 by Jelmer Vernooij
Port fastimport to python3.
167
        bb.set_file("mylink/somefile", b"foo\nbar\n", False)
168
        mark2 = bb.commit(b"Somebody <somebody@someorg.org>", b"mymsg2")
0.200.553 by Jelmer Vernooij
Support symlinks being turned into directories.
169
        marks = bb.finish()
170
        gitsha1 = marks[mark1]
171
        gitsha2 = marks[mark2]
172
        os.chdir("..")
173
        oldrepo = self.open_git_repo("d")
174
        newrepo = self.clone_git_repo("d", "f")
175
        revid1 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha1)
176
        revid2 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha2)
177
        tree1 = newrepo.revision_tree(revid1)
178
        tree2 = newrepo.revision_tree(revid2)
6964.2.3 by Jelmer Vernooij
Review comments.
179
        self.assertEqual(revid1, tree1.get_file_revision("mylink"))
180
        self.assertEqual("symlink", tree1.kind("mylink"))
181
        self.assertEqual("target/", tree1.get_symlink_target("mylink"))
182
        self.assertEqual(revid2, tree2.get_file_revision("mylink"))
183
        self.assertEqual("directory", tree2.kind("mylink"))
184
        self.assertEqual(None, tree2.get_symlink_target("mylink"))
0.200.553 by Jelmer Vernooij
Support symlinks being turned into directories.
185
0.200.551 by Jelmer Vernooij
Properly set InventoryEntry revision when changing symlink targets.
186
    def test_changing_symlink(self):
187
        self.make_git_repo("d")
188
        os.chdir("d")
189
        bb = GitBranchBuilder()
190
        bb.set_symlink("mylink", "target")
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
191
        mark1 = bb.commit(b"Somebody <somebody@someorg.org>", b"mymsg1")
0.200.551 by Jelmer Vernooij
Properly set InventoryEntry revision when changing symlink targets.
192
        bb.set_symlink("mylink", "target/")
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
193
        mark2 = bb.commit(b"Somebody <somebody@someorg.org>", b"mymsg2")
0.200.551 by Jelmer Vernooij
Properly set InventoryEntry revision when changing symlink targets.
194
        marks = bb.finish()
195
        gitsha1 = marks[mark1]
196
        gitsha2 = marks[mark2]
197
        os.chdir("..")
198
        oldrepo = self.open_git_repo("d")
199
        newrepo = self.clone_git_repo("d", "f")
200
        revid1 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha1)
201
        revid2 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha2)
202
        tree1 = newrepo.revision_tree(revid1)
203
        tree2 = newrepo.revision_tree(revid2)
6964.2.3 by Jelmer Vernooij
Review comments.
204
        self.assertEqual(revid1, tree1.get_file_revision("mylink"))
205
        self.assertEqual("target", tree1.get_symlink_target("mylink"))
206
        self.assertEqual(revid2, tree2.get_file_revision("mylink"))
207
        self.assertEqual("target/", tree2.get_symlink_target("mylink"))
0.200.551 by Jelmer Vernooij
Properly set InventoryEntry revision when changing symlink targets.
208
0.228.2 by Jelmer Vernooij
Add test for fetching executables.
209
    def test_executable(self):
210
        self.make_git_repo("d")
211
        os.chdir("d")
212
        bb = GitBranchBuilder()
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
213
        bb.set_file("foobar", b"foo\nbar\n", True)
214
        bb.set_file("notexec", b"foo\nbar\n", False)
215
        mark = bb.commit(b"Somebody <somebody@someorg.org>", b"mymsg")
0.228.2 by Jelmer Vernooij
Add test for fetching executables.
216
        gitsha = bb.finish()[mark]
217
        os.chdir("..")
0.200.268 by Jelmer Vernooij
Add more fetch tests.
218
        oldrepo = self.open_git_repo("d")
0.228.2 by Jelmer Vernooij
Add test for fetching executables.
219
        newrepo = self.clone_git_repo("d", "f")
220
        revid = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha)
221
        tree = newrepo.revision_tree(revid)
222
        self.assertTrue(tree.has_filename("foobar"))
6964.2.3 by Jelmer Vernooij
Review comments.
223
        self.assertEqual(True, tree.is_executable("foobar"))
0.228.2 by Jelmer Vernooij
Add test for fetching executables.
224
        self.assertTrue(tree.has_filename("notexec"))
6964.2.3 by Jelmer Vernooij
Review comments.
225
        self.assertEqual(False, tree.is_executable("notexec"))
0.200.264 by Jelmer Vernooij
Add more tests.
226
0.200.537 by Jelmer Vernooij
Fix handling of not-executable files becoming executable without any other changes.
227
    def test_becomes_executable(self):
228
        self.make_git_repo("d")
229
        os.chdir("d")
230
        bb = GitBranchBuilder()
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
231
        bb.set_file("foobar", b"foo\nbar\n", False)
232
        mark1 = bb.commit(b"Somebody <somebody@someorg.org>", b"mymsg")
233
        bb.set_file("foobar", b"foo\nbar\n", True)
234
        mark2 = bb.commit(b"Somebody <somebody@someorg.org>", b"mymsg")
0.200.537 by Jelmer Vernooij
Fix handling of not-executable files becoming executable without any other changes.
235
        gitsha2 = bb.finish()[mark2]
236
        os.chdir("..")
237
        oldrepo = self.open_git_repo("d")
238
        newrepo = self.clone_git_repo("d", "f")
239
        revid = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha2)
240
        tree = newrepo.revision_tree(revid)
241
        self.assertTrue(tree.has_filename("foobar"))
6964.2.3 by Jelmer Vernooij
Review comments.
242
        self.assertEqual(True, tree.is_executable("foobar"))
243
        self.assertEqual(revid, tree.get_file_revision("foobar"))
0.200.537 by Jelmer Vernooij
Fix handling of not-executable files becoming executable without any other changes.
244
0.200.1404 by jelmer at samba
Add test for stacked on.
245
    def test_into_stacked_on(self):
246
        r = self.make_git_repo("d")
247
        os.chdir("d")
248
        bb = GitBranchBuilder()
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
249
        bb.set_file(u"foobar", b"foo\n", False)
250
        mark1 = bb.commit(b"Somebody <somebody@someorg.org>", b"mymsg1")
0.200.1404 by jelmer at samba
Add test for stacked on.
251
        gitsha1 = bb.finish()[mark1]
252
        os.chdir("..")
253
        stacked_on = self.clone_git_repo("d", "stacked-on")
254
        oldrepo = Repository.open("d")
255
        revid1 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha1)
6964.2.3 by Jelmer Vernooij
Review comments.
256
        self.assertEqual([revid1], stacked_on.all_revision_ids())
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
257
        b = stacked_on.controldir.create_branch()
0.200.1404 by jelmer at samba
Add test for stacked on.
258
        b.generate_revision_history(revid1)
6964.2.3 by Jelmer Vernooij
Review comments.
259
        self.assertEqual(b.last_revision(), revid1)
0.200.1404 by jelmer at samba
Add test for stacked on.
260
        tree = self.make_branch_and_tree("stacked")
261
        tree.branch.set_stacked_on_url(b.user_url)
262
        os.chdir("d")
263
        bb = GitBranchBuilder()
7027.2.1 by Jelmer Vernooij
Port fastimport to python3.
264
        bb.set_file(u"barbar", b"bar\n", False)
265
        bb.set_file(u"foo/blie/bla", b"bla\n", False)
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
266
        mark2 = bb.commit(b"Somebody <somebody@someorg.org>", b"mymsg2")
0.200.1404 by jelmer at samba
Add test for stacked on.
267
        gitsha2 = bb.finish()[mark2]
268
        revid2 = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha2)
269
        os.chdir("..")
270
        tree.branch.fetch(Branch.open("d"))
271
        tree.branch.repository.check()
272
        self.addCleanup(tree.lock_read().unlock)
6964.2.3 by Jelmer Vernooij
Review comments.
273
        self.assertEqual(
0.200.1404 by jelmer at samba
Add test for stacked on.
274
            set([(revid2,)]),
275
            tree.branch.repository.revisions.without_fallbacks().keys())
6964.2.3 by Jelmer Vernooij
Review comments.
276
        self.assertEqual(
0.200.1404 by jelmer at samba
Add test for stacked on.
277
            set([revid1, revid2]),
278
            set(tree.branch.repository.all_revision_ids()))
279
0.200.298 by Jelmer Vernooij
Add test for non-ascii characters.
280
    def test_non_ascii_characters(self):
281
        self.make_git_repo("d")
282
        os.chdir("d")
283
        bb = GitBranchBuilder()
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
284
        bb.set_file(u"foőbar", b"foo\nbar\n", False)
285
        mark = bb.commit(b"Somebody <somebody@someorg.org>", b"mymsg")
0.200.298 by Jelmer Vernooij
Add test for non-ascii characters.
286
        gitsha = bb.finish()[mark]
287
        os.chdir("..")
288
        oldrepo = self.open_git_repo("d")
289
        newrepo = self.clone_git_repo("d", "f")
290
        revid = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha)
291
        tree = newrepo.revision_tree(revid)
292
        self.assertTrue(tree.has_filename(u"foőbar"))
293
0.200.1403 by Jelmer Vernooij
Cope with tags pointing at tree objects when cloning local git repositories.
294
    def test_tagged_tree(self):
295
        r = self.make_git_repo("d")
296
        os.chdir("d")
297
        bb = GitBranchBuilder()
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
298
        bb.set_file("foobar", b"fooll\nbar\n", False)
299
        mark = bb.commit(b"Somebody <somebody@someorg.org>", b"nextmsg")
0.200.1403 by Jelmer Vernooij
Cope with tags pointing at tree objects when cloning local git repositories.
300
        marks = bb.finish()
301
        gitsha = marks[mark]
302
        tag = Tag()
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
303
        tag.name = b"sometag"
0.281.6 by William Grant
Fix test_tagged_tree to not create a non-integral tag timestamp.
304
        tag.tag_time = int(time.time())
0.200.1403 by Jelmer Vernooij
Cope with tags pointing at tree objects when cloning local git repositories.
305
        tag.tag_timezone = 0
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
306
        tag.tagger = b"Somebody <somebody@example.com>"
307
        tag.message = b"Created tag pointed at tree"
0.200.1403 by Jelmer Vernooij
Cope with tags pointing at tree objects when cloning local git repositories.
308
        tag.object = (Tree, r[gitsha].tree)
309
        r.object_store.add_object(tag)
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
310
        r[b"refs/tags/sometag"] = tag
0.200.1403 by Jelmer Vernooij
Cope with tags pointing at tree objects when cloning local git repositories.
311
        os.chdir("..")
312
        oldrepo = self.open_git_repo("d")
313
        revid = oldrepo.get_mapping().revision_id_foreign_to_bzr(gitsha)
314
        newrepo = self.clone_git_repo("d", "f")
6964.2.3 by Jelmer Vernooij
Review comments.
315
        self.assertEqual(set([revid]), set(newrepo.all_revision_ids()))
0.200.1403 by Jelmer Vernooij
Cope with tags pointing at tree objects when cloning local git repositories.
316
0.200.264 by Jelmer Vernooij
Add more tests.
317
0.200.269 by Jelmer Vernooij
Prepare for testing remote repos.
318
class LocalRepositoryFetchTests(RepositoryFetchTests, TestCaseWithTransport):
319
320
    def open_git_repo(self, path):
321
        return Repository.open(path)
322
323
0.200.839 by Jelmer Vernooij
Add convenience object for updating the object store caching layer.
324
class DummyStoreUpdater(object):
325
0.200.952 by Jelmer Vernooij
Write git pack files rather than loose objects.
326
    def add_object(self, obj, ie, path):
0.200.839 by Jelmer Vernooij
Add convenience object for updating the object store caching layer.
327
        pass
328
329
    def finish(self):
330
        pass
331
332
0.200.264 by Jelmer Vernooij
Add more tests.
333
class ImportObjects(TestCaseWithTransport):
334
335
    def setUp(self):
336
        super(ImportObjects, self).setUp()
0.200.265 by Jelmer Vernooij
Add more tests.
337
        self._mapping = BzrGitMappingv1()
0.200.264 by Jelmer Vernooij
Add more tests.
338
        factory = knit.make_file_factory(True, versionedfile.PrefixMapper())
339
        self._texts = factory(self.get_transport('texts'))
340
7069.1.3 by Jelmer Vernooij
Fix test.
341
    def test_import_blob_missing_in_one_parent(self):
342
        builder = self.make_branch_builder('br')
343
        builder.start_series()
344
        rev_root = builder.build_snapshot(None, [
345
            ('add', ('', b'rootid', 'directory', ''))])
346
        rev1 = builder.build_snapshot([rev_root], [
347
            ('add', ('bla', self._mapping.generate_file_id('bla'), 'file', b'content'))])
348
        rev2 = builder.build_snapshot([rev_root], [])
349
        builder.finish_series()
350
        branch = builder.get_branch()
7069.1.2 by Jelmer Vernooij
Add test.
351
352
        blob = Blob.from_string(b"bar")
353
        objs = { "blobname": blob}
354
        ret = import_git_blob(self._texts, self._mapping, b"bla", b"bla",
355
            (None, "blobname"),
7069.1.3 by Jelmer Vernooij
Fix test.
356
            branch.repository.revision_tree(rev1), b'rootid', b"somerevid",
357
            [branch.repository.revision_tree(r) for r in [rev1, rev2]],
358
            objs.__getitem__,
7069.1.2 by Jelmer Vernooij
Add test.
359
            (None, DEFAULT_FILE_MODE), DummyStoreUpdater(),
360
            self._mapping.generate_file_id)
361
        self.assertEqual(set([(b'git:bla', b'somerevid')]), self._texts.keys())
362
0.200.264 by Jelmer Vernooij
Add more tests.
363
    def test_import_blob_simple(self):
6973.13.2 by Jelmer Vernooij
Fix some more tests.
364
        blob = Blob.from_string(b"bar")
0.200.306 by Jelmer Vernooij
Fix tests, split up InterGitNonGitRepository.
365
        objs = { "blobname": blob}
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
366
        ret = import_git_blob(self._texts, self._mapping, b"bla", b"bla",
7027.3.4 by Jelmer Vernooij
Some fixes.
367
            (None, "blobname"),
7069.1.2 by Jelmer Vernooij
Add test.
368
            None, None, b"somerevid", [], objs.__getitem__,
0.200.896 by Jelmer Vernooij
Add separate function for looking up file ids.
369
            (None, DEFAULT_FILE_MODE), DummyStoreUpdater(),
370
            self._mapping.generate_file_id)
6973.13.2 by Jelmer Vernooij
Fix some more tests.
371
        self.assertEqual(set([(b'git:bla', b'somerevid')]), self._texts.keys())
7018.3.10 by Jelmer Vernooij
Consistent return values in PreviewTree.list_files.
372
        self.assertEqual(next(self._texts.get_record_stream([(b'git:bla', b'somerevid')],
7027.3.4 by Jelmer Vernooij
Some fixes.
373
            "unordered", True)).get_bytes_as("fulltext"), b"bar")
374
        self.assertEqual(1, len(ret))
6964.2.3 by Jelmer Vernooij
Review comments.
375
        self.assertEqual(None, ret[0][0])
376
        self.assertEqual("bla", ret[0][1])
0.229.3 by Jelmer Vernooij
Use inventory deltas internally so fetch is O(changes) rather than O(tree).
377
        ie = ret[0][3]
6964.2.3 by Jelmer Vernooij
Review comments.
378
        self.assertEqual(False, ie.executable)
379
        self.assertEqual("file", ie.kind)
6973.13.2 by Jelmer Vernooij
Fix some more tests.
380
        self.assertEqual(b"somerevid", ie.revision)
7027.3.4 by Jelmer Vernooij
Some fixes.
381
        self.assertEqual(osutils.sha_strings([b"bar"]), ie.text_sha1)
0.200.265 by Jelmer Vernooij
Add more tests.
382
383
    def test_import_tree_empty_root(self):
384
        tree = Tree()
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
385
        ret, child_modes = import_git_tree(self._texts, self._mapping, b"", b"",
7069.1.2 by Jelmer Vernooij
Add test.
386
               (None, tree.id), None,
6973.13.2 by Jelmer Vernooij
Fix some more tests.
387
               None, b"somerevid", [], {tree.id: tree}.__getitem__,
0.200.896 by Jelmer Vernooij
Add separate function for looking up file ids.
388
               (None, stat.S_IFDIR), DummyStoreUpdater(),
389
               self._mapping.generate_file_id)
6964.2.3 by Jelmer Vernooij
Review comments.
390
        self.assertEqual(child_modes, {})
6973.13.2 by Jelmer Vernooij
Fix some more tests.
391
        self.assertEqual(set([(b"TREE_ROOT", b'somerevid')]), self._texts.keys())
6964.2.3 by Jelmer Vernooij
Review comments.
392
        self.assertEqual(1, len(ret))
393
        self.assertEqual(None, ret[0][0])
394
        self.assertEqual("", ret[0][1])
0.229.3 by Jelmer Vernooij
Use inventory deltas internally so fetch is O(changes) rather than O(tree).
395
        ie = ret[0][3]
6964.2.3 by Jelmer Vernooij
Review comments.
396
        self.assertEqual(False, ie.executable)
397
        self.assertEqual("directory", ie.kind)
398
        self.assertEqual({}, ie.children)
6973.13.2 by Jelmer Vernooij
Fix some more tests.
399
        self.assertEqual(b"somerevid", ie.revision)
6964.2.3 by Jelmer Vernooij
Review comments.
400
        self.assertEqual(None, ie.text_sha1)
0.200.265 by Jelmer Vernooij
Add more tests.
401
402
    def test_import_tree_empty(self):
403
        tree = Tree()
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
404
        ret, child_modes = import_git_tree(self._texts, self._mapping, b"bla", b"bla",
7069.1.2 by Jelmer Vernooij
Add test.
405
           (None, tree.id), None, None, b"somerevid", [],
0.200.817 by Jelmer Vernooij
Deal with all modes locally.
406
           { tree.id: tree }.__getitem__,
0.200.896 by Jelmer Vernooij
Add separate function for looking up file ids.
407
           (None, stat.S_IFDIR), DummyStoreUpdater(),
408
           self._mapping.generate_file_id)
6964.2.3 by Jelmer Vernooij
Review comments.
409
        self.assertEqual(child_modes, {})
6973.13.2 by Jelmer Vernooij
Fix some more tests.
410
        self.assertEqual(set([(b"git:bla", b'somerevid')]), self._texts.keys())
6964.2.3 by Jelmer Vernooij
Review comments.
411
        self.assertEqual(1, len(ret))
412
        self.assertEqual(None, ret[0][0])
413
        self.assertEqual("bla", ret[0][1])
0.229.3 by Jelmer Vernooij
Use inventory deltas internally so fetch is O(changes) rather than O(tree).
414
        ie = ret[0][3]
6964.2.3 by Jelmer Vernooij
Review comments.
415
        self.assertEqual("directory", ie.kind)
416
        self.assertEqual(False, ie.executable)
417
        self.assertEqual({}, ie.children)
6973.13.2 by Jelmer Vernooij
Fix some more tests.
418
        self.assertEqual(b"somerevid", ie.revision)
6964.2.3 by Jelmer Vernooij
Review comments.
419
        self.assertEqual(None, ie.text_sha1)
0.200.267 by Jelmer Vernooij
Add more tests for fetch code.
420
421
    def test_import_tree_with_file(self):
6973.13.2 by Jelmer Vernooij
Fix some more tests.
422
        blob = Blob.from_string(b"bar1")
0.200.267 by Jelmer Vernooij
Add more tests for fetch code.
423
        tree = Tree()
6973.13.2 by Jelmer Vernooij
Fix some more tests.
424
        tree.add(b"foo", stat.S_IFREG | 0o644, blob.id)
0.200.267 by Jelmer Vernooij
Add more tests for fetch code.
425
        objects = { blob.id: blob, tree.id: tree }
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
426
        ret, child_modes = import_git_tree(self._texts, self._mapping, b"bla", b"bla",
7069.1.2 by Jelmer Vernooij
Add test.
427
                (None, tree.id), None, None, b"somerevid", [],
0.200.896 by Jelmer Vernooij
Add separate function for looking up file ids.
428
            objects.__getitem__, (None, stat.S_IFDIR), DummyStoreUpdater(),
429
            self._mapping.generate_file_id)
6964.2.3 by Jelmer Vernooij
Review comments.
430
        self.assertEqual(child_modes, {})
431
        self.assertEqual(2, len(ret))
432
        self.assertEqual(None, ret[0][0])
433
        self.assertEqual("bla", ret[0][1])
434
        self.assertEqual(None, ret[1][0])
435
        self.assertEqual("bla/foo", ret[1][1])
0.229.3 by Jelmer Vernooij
Use inventory deltas internally so fetch is O(changes) rather than O(tree).
436
        ie = ret[0][3]
6964.2.3 by Jelmer Vernooij
Review comments.
437
        self.assertEqual("directory", ie.kind)
0.229.3 by Jelmer Vernooij
Use inventory deltas internally so fetch is O(changes) rather than O(tree).
438
        ie = ret[1][3]
6964.2.3 by Jelmer Vernooij
Review comments.
439
        self.assertEqual("file", ie.kind)
6973.13.2 by Jelmer Vernooij
Fix some more tests.
440
        self.assertEqual(b"git:bla/foo", ie.file_id)
441
        self.assertEqual(b"somerevid", ie.revision)
442
        self.assertEqual(osutils.sha_strings([b"bar1"]), ie.text_sha1)
6964.2.3 by Jelmer Vernooij
Review comments.
443
        self.assertEqual(False, ie.executable)
0.200.267 by Jelmer Vernooij
Add more tests for fetch code.
444
0.200.878 by Jelmer Vernooij
Fix determining of unusual file modes.
445
    def test_import_tree_with_unusual_mode_file(self):
6973.13.2 by Jelmer Vernooij
Fix some more tests.
446
        blob = Blob.from_string(b"bar1")
0.200.878 by Jelmer Vernooij
Fix determining of unusual file modes.
447
        tree = Tree()
6973.13.2 by Jelmer Vernooij
Fix some more tests.
448
        tree.add(b"foo", stat.S_IFREG | 0o664, blob.id)
0.200.878 by Jelmer Vernooij
Fix determining of unusual file modes.
449
        objects = { blob.id: blob, tree.id: tree }
0.200.1152 by Jelmer Vernooij
Require dulwich 0.7.1.
450
        ret, child_modes = import_git_tree(self._texts, self._mapping,
7069.1.2 by Jelmer Vernooij
Add test.
451
            b"bla", b"bla", (None, tree.id), None, None, b"somerevid", [],
0.200.896 by Jelmer Vernooij
Add separate function for looking up file ids.
452
            objects.__getitem__, (None, stat.S_IFDIR), DummyStoreUpdater(),
453
            self._mapping.generate_file_id)
7027.3.4 by Jelmer Vernooij
Some fixes.
454
        self.assertEqual(child_modes, { b"bla/foo": stat.S_IFREG | 0o664 })
0.200.878 by Jelmer Vernooij
Fix determining of unusual file modes.
455
0.200.267 by Jelmer Vernooij
Add more tests for fetch code.
456
    def test_import_tree_with_file_exe(self):
6973.13.2 by Jelmer Vernooij
Fix some more tests.
457
        blob = Blob.from_string(b"bar")
0.200.267 by Jelmer Vernooij
Add more tests for fetch code.
458
        tree = Tree()
6973.13.2 by Jelmer Vernooij
Fix some more tests.
459
        tree.add(b"foo", 0o100755, blob.id)
0.200.267 by Jelmer Vernooij
Add more tests for fetch code.
460
        objects = { blob.id: blob, tree.id: tree }
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
461
        ret, child_modes = import_git_tree(self._texts, self._mapping, b"", b"",
7069.1.2 by Jelmer Vernooij
Add test.
462
                (None, tree.id), None, None, b"somerevid", [],
0.200.896 by Jelmer Vernooij
Add separate function for looking up file ids.
463
            objects.__getitem__, (None, stat.S_IFDIR), DummyStoreUpdater(),
464
            self._mapping.generate_file_id)
6964.2.3 by Jelmer Vernooij
Review comments.
465
        self.assertEqual(child_modes, {})
466
        self.assertEqual(2, len(ret))
467
        self.assertEqual(None, ret[0][0])
468
        self.assertEqual("", ret[0][1])
469
        self.assertEqual(None, ret[1][0])
470
        self.assertEqual("foo", ret[1][1])
0.229.3 by Jelmer Vernooij
Use inventory deltas internally so fetch is O(changes) rather than O(tree).
471
        ie = ret[0][3]
6964.2.3 by Jelmer Vernooij
Review comments.
472
        self.assertEqual("directory", ie.kind)
0.229.3 by Jelmer Vernooij
Use inventory deltas internally so fetch is O(changes) rather than O(tree).
473
        ie = ret[1][3]
6964.2.3 by Jelmer Vernooij
Review comments.
474
        self.assertEqual("file", ie.kind)
475
        self.assertEqual(True, ie.executable)
0.200.1408 by Jelmer Vernooij
Remove old ie children when converting directory into tree reference.
476
477
    def test_directory_converted_to_submodule(self):
478
        base_inv = Inventory()
479
        base_inv.add_path("foo", "directory")
480
        base_inv.add_path("foo/bar", "file")
6973.13.2 by Jelmer Vernooij
Fix some more tests.
481
        othertree = Blob.from_string(b"someotherthing")
482
        blob = Blob.from_string(b"bar")
0.200.1408 by Jelmer Vernooij
Remove old ie children when converting directory into tree reference.
483
        tree = Tree()
6973.13.2 by Jelmer Vernooij
Fix some more tests.
484
        tree.add(b"bar", 0o160000, blob.id)
0.200.1408 by Jelmer Vernooij
Remove old ie children when converting directory into tree reference.
485
        objects = { tree.id: tree }
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
486
        ret, child_modes = import_git_submodule(self._texts, self._mapping, b"foo", b"foo",
6973.13.2 by Jelmer Vernooij
Fix some more tests.
487
                (tree.id, othertree.id), base_inv, base_inv.root.file_id, b"somerevid", [],
6964.2.1 by Jelmer Vernooij
Initial work to support brz-git on python3.
488
                objects.__getitem__, (stat.S_IFDIR | 0o755, S_IFGITLINK), DummyStoreUpdater(),
0.200.1408 by Jelmer Vernooij
Remove old ie children when converting directory into tree reference.
489
                self._mapping.generate_file_id)
6964.2.3 by Jelmer Vernooij
Review comments.
490
        self.assertEqual(child_modes, {})
491
        self.assertEqual(2, len(ret))
492
        self.assertEqual(ret[0], ("foo/bar", None, base_inv.path2id("foo/bar"), None))
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
493
        self.assertEqual(ret[1][:3], ("foo", b"foo", self._mapping.generate_file_id("foo")))
0.200.1408 by Jelmer Vernooij
Remove old ie children when converting directory into tree reference.
494
        ie = ret[1][3]
6964.2.3 by Jelmer Vernooij
Review comments.
495
        self.assertEqual(ie.kind, "tree-reference")