/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
1
# Copyright (C) 2007 Canonical Ltd
0.200.252 by Jelmer Vernooij
Clarify history, copyright.
2
# Copyright (C) 2008-2009 Jelmer Vernooij <jelmer@samba.org>
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
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
18
"""An adapter between a Git Repository and a Bazaar Branch"""
19
0.200.45 by David Allouche
More performance hacking, introduce sqlite cache, escape characters in commits that break serializers.
20
import bzrlib
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
21
from bzrlib import (
0.200.43 by David Allouche
Ultra-experimental support for "bzr pull". No test. No sanity.
22
    errors,
0.200.132 by Jelmer Vernooij
Use parents cache, don't set author revision property if it's equal to committer.
23
    graph,
0.200.38 by David Allouche
Reimplement GitRepository.get_inventory, simpler and faster.
24
    inventory,
0.200.43 by David Allouche
Ultra-experimental support for "bzr pull". No test. No sanity.
25
    osutils,
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
26
    repository,
0.200.29 by David Allouche
Smoke test for GitRepository.get_revision, and corresponding fixes.
27
    revision,
0.200.39 by David Allouche
Black-box text for "bzr log" in a git tree. Further simplification of GitRevisionTree.
28
    revisiontree,
0.200.211 by Jelmer Vernooij
Add basic infrastructure for dpush.
29
    ui,
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
30
    urlutils,
31
    )
0.200.115 by Jelmer Vernooij
Pass mapping object.
32
from bzrlib.foreign import (
0.200.292 by Jelmer Vernooij
Fix formatting.
33
    ForeignRepository,
34
    )
35
from bzrlib.trace import (
36
    mutter,
37
    )
38
from bzrlib.transport import (
39
    get_transport,
40
    )
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
41
0.209.1 by Ali Sabil
Fixed wrong import for versionedfiles in repository.py
42
from bzrlib.plugins.git.foreign import (
0.208.5 by Jelmer Vernooij
Add log show function for git.
43
    versionedfiles,
0.200.20 by John Arbash Meinel
All tests are passing again
44
    )
0.200.256 by Jelmer Vernooij
Add tests for import_revision_gist.
45
from bzrlib.plugins.git.mapping import (
46
    default_mapping,
47
    inventory_to_tree_and_blobs,
48
    mapping_registry,
49
    revision_to_commit,
50
    )
0.200.292 by Jelmer Vernooij
Fix formatting.
51
from bzrlib.plugins.git.versionedfiles import (
52
    GitTexts,
53
    )
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
54
0.200.289 by Jelmer Vernooij
Cope with new member variables in RepositoryFormat.
55
import dulwich as git
56
import os
57
import time
58
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
59
0.200.120 by Jelmer Vernooij
Use API closer to that of python-git.
60
class GitTags(object):
61
62
    def __init__(self, tags):
63
        self._tags = tags
64
65
    def __iter__(self):
66
        return iter(self._tags)
67
68
0.200.115 by Jelmer Vernooij
Pass mapping object.
69
class GitRepository(ForeignRepository):
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
70
    """An adapter to git repositories for bzr."""
71
0.200.41 by David Allouche
Define _serializer = None in GitRepository.
72
    _serializer = None
73
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
74
    def __init__(self, gitdir, lockfiles):
0.200.289 by Jelmer Vernooij
Cope with new member variables in RepositoryFormat.
75
        ForeignRepository.__init__(self, GitRepositoryFormat(), gitdir, 
76
            lockfiles)
0.200.291 by Jelmer Vernooij
Print proper error about not supporting push.
77
        from bzrlib.plugins.git import fetch, push
0.200.306 by Jelmer Vernooij
Fix tests, split up InterGitNonGitRepository.
78
        for optimiser in [fetch.InterRemoteGitNonGitRepository, 
79
                          fetch.InterLocalGitNonGitRepository,
80
                          fetch.InterGitRepository,
0.200.291 by Jelmer Vernooij
Print proper error about not supporting push.
81
                          push.InterToGitRepository]:
0.200.276 by Jelmer Vernooij
Improve formatting.
82
            repository.InterRepository.register_optimiser(optimiser)
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
83
84
    def is_shared(self):
85
        return True
86
87
    def supports_rich_root(self):
88
        return True
89
90
    def _warn_if_deprecated(self):
91
        # This class isn't deprecated
92
        pass
93
94
    def get_mapping(self):
