69
69
self.revisions = versionedfiles.VirtualRevisionTexts(self)
70
70
self.tags = GitTags(self._git.get_tags())
72
def _all_revision_ids(self):
73
if self._git.heads == []:
80
cms = self._git.commits("--all", max_count=max_count, skip=skip)
82
ret.update([self.get_mapping().revision_id_foreign_to_bzr(cm.id) for cm in cms])
72
def all_revision_ids(self):
73
ret = set([revision.NULL_REVISION])
74
if self._git.heads() == []:
76
bzr_heads = [self.get_mapping().revision_id_foreign_to_bzr(h) for h in self._git.heads()]
78
graph = self.get_graph()
79
for rev, parents in graph.iter_ancestry(bzr_heads):
85
83
def is_shared(self):
88
86
def supports_rich_root(self):
91
89
#def get_revision_delta(self, revision_id):
92
90
# parent_revid = self.get_revision(revision_id).parent_ids[0]
93
91
# diff = self._git.diff(ids.convert_revision_id_bzr_to_git(parent_revid),
94
92
# ids.convert_revision_id_bzr_to_git(revision_id))
96
def get_ancestry(self, revision_id):
97
revision_id = revision.ensure_null(revision_id)
99
if revision_id != revision.NULL_REVISION:
104
cms = self._git.commits(self.lookup_git_revid(revision_id, self.get_mapping()), max_count=max_count, skip=skip)
106
ret += [self.get_mapping().revision_id_foreign_to_bzr(cm.id) for cm in cms]
94
def get_parent_map(self, revids):
96
for revision_id in revids:
97
assert isinstance(revision_id, str)
98
if revision_id == revision.NULL_REVISION:
99
parent_map[revision_id] = ()
101
hexsha = self.lookup_git_revid(revision_id, self.get_mapping())
102
commit = self._git.commit(hexsha)
106
parent_map[revision_id] = [self.get_mapping().revision_id_foreign_to_bzr(p) for p in commit.parents]
109
def get_ancestry(self, revision_id, topo_sorted=True):
110
"""See Repository.get_ancestry().
112
if revision_id is None:
113
return self._all_revision_ids()
114
assert isinstance(revision_id, str)
116
graph = self.get_graph()
117
for rev, parents in graph.iter_ancestry([revision_id]):
118
if rev == revision.NULL_REVISION:
109
124
def get_signature_text(self, revision_id):
110
125
raise errors.NoSuchRevision(self, revision_id)
124
139
def get_mapping(self):
125
140
return default_mapping
127
def get_parent_map(self, revision_ids):
129
for revid in revision_ids:
130
if revid == revision.NULL_REVISION:
133
git_commit_id = self.lookup_git_revid(revid, self.get_mapping())
134
commit = self._git.commit(git_commit_id)
135
ret[revid] = tuple([self.get_mapping().revision_id_foreign_to_bzr(p.id) for p in commit.parents])
138
142
def lookup_git_revid(self, bzr_revid, mapping):
140
144
return mapping.revision_id_bzr_to_foreign(bzr_revid)
141
145
except errors.InvalidRevisionId:
142
raise errors.NoSuchRevision(bzr_revid, self)
146
raise errors.NoSuchRevision(self, bzr_revid)
144
148
def get_revision(self, revision_id):
145
149
git_commit_id = self.lookup_git_revid(revision_id, self.get_mapping())
146
150
commit = self._git.commit(git_commit_id)
147
151
# print "fetched revision:", git_commit_id
153
raise errors.NoSuchRevision(self, revision_id)
148
154
revision = self._parse_rev(commit, self.get_mapping())
155
assert revision is not None
151
158
def has_revision(self, revision_id):
159
def get_revisions(self, revisions):
160
return [self.get_revision(r) for r in revisions]
166
def get_revisions(self, revids):
167
return (self.get_revision(r) for r in revids)
163
170
def _parse_rev(klass, commit, mapping):