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

Implement GitRepository.revision_graph_can_have_wrong_parents().

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
from bzrlib.plugins.git.commit import (
43
43
    GitCommitBuilder,
44
44
    )
45
 
from bzrlib.plugins.git.foreign import (
46
 
    versionedfiles,
47
 
    )
48
45
from bzrlib.plugins.git.inventory import (
49
46
    GitInventory,
50
47
    )
54
51
    mapping_registry,
55
52
    )
56
53
from bzrlib.plugins.git.versionedfiles import (
 
54
    GitRevisions,
57
55
    GitTexts,
58
56
    )
59
57
 
60
58
 
61
 
class GitTags(object):
62
 
 
63
 
    def __init__(self, tags):
64
 
        self._tags = tags
65
 
 
66
 
    def __iter__(self):
67
 
        return iter(self._tags)
68
 
 
69
 
 
70
59
class GitRepository(ForeignRepository):
71
60
    """An adapter to git repositories for bzr."""
72
61
 
101
90
    def make_working_trees(self):
102
91
        return True
103
92
 
 
93
    def revision_graph_can_have_wrong_parents(self):
 
94
        return False
 
95
 
104
96
    def dfetch(self, source, stop_revision):
105
97
        interrepo = repository.InterRepository.get(source, self)
106
98
        return interrepo.dfetch(stop_revision)
121
113
        self.base = gitdir.root_transport.base
122
114
        self._git = gitdir._git
123
115
        self.texts = None
124
 
        self.signatures = versionedfiles.VirtualSignatureTexts(self)
125
 
        self.revisions = versionedfiles.VirtualRevisionTexts(self)
126
 
        self.inventories = versionedfiles.VirtualInventoryTexts(self)
 
116
        self.signatures = None
 
117
        self.revisions = GitRevisions(self._git.object_store)
 
118
        self.inventories = None
127
119
        self.texts = GitTexts(self)
128
 
        self.tags = GitTags(self._git.get_tags())
129
120
 
130
121
    def all_revision_ids(self):
131
122
        ret = set([revision.NULL_REVISION])
132
 
        heads = self._git.heads()
 
123
        heads = self._git.refs.as_dict('refs/heads')
133
124
        if heads == {}:
134
125
            return ret
135
126
        bzr_heads = [self.get_mapping().revision_id_foreign_to_bzr(h) for h in heads.itervalues()]
241
232
class GitRevisionTree(revisiontree.RevisionTree):
242
233
 
243
234
    def __init__(self, repository, revision_id):
 
235
        self._revision_id = revision_id
244
236
        self._repository = repository
245
 
        self._revision_id = revision_id
 
237
        store = repository._git.object_store
246
238
        assert isinstance(revision_id, str)
247
239
        git_id, self.mapping = repository.lookup_git_revid(revision_id)
248
240
        try:
249
 
            commit = repository._git.commit(git_id)
 
241
            commit = store[git_id]
250
242
        except KeyError, r:
251
243
            raise errors.NoSuchRevision(repository, revision_id)
252
244
        self.tree = commit.tree
253
 
        self._inventory = GitInventory(self.tree, self.mapping, repository._git.object_store, revision_id)
 
245
        self._inventory = GitInventory(self.tree, self.mapping, store, 
 
246
                                       revision_id)
254
247
 
255
248
    def get_revision_id(self):
256
249
        return self._revision_id
257
250
 
258
 
    def get_file_text(self, file_id):
259
 
        entry = self._inventory[file_id]
 
251
    def get_file_text(self, file_id, path=None):
 
252
        if path is not None:
 
253
            entry = self._inventory._get_ie(path)
 
254
        else:
 
255
            entry = self._inventory[file_id]
260
256
        if entry.kind == 'directory': return ""
261
257
        return entry.object.data
262
258
 
275
271
 
276
272
    def check_conversion_target(self, target_repo_format):
277
273
        return target_repo_format.rich_root_data
 
274
 
 
275
    def network_name(self):
 
276
        return "git"