15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
17
from bzrlib import osutils, ui, urlutils
18
from bzrlib.errors import InvalidRevisionId, NoSuchRevision
18
from bzrlib.errors import InvalidRevisionId
19
19
from bzrlib.inventory import Inventory
20
20
from bzrlib.repository import InterRepository
21
21
from bzrlib.trace import info
127
126
raise AssertionError("Unknown blob kind, perms=%r." % (mode,))
130
def import_git_objects(repo, mapping, object_iter, target_git_object_retriever,
129
def import_git_objects(repo, mapping, object_iter, pb=None):
132
130
"""Import a set of git objects into a bzr repository.
134
132
:param repo: Bazaar repository
161
159
def lookup_object(sha):
162
160
if sha in object_iter:
163
161
return object_iter[sha]
164
return target_git_object_retriever(sha)
162
return reconstruct_git_object(repo, mapping, sha)
165
163
parent_invs = [repo.get_inventory(r) for r in rev.parent_ids]
166
164
import_git_tree(repo, mapping, "", root_tree, inv, parent_invs,
168
166
repo.add_revision(rev.revision_id, rev, inv)
169
def reconstruct_git_commit(repo, rev):
170
raise NotImplementedError(self.reconstruct_git_commit)
171
173
def reconstruct_git_object(repo, mapping, sha):
172
import pdb; pdb.set_trace()
175
revid = mapping.revision_id_foreign_to_bzr(sha)
177
rev = repo.get_revision(revid)
178
except NoSuchRevision:
181
return reconstruct_git_commit(rev)
188
197
"""See InterRepository.copy_content."""
189
198
self.fetch(revision_id, pb, find_ghosts=False)
191
def fetch_objects(self, determine_wants, mapping, pb=None):
200
def fetch(self, revision_id=None, pb=None, find_ghosts=False,
203
mapping = self.source.get_mapping()
192
204
def progress(text):
193
205
pb.update("git: %s" % text.rstrip("\r\n"), 0, 0)
206
def determine_wants(heads):
207
if revision_id is None:
210
ret = [mapping.revision_id_bzr_to_foreign(revision_id)[0]]
211
return [rev for rev in ret if not self.target.has_revision(mapping.revision_id_foreign_to_bzr(rev))]
194
212
graph_walker = BzrFetchGraphWalker(self.target, mapping)
197
215
create_pb = pb = ui.ui_factory.nested_progress_bar()
198
target_git_object_retriever = GitObjectConverter(self.target, mapping)
201
217
self.target.lock_write()
203
219
self.target.start_write_group()
205
221
objects_iter = self.source.fetch_objects(determine_wants,
207
target_git_object_retriever.__getitem__,
209
import_git_objects(self.target, mapping, objects_iter,
210
target_git_object_retriever, pb)
222
graph_walker, progress)
223
import_git_objects(self.target, mapping, objects_iter, pb)
212
225
self.target.commit_write_group()
217
230
create_pb.finished()
219
def fetch(self, revision_id=None, pb=None, find_ghosts=False,
222
mapping = self.source.get_mapping()
223
def determine_wants(heads):
224
if revision_id is None:
227
ret = [mapping.revision_id_bzr_to_foreign(revision_id)[0]]
228
return [rev for rev in ret if not self.target.has_revision(mapping.revision_id_foreign_to_bzr(rev))]
229
return self.fetch_objects(determine_wants, mapping, pb)
232
233
def is_compatible(source, target):
233
234
"""Be compatible with GitRepository."""