95
        return default_mapping
96
0.200.147 by Jelmer Vernooij
Merge new dulwich; fetching objects from local repository works now; they aren't converted yet though.
97
    def make_working_trees(self):
98
        return True
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
99
100
101
class LocalGitRepository(GitRepository):
0.200.276 by Jelmer Vernooij
Improve formatting.
102
    """Git repository on the file system."""
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
103
104
    def __init__(self, gitdir, lockfiles):
0.200.132 by Jelmer Vernooij
Use parents cache, don't set author revision property if it's equal to committer.
105
        # FIXME: This also caches negatives. Need to be more careful 
106
        # about this once we start writing to git
107
        self._parents_provider = graph.CachingParentsProvider(self)
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
108
        GitRepository.__init__(self, gitdir, lockfiles)
0.200.61 by Jelmer Vernooij
Fix tests.
109
        self.base = gitdir.root_transport.base
0.200.90 by Jelmer Vernooij
Basic support for opening working trees.
110
        self._git = gitdir._git
0.200.56 by Jelmer Vernooij
Switch to using GitPython rather than our own in-house stuff.
111
        self.texts = None
0.200.92 by Jelmer Vernooij
Update versionedfiles.
112
        self.signatures = versionedfiles.VirtualSignatureTexts(self)
113
        self.revisions = versionedfiles.VirtualRevisionTexts(self)
0.200.207 by Jelmer Vernooij
Provide Repository.inventories.
114
        self.inventories = versionedfiles.VirtualInventoryTexts(self)
0.200.209 by Jelmer Vernooij
Pass repository object to versionedfiles.
115
        self.texts = GitTexts(self)
0.200.120 by Jelmer Vernooij
Use API closer to that of python-git.
116
        self.tags = GitTags(self._git.get_tags())
0.200.45 by David Allouche
More performance hacking, introduce sqlite cache, escape characters in commits that break serializers.
117
0.200.131 by Jelmer Vernooij
Fix all tests but two, use rich roots by default.
118
    def all_revision_ids(self):
119
        ret = set([revision.NULL_REVISION])
0.200.254 by Jelmer Vernooij
Fix tests.
120
        heads = self._git.heads()
121
        if heads == {}:
0.200.131 by Jelmer Vernooij
Fix all tests but two, use rich roots by default.
122
            return ret
0.200.254 by Jelmer Vernooij
Fix tests.
123
        bzr_heads = [self.get_mapping().revision_id_foreign_to_bzr(h) for h in heads.itervalues()]
0.200.131 by Jelmer Vernooij
Fix all tests but two, use rich roots by default.
124
        ret = set(bzr_heads)
125
        graph = self.get_graph()
126
        for rev, parents in graph.iter_ancestry(bzr_heads):
127
            ret.add(rev)
0.200.74 by Jelmer Vernooij
Implement Repository.all_revision_ids().
128
        return ret
129
0.200.82 by Jelmer Vernooij
Support listing tags.
130
    #def get_revision_delta(self, revision_id):
131
    #    parent_revid = self.get_revision(revision_id).parent_ids[0]
132
    #    diff = self._git.diff(ids.convert_revision_id_bzr_to_git(parent_revid),
133
    #                   ids.convert_revision_id_bzr_to_git(revision_id))
134
0.200.132 by Jelmer Vernooij
Use parents cache, don't set author revision property if it's equal to committer.
135
    def _make_parents_provider(self):
136
        """See Repository._make_parents_provider()."""
137
        return self._parents_provider
138
0.200.131 by Jelmer Vernooij
Fix all tests but two, use rich roots by default.
139
    def get_parent_map(self, revids):
140
        parent_map = {}
0.200.132 by Jelmer Vernooij
Use parents cache, don't set author revision property if it's equal to committer.
141
        mutter("get_parent_map(%r)", revids)
0.200.131 by Jelmer Vernooij
Fix all tests but two, use rich roots by default.
142
        for revision_id in revids:
143
            assert isinstance(revision_id, str)
144
            if revision_id == revision.NULL_REVISION:
145
                parent_map[revision_id] = ()
146
                continue
0.200.195 by Jelmer Vernooij
Return mapping in revision_id_bzr_to_foreign() as required by the interface.
147
            hexsha, mapping = self.lookup_git_revid(revision_id)
0.200.131 by Jelmer Vernooij
Fix all tests but two, use rich roots by default.
148
            commit  = self._git.commit(hexsha)
