231
232
for k in self.target._git.refs.allkeys():
233
v = self.target._git.refs[k]
234
v = self.target._git.refs.read_ref(k)
238
for (kind, type_data) in self.source_store.lookup_git_sha(v):
239
if kind == "commit" and self.source.has_revision(type_data[0]):
239
if not v.startswith(SYMREF):
241
for (kind, type_data) in self.source_store.lookup_git_sha(v):
242
if kind == "commit" and self.source.has_revision(type_data[0]):
246
247
bzr_refs[k] = (v, revid)
252
253
old_refs = self._get_target_bzr_refs()
253
254
new_refs = update_refs(old_refs)
254
255
revidmap = self.fetch_objects(
255
[(git_sha, bzr_revid) for (git_sha, bzr_revid) in new_refs.values() if git_sha is None or not git_sha.startswith('ref:')], lossy=lossy)
256
[(git_sha, bzr_revid) for (git_sha, bzr_revid) in new_refs.values() if git_sha is None or not git_sha.startswith(SYMREF)], lossy=lossy)
256
257
for name, (gitid, revid) in new_refs.iteritems():
257
258
if gitid is None:
259
260
gitid = revidmap[revid][0]
261
262
gitid = self.source_store._lookup_revision_sha1(revid)
262
if len(gitid) != 40 and not gitid.startswith('ref: '):
263
raise AssertionError("invalid ref contents: %r" % gitid)
264
self.target_refs[name] = gitid
263
if gitid.startswith(SYMREF):
264
self.target_refs.set_symbolic_ref(name, gitid[len(SYMREF):])
267
old_git_id = old_refs[name][0]
269
self.target_refs.add_if_new(name, gitid)
271
self.target_refs.set_if_equals(name, old_git_id, gitid)
265
272
return revidmap, old_refs, new_refs
267
274
def fetch_objects(self, revs, lossy, limit=None):