33
from bzrlib.errors import InstallFailed
34
from bzrlib.progress import ProgressPhase
35
33
from bzrlib.revision import NULL_REVISION
36
34
from bzrlib.tsort import topo_sort
37
35
from bzrlib.trace import mutter
136
134
pb.update("Inserting stream")
137
135
resume_tokens, missing_keys = self.sink.insert_stream(
138
136
stream, from_format, [])
137
if self.to_repository._fallback_repositories:
139
self._parent_inventories(search.get_keys()))
140
141
pb.update("Missing keys")
141
142
stream = source.get_stream_for_missing_keys(missing_keys)
167
168
if self._last_revision is NULL_REVISION:
168
169
# explicit limit of no revisions needed
170
if (self._last_revision is not None and
171
self.to_repository.has_revision(self._last_revision)):
174
return self.to_repository.search_missing_revision_ids(
175
self.from_repository, self._last_revision,
176
find_ghosts=self.find_ghosts)
177
except errors.NoSuchRevision, e:
178
raise InstallFailed([self._last_revision])
171
return self.to_repository.search_missing_revision_ids(
172
self.from_repository, self._last_revision,
173
find_ghosts=self.find_ghosts)
175
def _parent_inventories(self, revision_ids):
176
# Find all the parent revisions referenced by the stream, but
177
# not present in the stream, and make sure we send their
179
parent_maps = self.to_repository.get_parent_map(revision_ids)
181
map(parents.update, parent_maps.itervalues())
182
parents.discard(NULL_REVISION)
183
parents.difference_update(revision_ids)
184
missing_keys = set(('inventories', rev_id) for rev_id in parents)
181
188
class Inter1and2Helper(object):