149
            if commit is None:
150
                continue
151
            else:
0.200.195 by Jelmer Vernooij
Return mapping in revision_id_bzr_to_foreign() as required by the interface.
152
                parent_map[revision_id] = [mapping.revision_id_foreign_to_bzr(p) for p in commit.parents]
0.200.131 by Jelmer Vernooij
Fix all tests but two, use rich roots by default.
153
        return parent_map
154
155
    def get_ancestry(self, revision_id, topo_sorted=True):
156
        """See Repository.get_ancestry().
157
        """
158
        if revision_id is None:
0.200.237 by Jelmer Vernooij
Fix get_ancestry() contents.
159
            return [None, revision.NULL_REVISION] + self._all_revision_ids()
0.200.131 by Jelmer Vernooij
Fix all tests but two, use rich roots by default.
160
        assert isinstance(revision_id, str)
161
        ancestry = []
162
        graph = self.get_graph()
163
        for rev, parents in graph.iter_ancestry([revision_id]):
164
            ancestry.append(rev)
165
        ancestry.reverse()
0.200.237 by Jelmer Vernooij
Fix get_ancestry() contents.
166
        return [None] + ancestry
0.200.43 by David Allouche
Ultra-experimental support for "bzr pull". No test. No sanity.
167
0.200.212 by Jelmer Vernooij
Move conversion functions to mapping, use fetch_objects() from repository if present.
168
    def import_revision_gist(self, source, revid, parent_lookup):
0.200.256 by Jelmer Vernooij
Add tests for import_revision_gist.
169
        """Import the gist of a revision into this Git repository.
0.200.212 by Jelmer Vernooij
Move conversion functions to mapping, use fetch_objects() from repository if present.
170
171
        """
0.200.213 by Jelmer Vernooij
Move functions to mapping.
172
        objects = []
0.200.212 by Jelmer Vernooij
Move conversion functions to mapping, use fetch_objects() from repository if present.
173
        rev = source.get_revision(revid)
0.200.213 by Jelmer Vernooij
Move functions to mapping.
174
        for sha, object, path in inventory_to_tree_and_blobs(source, None, revid):
175
            if path == "":
176
                tree_sha = sha
0.200.221 by Jelmer Vernooij
Add FOSDEM roundtripping notes.
177
            objects.append((object, path))
0.200.213 by Jelmer Vernooij
Move functions to mapping.
178
        commit = revision_to_commit(rev, tree_sha, parent_lookup)
0.200.221 by Jelmer Vernooij
Add FOSDEM roundtripping notes.
179
        objects.append((commit, None))
180
        self._git.object_store.add_objects(objects)
0.200.222 by Jelmer Vernooij
Dpush works \o/
181
        return commit.sha().hexdigest()
0.200.211 by Jelmer Vernooij
Add basic infrastructure for dpush.
182
183
    def dfetch(self, source, stop_revision):
0.200.256 by Jelmer Vernooij
Add tests for import_revision_gist.
184
        """Import the gist of the ancestry of a particular revision."""
0.200.211 by Jelmer Vernooij
Add basic infrastructure for dpush.
185
        if stop_revision is None:
186
            raise NotImplementedError
187
        revidmap = {}
0.200.222 by Jelmer Vernooij
Dpush works \o/
188
        gitidmap = {}
0.200.282 by Jelmer Vernooij
Support dpushing with existing parents.
189
        def parent_lookup(revid):
190
            try:
191
                return gitidmap[revid]
192
            except KeyError:
193
                return self.lookup_git_revid(revid)[0]
0.200.211 by Jelmer Vernooij
Add basic infrastructure for dpush.
194
        todo = []
0.200.222 by Jelmer Vernooij
Dpush works \o/
195
        source.lock_write()
0.200.211 by Jelmer Vernooij
Add basic infrastructure for dpush.
196
        try:
197
            graph = source.get_graph()
0.200.222 by Jelmer Vernooij
Dpush works \o/
198
            ancestry = [x for x in source.get_ancestry(stop_revision) if x is not None]
199
            for revid in graph.iter_topo_order(ancestry):
0.200.211 by Jelmer Vernooij
Add basic infrastructure for dpush.
200
                if not self.has_revision(revid):
201
                    todo.append(revid)
202
            pb = ui.ui_factory.nested_progress_bar()
203
            try:
