/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/multiparent.py

  • Committer: Jelmer Vernooij
  • Date: 2019-05-29 03:22:34 UTC
  • mfrom: (7303 work)
  • mto: This revision was merged to the branch mainline in revision 7306.
  • Revision ID: jelmer@jelmer.uk-20190529032234-mt3fuws8gq03tapi
Merge trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
lazy_import(globals(), """
25
25
import gzip
26
26
import itertools
 
27
import patiencediff
27
28
 
28
29
from breezy import (
29
30
    bencode,
30
31
    errors,
31
 
    patiencediff,
32
32
    ui,
33
33
    )
34
34
""")
 
35
from .i18n import gettext
35
36
from .sixish import (
36
37
    BytesIO,
37
38
    range,
44
45
    parents = vf.get_parent_map(keys)
45
46
    return _topo_iter(parents, keys)
46
47
 
 
48
 
47
49
def topo_iter(vf, versions=None):
48
50
    if versions is None:
49
51
        versions = vf.versions()
50
52
    parents = vf.get_parent_map(versions)
51
53
    return _topo_iter(parents, versions)
52
54
 
 
55
 
53
56
def _topo_iter(parents, versions):
54
57
    seen = set()
55
58
    descendants = {}
 
59
 
56
60
    def pending_parents(version):
57
61
        if parents[version] is None:
58
62
            return []
116
120
        parent_text = []
117
121
        block_iter = [iter(i) for i in parent_comparisons]
118
122
        diff = MultiParent([])
 
123
 
119
124
        def next_block(p):
120
125
            try:
121
126
                return next(block_iter[p])
252
257
        extra_n = 0
253
258
        for hunk in reversed(self.hunks):
254
259
            if isinstance(hunk, ParentText):
255
 
               return hunk.child_pos + hunk.num_lines + extra_n
 
260
                return hunk.child_pos + hunk.num_lines + extra_n
256
261
            extra_n += len(hunk.lines)
257
262
        return extra_n
258
263
 
338
343
        if self.snapshot_interval is None:
339
344
            return False
340
345
        if self.max_snapshots is not None and\
341
 
            len(self._snapshots) == self.max_snapshots:
 
346
                len(self._snapshots) == self.max_snapshots:
342
347
            return False
343
348
        if len(parent_ids) == 0:
344
349
            return True
436
441
    def select_snapshots(self, vf):
437
442
        """Determine which versions to add as snapshots"""
438
443
        build_ancestors = {}
439
 
        descendants = {}
440
444
        snapshots = set()
441
445
        for version_id in topo_iter(vf):
442
446
            potential_build_ancestors = set(vf.get_parents(version_id))
463
467
    def get_size_ranking(self):
464
468
        """Get versions ranked by size"""
465
469
        versions = []
466
 
        new_snapshots = set()
467
470
        for version_id in self.versions():
468
471
            if version_id in self._snapshots:
469
472
                continue
497
500
        ranking = []
498
501
        while len(available_versions) > 0:
499
502
            available_versions.sort(key=lambda x:
500
 
                len(could_avoid[x]) *
501
 
                len(referenced_by.get(x, [])))
 
503
                                    len(could_avoid[x]) *
 
504
                                    len(referenced_by.get(x, [])))
502
505
            selected = available_versions.pop()
503
506
            ranking.append(selected)
504
507
            for version_id in referenced_by[selected]:
571
574
    def add_diff(self, diff, version_id, parent_ids):
572
575
        with open(self._filename + '.mpknit', 'ab') as outfile:
573
576
            outfile.seek(0, 2)      # workaround for windows bug:
574
 
                                    # .tell() for files opened in 'ab' mode
575
 
                                    # before any write returns 0
 
577
            # .tell() for files opened in 'ab' mode
 
578
            # before any write returns 0
576
579
            start = outfile.tell()
577
580
            with gzip.GzipFile(None, mode='ab', fileobj=outfile) as zipfile:
578
581
                zipfile.writelines(itertools.chain(
579
582
                    [b'version %s\n' % version_id], diff.to_patch()))
580
583
            end = outfile.tell()
581
 
        self._diff_offset[version_id] = (start, end-start)
 
584
        self._diff_offset[version_id] = (start, end - start)
582
585
        self._parents[version_id] = parent_ids
583
586
 
584
587
    def destroy(self):