/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to fetch.py

Implement Tree.

Show diffs side-by-side

added added

removed removed

Lines of Context:
213
213
                create_pb.finished()
214
214
 
215
215
    def fetch(self, revision_id=None, pb=None, find_ghosts=False, 
216
 
              mapping=None):
 
216
              mapping=None, fetch_spec=None):
 
217
        self.fetch_refs(revision_id=revision_id, pb=pb, find_ghosts=find_ghosts,
 
218
                mapping=mapping, fetch_spec=fetch_spec)
 
219
 
 
220
    def fetch_refs(self, revision_id=None, pb=None, find_ghosts=False, 
 
221
              mapping=None, fetch_spec=None):
217
222
        if mapping is None:
218
223
            mapping = self.source.get_mapping()
219
 
        def determine_wants(heads):
220
 
            if revision_id is None:
221
 
                ret = heads.values()
 
224
        if revision_id is not None:
 
225
            interesting_heads = [revision_id]
 
226
        elif fetch_spec is not None:
 
227
            interesting_heads = fetch_spec.heads
 
228
        else:
 
229
            interesting_heads = None
 
230
        self._refs = {}
 
231
        def determine_wants(refs):
 
232
            self._refs = refs
 
233
            if interesting_heads is None:
 
234
                ret = [sha for (ref, sha) in refs.iteritems() if not ref.endswith("^{}")]
222
235
            else:
223
 
                ret = [mapping.revision_id_bzr_to_foreign(revision_id)[0]]
 
236
                ret = [mapping.revision_id_bzr_to_foreign(revid)[0] for revid in interesting_heads]
224
237
            return [rev for rev in ret if not self.target.has_revision(mapping.revision_id_foreign_to_bzr(rev))]
225
 
        return self.fetch_objects(determine_wants, mapping, pb)
 
238
        self.fetch_objects(determine_wants, mapping, pb)
 
239
        return self._refs
226
240
 
227
241
    @staticmethod
228
242
    def is_compatible(source, target):
246
260
        self.fetch(revision_id, pb, find_ghosts=False)
247
261
 
248
262
    def fetch(self, revision_id=None, pb=None, find_ghosts=False, 
249
 
              mapping=None):
 
263
              mapping=None, fetch_spec=None):
250
264
        if mapping is None:
251
265
            mapping = self.source.get_mapping()
252
266
        def progress(text):
253
267
            info("git: %s", text)
254
268
        r = self.target._git
255
 
        if revision_id is None:
256
 
            determine_wants = lambda x: [y for y in x.values() if not y in r.object_store]
257
 
        else:
 
269
        if revision_id is not None:
258
270
            args = [mapping.revision_id_bzr_to_foreign(revision_id)[0]]
 
271
        elif fetch_spec is not None:
 
272
            args = [mapping.revision_id_bzr_to_foreign(revid)[0] for revid in fetch_spec.heads]
 
273
        if fetch_spec is None and revision_id is None:
 
274
            determine_wants = r.object_store.determine_wants_all
 
275
        else:
259
276
            determine_wants = lambda x: [y for y in args if not y in r.object_store]
260
277
 
261
278
        graphwalker = SimpleFetchGraphWalker(r.heads().values(), r.get_parents)