0.200.222 by Jelmer Vernooij
Dpush works \o/
204
                for i, revid in enumerate(todo):
0.200.211 by Jelmer Vernooij
Add basic infrastructure for dpush.
205
                    pb.update("pushing revisions", i, len(todo))
0.200.276 by Jelmer Vernooij
Improve formatting.
206
                    git_commit = self.import_revision_gist(source, revid,
0.200.282 by Jelmer Vernooij
Support dpushing with existing parents.
207
                        parent_lookup)
0.200.222 by Jelmer Vernooij
Dpush works \o/
208
                    gitidmap[revid] = git_commit
0.200.276 by Jelmer Vernooij
Improve formatting.
209
                    git_revid = self.get_mapping().revision_id_foreign_to_bzr(
210
                        git_commit)
0.200.222 by Jelmer Vernooij
Dpush works \o/
211
                    revidmap[revid] = git_revid
0.200.211 by Jelmer Vernooij
Add basic infrastructure for dpush.
212
            finally:
213
                pb.finished()
0.200.222 by Jelmer Vernooij
Dpush works \o/
214
            source.fetch(self, revision_id=revidmap[stop_revision])
0.200.211 by Jelmer Vernooij
Add basic infrastructure for dpush.
215
        finally:
216
            source.unlock()
217
        return revidmap
218
0.200.43 by David Allouche
Ultra-experimental support for "bzr pull". No test. No sanity.
219
    def get_signature_text(self, revision_id):
220
        raise errors.NoSuchRevision(self, revision_id)
221
0.200.124 by Jelmer Vernooij
Add lookup_revision_id stub.
222
    def lookup_revision_id(self, revid):
223
        """Lookup a revision id.
224
        
225
        :param revid: Bazaar revision id.
226
        :return: Tuple with git revisionid and mapping.
227
        """
228
        # Yes, this doesn't really work, but good enough as a stub
229
        return osutils.sha(rev_id).hexdigest(), self.get_mapping()
230
0.200.60 by Jelmer Vernooij
Support signature functions.
231
    def has_signature_for_revision_id(self, revision_id):
232
        return False
233
0.200.195 by Jelmer Vernooij
Return mapping in revision_id_bzr_to_foreign() as required by the interface.
234
    def lookup_git_revid(self, bzr_revid):
0.200.105 by Jelmer Vernooij
Add common function for finding git commit by bzr revid.
235
        try:
0.200.195 by Jelmer Vernooij
Return mapping in revision_id_bzr_to_foreign() as required by the interface.
236
            return mapping_registry.revision_id_bzr_to_foreign(bzr_revid)
0.200.105 by Jelmer Vernooij
Add common function for finding git commit by bzr revid.
237
        except errors.InvalidRevisionId:
0.200.131 by Jelmer Vernooij
Fix all tests but two, use rich roots by default.
238
            raise errors.NoSuchRevision(self, bzr_revid)
0.200.105 by Jelmer Vernooij
Add common function for finding git commit by bzr revid.
239
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
240
    def get_revision(self, revision_id):
0.200.195 by Jelmer Vernooij
Return mapping in revision_id_bzr_to_foreign() as required by the interface.
241
        git_commit_id, mapping = self.lookup_git_revid(revision_id)
0.200.147 by Jelmer Vernooij
Merge new dulwich; fetching objects from local repository works now; they aren't converted yet though.
242
        try:
243
            commit = self._git.commit(git_commit_id)
244
        except KeyError:
245
            raise errors.NoSuchRevision(self, revision_id)
0.204.5 by James Westby
Lose the debuggin prints.
246
        # print "fetched revision:", git_commit_id
0.200.195 by Jelmer Vernooij
Return mapping in revision_id_bzr_to_foreign() as required by the interface.
247
        revision = mapping.import_commit(commit)
0.200.131 by Jelmer Vernooij
Fix all tests but two, use rich roots by default.
248
        assert revision is not None
0.200.43 by David Allouche
Ultra-experimental support for "bzr pull". No test. No sanity.
249
        return revision
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
250
251
    def has_revision(self, revision_id):
252
        try:
253
            self.get_revision(revision_id)
0.200.130 by Jelmer Vernooij
Make most tree inspection tests succeed.
254
        except errors.NoSuchRevision:
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
255
            return False
256
        else:
257
            return True
258
0.200.131 by Jelmer Vernooij
Fix all tests but two, use rich roots by default.
259
    def get_revisions(self, revids):
