157
157
# item_keys_introduced_by should have a richer API than it does at the
158
158
# moment, so that it can feed the progress information back to this
160
pb = bzrlib.ui.ui_factory.nested_progress_bar()
160
self.pb = bzrlib.ui.ui_factory.nested_progress_bar()
162
162
from_format = self.from_repository._format
163
stream = self.get_stream(search, pb, pp)
163
stream = self.get_stream(search, pp)
164
164
self.sink.insert_stream(stream, from_format)
165
165
self.sink.finished()
167
if self.pb is not None:
170
def get_stream(self, search, pb, pp):
170
def get_stream(self, search, pp):
172
172
revs = search.get_keys()
173
173
graph = self.from_repository.get_graph()
174
174
revs = list(graph.iter_topo_order(revs))
175
data_to_fetch = self.from_repository.item_keys_introduced_by(revs,
175
data_to_fetch = self.from_repository.item_keys_introduced_by(
178
178
for knit_kind, file_id, revisions in data_to_fetch:
179
179
if knit_kind != phase:
180
180
phase = knit_kind
181
181
# Make a new progress bar for this phase
184
pb = bzrlib.ui.ui_factory.nested_progress_bar()
184
self.pb = bzrlib.ui.ui_factory.nested_progress_bar()
185
185
if knit_kind == "file":
186
186
# Accumulate file texts
187
187
text_keys.extend([(file_id, revision) for revision in
204
204
# NB: This currently reopens the inventory weave in source;
205
205
# using a single stream interface instead would avoid this.
206
pb.update("fetch inventory", 0, 1)
206
self.pb.update("fetch inventory", 0, 1)
207
207
from_weave = self.from_repository.inventories
208
208
# we fetch only the referenced inventories because we do not
209
209
# know for unselected inventories whether all their required
218
218
# _fetch_revision_texts happens.
220
220
elif knit_kind == "revisions":
221
for _ in self._fetch_revision_texts(revs, pb):
221
for _ in self._fetch_revision_texts(revs, self.pb):
224
224
raise AssertionError("Unknown knit kind %r" % knit_kind)