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

  • Committer: Jelmer Vernooij
  • Author(s): Richard Wilbur
  • Date: 2017-05-30 23:37:11 UTC
  • mto: This revision was merged to the branch mainline in revision 6645.
  • Revision ID: jelmer@jelmer.uk-20170530233711-r0m0qp8hpkqzpopw
Fix order in which files are processed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
# Author: Martin Pool <mbp@canonical.com>
18
18
 
19
 
 
20
19
"""Weave - storage of related text file versions"""
21
20
 
 
21
from __future__ import absolute_import
22
22
 
23
23
# XXX: If we do weaves this way, will a merge still behave the same
24
24
# way if it's done in a different order?  That's a pretty desirable
67
67
# FIXME: the conflict markers should be *7* characters
68
68
 
69
69
from copy import copy
70
 
from cStringIO import StringIO
71
70
import os
72
71
 
73
 
from bzrlib.lazy_import import lazy_import
 
72
from .lazy_import import lazy_import
74
73
lazy_import(globals(), """
75
 
from bzrlib import tsort
 
74
from breezy import tsort
76
75
""")
77
 
from bzrlib import (
 
76
from . import (
78
77
    errors,
79
78
    osutils,
80
79
    )
81
 
from bzrlib.errors import (WeaveError, WeaveFormatError, WeaveParentMismatch,
 
80
from .errors import (WeaveError, WeaveFormatError, WeaveParentMismatch,
82
81
        RevisionAlreadyPresent,
83
82
        RevisionNotPresent,
84
83
        UnavailableRepresentation,
85
84
        )
86
 
from bzrlib.osutils import dirname, sha, sha_strings, split_lines
87
 
import bzrlib.patiencediff
88
 
from bzrlib.revision import NULL_REVISION
89
 
from bzrlib.symbol_versioning import *
90
 
from bzrlib.trace import mutter
91
 
from bzrlib.versionedfile import (
 
85
from .osutils import dirname, sha, sha_strings, split_lines
 
86
from . import patiencediff
 
87
from .revision import NULL_REVISION
 
88
from .sixish import (
 
89
    BytesIO,
 
90
    )
 
91
from .trace import mutter
 
92
from .versionedfile import (
92
93
    AbsentContentFactory,
93
94
    adapter_registry,
94
95
    ContentFactory,
95
96
    sort_groupcompress,
96
97
    VersionedFile,
97
98
    )
98
 
from bzrlib.weavefile import _read_weave_v5, write_weave_v5
 
99
from .weavefile import _read_weave_v5, write_weave_v5
99
100
 
100
101
 
101
102
class WeaveContentFactory(ContentFactory):
231
232
        self._name_map = {}
232
233
        self._weave_name = weave_name
233
234
        if matcher is None:
234
 
            self._matcher = bzrlib.patiencediff.PatienceSequenceMatcher
 
235
            self._matcher = patiencediff.PatienceSequenceMatcher
235
236
        else:
236
237
            self._matcher = matcher
237
238
        if get_scope is None:
391
392
    def _add_lines(self, version_id, parents, lines, parent_texts,
392
393
       left_matching_blocks, nostore_sha, random_id, check_content):
393
394
        """See VersionedFile.add_lines."""
394
 
        idx = self._add(version_id, lines, map(self._lookup, parents),
 
395
        idx = self._add(version_id, lines, list(map(self._lookup, parents)),
395
396
            nostore_sha=nostore_sha)
396
397
        return sha_strings(lines), sum(map(len, lines)), idx
397
398
 
688
689
        WFE = WeaveFormatError
689
690
 
690
691
        # wow.
691
 
        #  449       0   4474.6820   2356.5590   bzrlib.weave:556(_extract)
 
692
        #  449       0   4474.6820   2356.5590   breezy.weave:556(_extract)
692
693
        #  +285282   0   1676.8040   1676.8040   +<isinstance>
693
694
        # 1.6 seconds in 'isinstance'.
694
695
        # changing the first isinstance:
695
 
        #  449       0   2814.2660   1577.1760   bzrlib.weave:556(_extract)
 
696
        #  449       0   2814.2660   1577.1760   breezy.weave:556(_extract)
696
697
        #  +140414   0    762.8050    762.8050   +<isinstance>
697
698
        # note that the inline time actually dropped (less function calls)
698
699
        # and total processing time was halved.
699
700
        # we're still spending ~1/4 of the method in isinstance though.
700
701
        # so lets hard code the acceptable string classes we expect:
701
 
        #  449       0   1202.9420    786.2930   bzrlib.weave:556(_extract)
 
702
        #  449       0   1202.9420    786.2930   breezy.weave:556(_extract)
702
703
        # +71352     0    377.5560    377.5560   +<method 'append' of 'list'
703
704
        #                                          objects>
704
705
        # yay, down to ~1/4 the initial extract time, and our inline time
705
706
        # has shrunk again, with isinstance no longer dominating.
706
707
        # tweaking the stack inclusion test to use a set gives:
707
 
        #  449       0   1122.8030    713.0080   bzrlib.weave:556(_extract)
 
708
        #  449       0   1122.8030    713.0080   breezy.weave:556(_extract)
708
709
        # +71352     0    354.9980    354.9980   +<method 'append' of 'list'
709
710
        #                                          objects>
710
711
        # - a 5% win, or possibly just noise. However with large istacks that
750
751
 
751
752
        NOT FOR PUBLIC USE.
752
753
        """
753
 
        if isinstance(name_or_index, (int, long)):
 
754
        # GZ 2017-04-01: This used to check for long as well, but I don't think
 
755
        # there are python implementations with sys.maxsize > sys.maxint
 
756
        if isinstance(name_or_index, int):
754
757
            return name_or_index
755
758
        else:
756
759
            return self._lookup(name_or_index)
805
808
            name = self._idx_to_name(i)
806
809
            sha1s[name] = sha()
807
810
            texts[name] = []
808
 
            new_inc = set([name])
 
811
            new_inc = {name}
809
812
            for p in self._parents[i]:
810
813
                new_inc.update(inclusions[self._idx_to_name(p)])
811
814
 
878
881
                raise errors.WeaveTextDiffers(name, self, other)
879
882
            self_parents = self._parents[this_idx]
880
883
            other_parents = other._parents[other_idx]
881
 
            n1 = set([self._names[i] for i in self_parents])
882
 
            n2 = set([other._names[i] for i in other_parents])
 
884
            n1 = {self._names[i] for i in self_parents}
 
885
            n2 = {other._names[i] for i in other_parents}
883
886
            if not self._compatible_parents(n1, n2):
884
887
                raise WeaveParentMismatch("inconsistent parents "
885
888
                    "for version {%s}: %s vs %s" % (name, n1, n2))
920
923
        self._transport = transport
921
924
        self._filemode = filemode
922
925
        try:
923
 
            _read_weave_v5(self._transport.get(name + WeaveFile.WEAVE_SUFFIX), self)
 
926
            f = self._transport.get(name + WeaveFile.WEAVE_SUFFIX)
 
927
            _read_weave_v5(BytesIO(f.read()), self)
924
928
        except errors.NoSuchFile:
925
929
            if not create:
926
930
                raise
940
944
    def copy_to(self, name, transport):
941
945
        """See VersionedFile.copy_to()."""
942
946
        # as we are all in memory always, just serialise to the new place.
943
 
        sio = StringIO()
 
947
        sio = BytesIO()
944
948
        write_weave_v5(self, sio)
945
949
        sio.seek(0)
946
950
        transport.put_file(name + WeaveFile.WEAVE_SUFFIX, sio, self._filemode)
948
952
    def _save(self):
949
953
        """Save the weave."""
950
954
        self._check_write_ok()
951
 
        sio = StringIO()
 
955
        sio = BytesIO()
952
956
        write_weave_v5(self, sio)
953
957
        sio.seek(0)
954
958
        bytes = sio.getvalue()