87
def import_git_blob(texts, mapping, path, hexsha, base_inv, parent_id,
87
def import_git_blob(texts, mapping, path, hexsha, base_inv, base_ie, parent_id,
88
88
revision_id, parent_invs, shagitmap, lookup_object, executable, symlink):
89
89
"""Import a git blob object into a bzr repository.
171
168
return (invdelta, shamap)
174
def import_git_submodule(texts, mapping, path, hexsha, base_inv, parent_id,
171
def import_git_submodule(texts, mapping, path, hexsha, base_inv, base_ie, parent_id,
175
172
revision_id, parent_invs, shagitmap, lookup_object):
176
173
raise NotImplementedError(import_git_submodule)
190
def import_git_tree(texts, mapping, path, hexsha, base_inv, parent_id,
187
def import_git_tree(texts, mapping, path, hexsha, base_inv, base_ie, parent_id,
191
188
revision_id, parent_invs, shagitmap, lookup_object):
192
189
"""Import a git tree object into a bzr repository.
202
199
# We just have to hope this is indeed utf-8:
203
200
ie = InventoryDirectory(file_id, urlutils.basename(path.decode("utf-8")),
206
base_ie = base_inv[file_id]
208
203
# Newly appeared here
210
204
ie.revision = revision_id
211
205
texts.add_lines((file_id, ie.revision), (), [])
212
206
invdelta.append((None, path, file_id, ie))
224
218
ie.revision = revision_id
225
219
texts.add_lines((ie.file_id, ie.revision), (), [])
226
220
invdelta.append((base_inv.id2path(ie.file_id), path, ie.file_id, ie))
221
if base_ie is not None and base_ie.kind == "directory":
222
base_children = base_ie.children
227
225
# Remember for next time
228
226
existing_children = set()
236
234
if stat.S_ISDIR(mode):
237
235
subinvdelta, grandchildmodes, subshamap = import_git_tree(
238
236
texts, mapping, child_path, child_hexsha, base_inv,
239
file_id, revision_id, parent_invs, shagitmap, lookup_object)
237
base_children.get(name), file_id, revision_id, parent_invs, shagitmap,
240
239
invdelta.extend(subinvdelta)
241
240
child_modes.update(grandchildmodes)
242
241
shamap.extend(subshamap)
243
242
elif S_ISGITLINK(mode): # submodule
244
243
subinvdelta, grandchildmodes, subshamap = import_git_submodule(
245
texts, mapping, child_path, child_hexsha, base_inv,
244
texts, mapping, child_path, child_hexsha, base_inv, base_ie.get(name),
246
245
file_id, revision_id, parent_invs, shagitmap, lookup_object)
247
246
invdelta.extend(subinvdelta)
248
247
child_modes.update(grandchildmodes)
249
248
shamap.extend(subshamap)
251
250
subinvdelta, subshamap = import_git_blob(texts, mapping,
252
child_path, child_hexsha, base_inv, file_id, revision_id,
253
parent_invs, shagitmap, lookup_object,
251
child_path, child_hexsha, base_inv, base_children.get(name), file_id,
252
revision_id, parent_invs, shagitmap, lookup_object,
254
253
mode_is_executable(mode), stat.S_ISLNK(mode))
255
254
invdelta.extend(subinvdelta)
256
255
shamap.extend(subshamap)
259
258
child_modes[child_path] = mode
260
259
# Remove any children that have disappeared
261
260
if base_ie is not None and base_ie.kind == "directory":
262
invdelta.extend(remove_disappeared_children(base_inv, base_ie.children,
261
invdelta.extend(remove_disappeared_children(base_inv, base_children,
263
262
existing_children))
264
263
shamap.append((hexsha, "tree", (file_id, revision_id)))
265
264
return invdelta, child_modes, shamap
330
329
parent_invs_cache[parent_id] = parent_inv
331
330
if parent_invs == []:
332
331
base_inv = Inventory(root_id=None)
334
334
base_inv = parent_invs[0]
335
base_ie = base_inv.root
335
336
inv_delta, unusual_modes, shamap = import_git_tree(repo.texts,
336
mapping, "", root_trees[revid], base_inv, None, revid,
337
mapping, "", root_trees[revid], base_inv, base_ie, None, revid,
337
338
parent_invs, target_git_object_retriever._idmap, lookup_object)
338
339
target_git_object_retriever._idmap.add_entries(shamap)
339
340
if unusual_modes != {}: