/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 breezy/vf_repository.py

  • Committer: Jelmer Vernooij
  • Date: 2017-06-05 22:01:28 UTC
  • mfrom: (6658 work)
  • mto: This revision was merged to the branch mainline in revision 6666.
  • Revision ID: jelmer@jelmer.uk-20170605220128-xurjonb8cjf5o52j
Merge trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
75
75
 
76
76
from .sixish import (
77
77
    range,
 
78
    viewitems,
 
79
    viewvalues,
78
80
    )
79
81
 
80
82
from .trace import (
434
436
        # XXX: Friction: parent_candidates should return a list not a dict
435
437
        #      so that we don't have to walk the inventories again.
436
438
        parent_candidate_entries = ie.parent_candidates(parent_invs)
437
 
        head_set = self._heads(ie.file_id, parent_candidate_entries.keys())
 
439
        head_set = self._heads(ie.file_id, parent_candidate_entries)
438
440
        heads = []
439
441
        for inv in parent_invs:
440
442
            if inv.has_id(ie.file_id):
692
694
        seen_root = False # Is the root in the basis delta?
693
695
        inv_delta = self._basis_delta
694
696
        modified_rev = self._new_revision_id
695
 
        for change, head_candidates in changes.values():
 
697
        for change, head_candidates in viewvalues(changes):
696
698
            if change[3][1]: # versioned in target.
697
699
                # Several things may be happening here:
698
700
                # We may have a fork in the per-file graph
699
701
                #  - record a change with the content from tree
700
 
                # We may have a change against < all trees  
 
702
                # We may have a change against < all trees
701
703
                #  - carry over the tree that hasn't changed
702
704
                # We may have a change against all trees
703
705
                #  - record the change with the content from tree
1196
1198
        graph = self.get_graph()
1197
1199
        parent_map = graph.get_parent_map(revision_ids)
1198
1200
        # The old API returned a list, should this actually be a set?
1199
 
        return parent_map.keys()
 
1201
        return list(parent_map)
1200
1202
 
1201
1203
    def __init__(self, _format, a_bzrdir, control_files):
1202
1204
        """Instantiate a VersionedFileRepository.
1351
1353
        referrers = frozenset(r[0] for r in key_deps.get_referrers())
1352
1354
        file_ids = self.fileids_altered_by_revision_ids(referrers)
1353
1355
        missing_texts = set()
1354
 
        for file_id, version_ids in file_ids.iteritems():
 
1356
        for file_id, version_ids in viewitems(file_ids):
1355
1357
            missing_texts.update(
1356
1358
                (file_id, version_id) for version_id in version_ids)
1357
1359
        present_texts = self.texts.get_parent_map(missing_texts)
1499
1501
            revision_ids. Each altered file-ids has the exact revision_ids that
1500
1502
            altered it listed explicitly.
1501
1503
        """
1502
 
        seen = set(self._serializer._find_text_key_references(
1503
 
                line_iterator).iterkeys())
 
1504
        seen = set(self._serializer._find_text_key_references(line_iterator))
1504
1505
        parent_keys = self._find_parent_keys_of_revisions(revision_keys)
1505
1506
        parent_seen = set(self._serializer._find_text_key_references(
1506
1507
            self._inventory_xml_lines_for_keys(parent_keys)))
1520
1521
        """
1521
1522
        parent_map = self.revisions.get_parent_map(revision_keys)
1522
1523
        parent_keys = set(itertools.chain.from_iterable(
1523
 
            parent_map.itervalues()))
 
1524
            viewvalues(parent_map)))
1524
1525
        parent_keys.difference_update(revision_keys)
1525
1526
        parent_keys.discard(_mod_revision.NULL_REVISION)
1526
1527
        return parent_keys
1603
1604
        # a cache of the text keys to allow reuse; costs a dict of all the
1604
1605
        # keys, but saves a 2-tuple for every child of a given key.
1605
1606
        text_key_cache = {}
1606
 
        for text_key, valid in text_key_references.iteritems():
 
1607
        for text_key, valid in viewitems(text_key_references):
1607
1608
            if not valid:
1608
1609
                invalid_keys.add(text_key)
1609
1610
            else:
1705
1706
        file_ids = self.fileids_altered_by_revision_ids(revision_ids, inv_w)
1706
1707
        count = 0
1707
1708
        num_file_ids = len(file_ids)
1708
 
        for file_id, altered_versions in file_ids.iteritems():
 
1709
        for file_id, altered_versions in viewitems(file_ids):
1709
1710
            if pb is not None:
1710
1711
                pb.update(gettext("Fetch texts"), count, num_file_ids)
1711
1712
            count += 1
1880
1881
                raise ValueError('get_parent_map(None) is not valid')
1881
1882
            else:
1882
1883
                query_keys.append((revision_id ,))
1883
 
        for ((revision_id,), parent_keys) in \
1884
 
                self.revisions.get_parent_map(query_keys).iteritems():
 
1884
        for (revision_id,), parent_keys in viewitems(
 
1885
                self.revisions.get_parent_map(query_keys)):
1885
1886
            if parent_keys:
1886
1887
                result[revision_id] = tuple([parent_revid
1887
1888
                    for (parent_revid,) in parent_keys])
1905
1906
 
1906
1907
    def revision_ids_to_search_result(self, result_set):
1907
1908
        """Convert a set of revision ids to a graph SearchResult."""
1908
 
        result_parents = set()
1909
 
        for parents in self.get_graph().get_parent_map(
1910
 
            result_set).itervalues():
1911
 
            result_parents.update(parents)
 
1909
        result_parents = set(itertools.chain.from_iterable(viewvalues(
 
1910
            self.get_graph().get_parent_map(result_set))))
1912
1911
        included_keys = result_set.intersection(result_parents)
1913
1912
        start_keys = result_set.difference(included_keys)
1914
1913
        exclude_keys = result_parents.difference(result_set)
2334
2333
            raise AssertionError(
2335
2334
                'cannot copy revisions to fill in missing deltas %s' % (
2336
2335
                    keys['revisions'],))
2337
 
        for substream_kind, keys in keys.iteritems():
 
2336
        for substream_kind, keys in viewitems(keys):
2338
2337
            vf = getattr(self.from_repository, substream_kind)
2339
2338
            if vf is None and keys:
2340
2339
                    raise AssertionError(
2531
2530
    def _check_file_version_parents(self, texts, progress_bar):
2532
2531
        """See check_file_version_parents."""
2533
2532
        wrong_parents = {}
2534
 
        self.file_ids = {file_id for file_id, _ in
2535
 
            self.text_index.iterkeys()}
 
2533
        self.file_ids = {file_id for file_id, _ in self.text_index}
2536
2534
        # text keys is now grouped by file_id
2537
2535
        n_versions = len(self.text_index)
2538
2536
        progress_bar.update(gettext('loading text store'), 0, n_versions)
2540
2538
        # On unlistable transports this could well be empty/error...
2541
2539
        text_keys = self.repository.texts.keys()
2542
2540
        unused_keys = frozenset(text_keys) - set(self.text_index)
2543
 
        for num, key in enumerate(self.text_index.iterkeys()):
 
2541
        for num, key in enumerate(self.text_index):
2544
2542
            progress_bar.update(gettext('checking text graph'), num, n_versions)
2545
2543
            correct_parents = self.calculate_file_version_parents(key)
2546
2544
            try:
2814
2812
        source may be not have _fallback_repositories even though it is
2815
2813
        stacked.)
2816
2814
        """
2817
 
        parent_revs = set()
2818
 
        for parents in parent_map.values():
2819
 
            parent_revs.update(parents)
 
2815
        parent_revs = set(itertools.chain.from_iterable(viewvalues(
 
2816
            parent_map)))
2820
2817
        present_parents = self.source.get_parent_map(parent_revs)
2821
 
        absent_parents = set(parent_revs).difference(present_parents)
 
2818
        absent_parents = parent_revs.difference(present_parents)
2822
2819
        parent_invs_keys_for_stacking = self.source.inventories.get_parent_map(
2823
2820
            (rev_id,) for rev_id in absent_parents)
2824
2821
        parent_inv_ids = [key[-1] for key in parent_invs_keys_for_stacking]
3154
3151
        # commit to determine parents. There is a latent/real bug here where
3155
3152
        # the parents inserted are not those commit would do - in particular
3156
3153
        # they are not filtered by heads(). RBC, AB
3157
 
        for revision, tree in parent_trees.iteritems():
 
3154
        for revision, tree in viewitems(parent_trees):
3158
3155
            if not tree.has_id(ie.file_id):
3159
3156
                continue
3160
3157
            parent_id = tree.get_file_revision(ie.file_id)