/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-10 00:06:46 UTC
  • mfrom: (6673 work)
  • mto: This revision was merged to the branch mainline in revision 6675.
  • Revision ID: jelmer@jelmer.uk-20170610000646-xj6jh277lo4xuo10
Merge trunk.

Show diffs side-by-side

added added

removed removed

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