~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/fetch.py

[merge] from robert and newformat

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
import os
18
18
from cStringIO import StringIO
19
19
 
20
 
import bzrlib.errors
 
20
import bzrlib
 
21
import bzrlib.errors as errors
 
22
from bzrlib.errors import InstallFailed, NoSuchRevision, WeaveError
21
23
from bzrlib.trace import mutter, note, warning
22
24
from bzrlib.branch import Branch
23
25
from bzrlib.progress import ProgressBar
24
26
from bzrlib.xml5 import serializer_v5
25
27
from bzrlib.osutils import sha_string, split_lines
26
 
from bzrlib.errors import InstallFailed, NoSuchRevision, WeaveError
27
28
 
28
29
"""Copying of history from one branch to another.
29
30
 
103
104
        else:
104
105
            self.pb = pb
105
106
        try:
 
107
            self._fetch_revisions(last_revision)
 
108
        finally:
 
109
            self.pb.clear()
 
110
 
 
111
    def _fetch_revisions(self, last_revision):
 
112
        try:
106
113
            self.last_revision = self._find_last_revision(last_revision)
107
114
        except NoSuchRevision, e:
108
115
            mutter('failed getting last revision: %s', e)
115
122
        self._copy_revisions(revs_to_fetch)
116
123
        self.new_ancestry = revs_to_fetch
117
124
 
118
 
 
119
125
    def _find_last_revision(self, last_revision):
120
126
        """Find the limiting source revision.
121
127
 
196
202
 
197
203
    def _copy_inventory(self, rev_id, inv_xml, parent_ids):
198
204
        self.to_control.add_text('inventory', rev_id,
199
 
                                split_lines(inv_xml), parent_ids)
 
205
                                split_lines(inv_xml), parent_ids,
 
206
                                self.to_branch.get_transaction())
200
207
 
201
208
    def _copy_new_texts(self, rev_id, inv):
202
209
        """Copy any new texts occuring in this revision."""
217
224
        if file_id in self.copied_file_ids:
218
225
            mutter('file {%s} already copied', file_id)
219
226
            return
220
 
        from_weave = self.from_weaves.get_weave(file_id)
221
 
        to_weave = self.to_weaves.get_weave_or_empty(file_id)
222
 
        to_weave.join(from_weave)
223
 
        self.to_weaves.put_weave(file_id, to_weave)
 
227
        from_weave = self.from_weaves.get_weave(file_id,
 
228
            self.from_branch.get_transaction())
 
229
        to_weave = self.to_weaves.get_weave_or_empty(file_id,
 
230
            self.to_branch.get_transaction())
 
231
        try:
 
232
            to_weave.join(from_weave)
 
233
        except errors.WeaveParentMismatch:
 
234
            to_weave.reweave(from_weave)
 
235
        self.to_weaves.put_weave(file_id, to_weave,
 
236
            self.to_branch.get_transaction())
224
237
        self.count_weaves += 1
225
238
        self.copied_file_ids.add(file_id)
226
239
        mutter('copied file {%s}', file_id)