0.200.134 by Jelmer Vernooij
Fix get_revisions().
260
        return [self.get_revision(r) for r in revids]
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
261
262
    def revision_trees(self, revids):
263
        for revid in revids:
264
            yield self.revision_tree(revid)
265
266
    def revision_tree(self, revision_id):
0.200.57 by Jelmer Vernooij
Fix more tests.
267
        revision_id = revision.ensure_null(revision_id)
268
        if revision_id == revision.NULL_REVISION:
269
            inv = inventory.Inventory(root_id=None)
270
            inv.revision_id = revision_id
271
            return revisiontree.RevisionTree(self, inv, revision_id)
0.200.195 by Jelmer Vernooij
Return mapping in revision_id_bzr_to_foreign() as required by the interface.
272
        return GitRevisionTree(self, revision_id)
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
273
274
    def get_inventory(self, revision_id):
0.200.57 by Jelmer Vernooij
Fix more tests.
275
        assert revision_id != None
276
        return self.revision_tree(revision_id).inventory
0.200.43 by David Allouche
Ultra-experimental support for "bzr pull". No test. No sanity.
277
0.200.108 by Jelmer Vernooij
Support bzr init --git.
278
    def set_make_working_trees(self, trees):
279
        pass
280
0.200.276 by Jelmer Vernooij
Improve formatting.
281
    def fetch_objects(self, determine_wants, graph_walker, resolve_ext_ref,
282
        progress=None):
0.200.146 by Jelmer Vernooij
Merge dulwich.
283
        return self._git.fetch_objects(determine_wants, graph_walker, progress)
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
284
0.200.43 by David Allouche
Ultra-experimental support for "bzr pull". No test. No sanity.
285
0.200.39 by David Allouche
Black-box text for "bzr log" in a git tree. Further simplification of GitRevisionTree.
286
class GitRevisionTree(revisiontree.RevisionTree):
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
287
0.200.195 by Jelmer Vernooij
Return mapping in revision_id_bzr_to_foreign() as required by the interface.
288
    def __init__(self, repository, revision_id):
0.200.39 by David Allouche
Black-box text for "bzr log" in a git tree. Further simplification of GitRevisionTree.
289
        self._repository = repository
0.200.58 by Jelmer Vernooij
Fix remaining tests.
290
        self.revision_id = revision_id
0.200.149 by Jelmer Vernooij
Raise proper NoSuchRevision exception.
291
        assert isinstance(revision_id, str)
0.200.195 by Jelmer Vernooij
Return mapping in revision_id_bzr_to_foreign() as required by the interface.
292
        git_id, self.mapping = repository.lookup_git_revid(revision_id)
0.200.149 by Jelmer Vernooij
Raise proper NoSuchRevision exception.
293
        try:
0.200.153 by Jelmer Vernooij
Merge new dulwich.
294
            commit = repository._git.commit(git_id)
295
        except KeyError, r:
0.200.149 by Jelmer Vernooij
Raise proper NoSuchRevision exception.
296
            raise errors.NoSuchRevision(repository, revision_id)
0.200.153 by Jelmer Vernooij
Merge new dulwich.
297
        self.tree = commit.tree
0.200.58 by Jelmer Vernooij
Fix remaining tests.
298
        self._inventory = inventory.Inventory(revision_id=revision_id)
299
        self._inventory.root.revision = revision_id
300
        self._build_inventory(self.tree, self._inventory.root, "")
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
301
0.200.79 by Jelmer Vernooij
Implement RevisionTree.get_revision_id().
302
    def get_revision_id(self):
303
        return self.revision_id
304
0.200.87 by Jelmer Vernooij
Remove cache usage.
305
    def get_file_text(self, file_id):
0.200.43 by David Allouche
Ultra-experimental support for "bzr pull". No test. No sanity.
306
        entry = self._inventory[file_id]
0.200.87 by Jelmer Vernooij
Remove cache usage.
307
        if entry.kind == 'directory': return ""
0.200.130 by Jelmer Vernooij
Make most tree inspection tests succeed.
308
        return self._repository._git.get_blob(entry.text_id).data
0.203.1 by Aaron Bentley
Make checkouts work
309
0.200.129 by Jelmer Vernooij
merge dulwich.
310
    def _build_inventory(self, tree_id, ie, path):
0.200.58 by Jelmer Vernooij
Fix remaining tests.
311
        assert isinstance(path, str)
