155
160
file_ids = self.from_repository.fileid_involved_by_set(revs)
157
162
num_file_ids = len(file_ids)
158
for file_id in file_ids:
159
self.pb.update("merge weaves", count, num_file_ids)
161
to_weave = self.to_weaves.get_weave_or_empty(file_id,
162
self.to_repository.get_transaction())
163
pb = bzrlib.ui.ui_factory.nested_progress_bar()
165
for file_id in file_ids:
166
pb.update("merge weaves", count, num_file_ids)
168
to_weave = self.to_weaves.get_weave_or_empty(file_id,
169
self.to_repository.get_transaction())
164
if to_weave.num_versions() > 0:
165
# destination has contents, must merge
166
from_weave = self.from_weaves.get_weave(file_id,
167
self.from_repository.get_transaction())
168
# we fetch all the texts, because texts do
169
# not reference anything, and its cheap enough
170
to_weave.join(from_weave)
172
# destination is empty, just copy it.
173
# this copies all the texts, which is useful and
174
# on per-file basis quite cheap.
175
self.to_weaves.copy_multi(self.from_weaves, [file_id], self.pb,
176
self.from_repository.get_transaction(),
177
self.to_repository.get_transaction())
171
if to_weave.num_versions() > 0:
172
# destination has contents, must merge
173
from_weave = self.from_weaves.get_weave(file_id,
174
self.from_repository.get_transaction())
175
# we fetch all the texts, because texts do
176
# not reference anything, and its cheap enough
177
to_weave.join(from_weave)
179
# destination is empty, just copy it.
180
# this copies all the texts, which is useful and
181
# on per-file basis quite cheap.
182
child_pb = bzrlib.ui.ui_factory.nested_progress_bar()
184
from_repo = self.from_repository
185
from_transaction = from_repo.get_transaction()
186
to_transaction = self.to_repository.get_transaction()
187
self.to_weaves.copy_multi(self.from_weaves, [file_id],
188
child_pb, from_transaction,
180
195
def _fetch_inventory_weave(self, revs):
181
self.pb.update("inventory fetch", 0, 2)
182
to_weave = self.to_control.get_weave('inventory',
183
self.to_repository.get_transaction())
196
pb = bzrlib.ui.ui_factory.nested_progress_bar()
198
pb.update("inventory fetch", 0, 3)
199
to_weave = self.to_control.get_weave('inventory',
200
self.to_repository.get_transaction())
185
# just merge, this is optimisable and its means we dont
186
# copy unreferenced data such as not-needed inventories.
187
self.pb.update("inventory fetch", 1, 2)
188
from_weave = self.from_repository.get_inventory_weave()
189
self.pb.update("inventory fetch", 2, 2)
190
# we fetch only the referenced inventories because we do not
191
# know for unselected inventories whether all their required
192
# texts are present in the other repository - it could be
194
to_weave.join(from_weave, pb=self.pb, msg='merge inventory',
202
child_pb = bzrlib.ui.ui_factory.nested_progress_bar()
204
# just merge, this is optimisable and its means we dont
205
# copy unreferenced data such as not-needed inventories.
206
pb.update("inventory fetch", 1, 3)
207
from_weave = self.from_repository.get_inventory_weave()
208
pb.update("inventory fetch", 2, 3)
209
# we fetch only the referenced inventories because we do not
210
# know for unselected inventories whether all their required
211
# texts are present in the other repository - it could be
213
to_weave.join(from_weave, pb=child_pb, msg='merge inventory',
199
221
class GenericRepoFetcher(RepoFetcher):
207
229
self.to_transaction = self.to_repository.get_transaction()
209
231
total = len(revs)
211
self.pb.update('copying revisions', count, total)
213
sig_text = self.from_repository.get_signature_text(rev)
214
self.to_repository._revision_store.add_revision_signature_text(
215
rev, sig_text, self.to_transaction)
216
except errors.NoSuchRevision:
219
self.to_repository._revision_store.add_revision(
220
self.from_repository.get_revision(rev),
223
self.pb.update('copying revisions', count, total)
232
pb = bzrlib.ui.ui_factory.nested_progress_bar()
235
pb.update('copying revisions', count, total)
237
sig_text = self.from_repository.get_signature_text(rev)
238
store = self.to_repository._revision_store
239
store.add_revision_signature_text(rev, sig_text,
241
except errors.NoSuchRevision:
244
self.to_repository._revision_store.add_revision(
245
self.from_repository.get_revision(rev),
248
pb.update('copying revisions', count, total)
224
251
# fixup inventory if needed:
225
252
# this is expensive because we have no inverse index to current ghosts.
226
253
# but on local disk its a few seconds and sftp push is already insane.