~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/fetch.py

Merge from bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
stored, so that if a revision is present we can totally recreate it.
28
28
However, we can't know what files are included in a revision until we
29
29
read its inventory.  So we query the inventory store of the source for
30
 
the ids we need, and then pull those ids and finally actually join
31
 
the inventories.
 
30
the ids we need, and then pull those ids and then return to the inventories.
32
31
"""
33
32
 
34
33
import bzrlib
168
167
                if knit_kind == "file":
169
168
                    self._fetch_weave_text(file_id, revisions)
170
169
                elif knit_kind == "inventory":
171
 
                    # XXX:
172
 
                    # Once we've processed all the files, then we generate the root
173
 
                    # texts (if necessary), then we process the inventory.  It's a
174
 
                    # bit distasteful to have knit_kind == "inventory" mean this,
175
 
                    # perhaps it should happen on the first non-"file" knit, in case
176
 
                    # it's not always inventory?
 
170
                    # Before we process the inventory we generate the root
 
171
                    # texts (if necessary) so that the inventories references
 
172
                    # will be valid.
177
173
                    self._generate_root_texts(revs)
 
174
                    # NB: This currently reopens the inventory weave in source;
 
175
                    # using a full get_data_stream instead would avoid this.
178
176
                    self._fetch_inventory_weave(revs, pb)
179
177
                elif knit_kind == "signatures":
180
178
                    # Nothing to do here; this will be taken care of when
217
215
        # we fetch all the texts, because texts do
218
216
        # not reference anything, and its cheap enough
219
217
        to_weave.join(from_weave, version_ids=required_versions)
220
 
        # we don't need *all* of this data anymore, but we dont know
221
 
        # what we do. This cache clearing will result in a new read 
222
 
        # of the knit data when we do the checkout, but probably we
223
 
        # want to emit the needed data on the fly rather than at the
224
 
        # end anyhow.
225
 
        # the from weave should know not to cache data being joined,
226
 
        # but its ok to ask it to clear.
227
 
        from_weave.clear_cache()
228
 
        to_weave.clear_cache()
229
218
 
230
219
    def _fetch_inventory_weave(self, revs, pb):
231
220
        pb.update("fetch inventory", 0, 2)
243
232
            # corrupt.
244
233
            to_weave.join(from_weave, pb=child_pb, msg='merge inventory',
245
234
                          version_ids=revs)
246
 
            from_weave.clear_cache()
247
235
        finally:
248
236
            child_pb.finished()
249
237