0.216.3 by Jelmer Vernooij
Fix tree.
312
        tree = self._repository._git.tree(tree_id)
0.200.129 by Jelmer Vernooij
merge dulwich.
313
        for mode, name, hexsha in tree.entries():
0.200.128 by Jelmer Vernooij
Merge new dulwich.
314
            basename = name.decode("utf-8")
0.200.58 by Jelmer Vernooij
Fix remaining tests.
315
            if path == "":
0.200.128 by Jelmer Vernooij
Merge new dulwich.
316
                child_path = name
0.200.58 by Jelmer Vernooij
Fix remaining tests.
317
            else:
0.200.128 by Jelmer Vernooij
Merge new dulwich.
318
                child_path = urlutils.join(path, name)
0.200.152 by Jelmer Vernooij
Fix syntax errors.
319
            file_id = self.mapping.generate_file_id(child_path)
0.200.130 by Jelmer Vernooij
Make most tree inspection tests succeed.
320
            entry_kind = (mode & 0700000) / 0100000
321
            if entry_kind == 0:
0.200.58 by Jelmer Vernooij
Fix remaining tests.
322
                child_ie = inventory.InventoryDirectory(file_id, basename, ie.file_id)
0.200.130 by Jelmer Vernooij
Make most tree inspection tests succeed.
323
            elif entry_kind == 1:
324
                file_kind = (mode & 070000) / 010000
325
                b = self._repository._git.get_blob(hexsha)
326
                if file_kind == 0:
0.200.58 by Jelmer Vernooij
Fix remaining tests.
327
                    child_ie = inventory.InventoryFile(file_id, basename, ie.file_id)
328
                    child_ie.text_sha1 = osutils.sha_string(b.data)
0.200.130 by Jelmer Vernooij
Make most tree inspection tests succeed.
329
                elif file_kind == 2:
0.200.58 by Jelmer Vernooij
Fix remaining tests.
330
                    child_ie = inventory.InventoryLink(file_id, basename, ie.file_id)
331
                    child_ie.text_sha1 = osutils.sha_string("")
332
                else:
333
                    raise AssertionError(
0.200.130 by Jelmer Vernooij
Make most tree inspection tests succeed.
334
                        "Unknown file kind, perms=%o." % (mode,))
0.200.88 by Jelmer Vernooij
Fix RevisionTree.get_file_text().
335
                child_ie.text_id = b.id
0.200.130 by Jelmer Vernooij
Make most tree inspection tests succeed.
336
                child_ie.text_size = len(b.data)
0.200.58 by Jelmer Vernooij
Fix remaining tests.
337
            else:
338
                raise AssertionError(
0.200.128 by Jelmer Vernooij
Merge new dulwich.
339
                    "Unknown blob kind, perms=%r." % (mode,))
0.200.130 by Jelmer Vernooij
Make most tree inspection tests succeed.
340
            fs_mode = mode & 0777
341
            child_ie.executable = bool(fs_mode & 0111)
0.200.58 by Jelmer Vernooij
Fix remaining tests.
342
            child_ie.revision = self.revision_id
0.200.88 by Jelmer Vernooij
Fix RevisionTree.get_file_text().
343
            self._inventory.add(child_ie)
0.200.130 by Jelmer Vernooij
Make most tree inspection tests succeed.
344
            if entry_kind == 0:
345
                self._build_inventory(hexsha, child_ie, child_path)
0.200.58 by Jelmer Vernooij
Fix remaining tests.
346
0.203.1 by Aaron Bentley
Make checkouts work
347
0.200.289 by Jelmer Vernooij
Cope with new member variables in RepositoryFormat.
348
class GitRepositoryFormat(repository.RepositoryFormat):
0.203.1 by Aaron Bentley
Make checkouts work
349
350
    supports_tree_reference = False
0.200.133 by Jelmer Vernooij
Unmark as deprecated.
351
    rich_root_data = True
0.200.71 by Jelmer Vernooij
Implement GitRepositoryFormat.get_format_description.
352
353
    def get_format_description(self):
354
        return "Git Repository"
0.200.133 by Jelmer Vernooij
Unmark as deprecated.
355
356
    def initialize(self, url, shared=False, _internal=False):
357
        raise bzr_errors.UninitializableFormat(self)
358
359
    def check_conversion_target(self, target_repo_format):
360
        return target_repo_format.rich_root_data