22
22
import bzrlib.errors as errors
23
from bzrlib.errors import InstallFailed, NoSuchRevision, WeaveError
23
from bzrlib.errors import (InstallFailed, NoSuchRevision, WeaveError,
24
25
from bzrlib.trace import mutter, note, warning
25
26
from bzrlib.branch import Branch
26
27
from bzrlib.progress import ProgressBar
216
217
# in memory until everything's done? But this way is nicer
217
218
# if it's interrupted.
218
219
for path, ie in inv.iter_entries():
219
if ie.revision != rev_id:
221
mutter('%s {%s} is changed in this revision',
223
self._copy_one_weave(rev_id, ie.file_id)
220
self._copy_one_weave(rev_id, ie.file_id, ie.revision)
225
def _copy_one_weave(self, rev_id, file_id):
226
"""Copy one file weave."""
222
def _copy_one_weave(self, rev_id, file_id, text_revision):
223
"""Copy one file weave, esuring the result contains text_revision."""
224
to_weave = self.to_weaves.get_weave_or_empty(file_id,
225
self.to_branch.storage.get_transaction())
226
if text_revision in to_weave:
228
from_weave = self.from_weaves.get_weave(file_id,
229
self.from_branch.storage.get_transaction())
230
if text_revision not in from_weave:
231
raise MissingText(self.from_branch, text_revision, file_id)
227
232
mutter('copy file {%s} modified in {%s}', file_id, rev_id)
228
if file_id in self.copied_file_ids:
229
mutter('file {%s} already copied', file_id)
231
from_weave = self.from_weaves.get_weave(file_id,
232
self.from_branch.get_transaction())
233
to_weave = self.to_weaves.get_weave_or_empty(file_id,
234
self.to_storage.get_transaction())
236
234
to_weave.join(from_weave)
237
235
except errors.WeaveParentMismatch: