~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/groupcompress.py

  • Committer: John Arbash Meinel
  • Date: 2011-05-26 08:05:45 UTC
  • mfrom: (5916 +trunk)
  • mto: This revision was merged to the branch mainline in revision 5917.
  • Revision ID: john@arbash-meinel.com-20110526080545-5tprxfczyj4bfk0o
Merge bzr.dev 5916 and make sure the right patch is applied.

Show diffs side-by-side

added added

removed removed

Lines of Context:
985
985
 
986
986
    It contains code very similar to SequenceMatcher because of having a similar
987
987
    task. However some key differences apply:
988
 
     - there is no junk, we want a minimal edit not a human readable diff.
989
 
     - we don't filter very common lines (because we don't know where a good
990
 
       range will start, and after the first text we want to be emitting minmal
991
 
       edits only.
992
 
     - we chain the left side, not the right side
993
 
     - we incrementally update the adjacency matrix as new lines are provided.
994
 
     - we look for matches in all of the left side, so the routine which does
995
 
       the analagous task of find_longest_match does not need to filter on the
996
 
       left side.
 
988
 
 
989
    * there is no junk, we want a minimal edit not a human readable diff.
 
990
    * we don't filter very common lines (because we don't know where a good
 
991
      range will start, and after the first text we want to be emitting minmal
 
992
      edits only.
 
993
    * we chain the left side, not the right side
 
994
    * we incrementally update the adjacency matrix as new lines are provided.
 
995
    * we look for matches in all of the left side, so the routine which does
 
996
      the analagous task of find_longest_match does not need to filter on the
 
997
      left side.
997
998
    """
998
999
 
999
1000
    def __init__(self, settings=None):
1255
1256
        :param key: The key tuple of the text to add.
1256
1257
        :param parents: The parents key tuples of the text to add.
1257
1258
        :param lines: A list of lines. Each line must be a bytestring. And all
1258
 
            of them except the last must be terminated with \n and contain no
1259
 
            other \n's. The last line may either contain no \n's or a single
1260
 
            terminating \n. If the lines list does meet this constraint the add
1261
 
            routine may error or may succeed - but you will be unable to read
1262
 
            the data back accurately. (Checking the lines have been split
 
1259
            of them except the last must be terminated with \\n and contain no
 
1260
            other \\n's. The last line may either contain no \\n's or a single
 
1261
            terminating \\n. If the lines list does meet this constraint the
 
1262
            add routine may error or may succeed - but you will be unable to
 
1263
            read the data back accurately. (Checking the lines have been split
1263
1264
            correctly is expensive and extremely unlikely to catch bugs so it
1264
1265
            is not done at runtime unless check_content is True.)
1265
1266
        :param parent_texts: An optional dictionary containing the opaque
1503
1504
 
1504
1505
        The returned objects should be in the order defined by 'ordering',
1505
1506
        which can weave between different sources.
 
1507
 
1506
1508
        :param ordering: Must be one of 'topological' or 'groupcompress'
1507
1509
        :return: List of [(source, [keys])] tuples, such that all keys are in
1508
1510
            the defined order, regardless of source.
2130
2132
        :param keys: An iterable of keys.
2131
2133
        :return: A dict of key:
2132
2134
            (index_memo, compression_parent, parents, record_details).
2133
 
            index_memo
2134
 
                opaque structure to pass to read_records to extract the raw
2135
 
                data
2136
 
            compression_parent
2137
 
                Content that this record is built upon, may be None
2138
 
            parents
2139
 
                Logical parents of this node
2140
 
            record_details
2141
 
                extra information about the content which needs to be passed to
2142
 
                Factory.parse_record
 
2135
 
 
2136
            * index_memo: opaque structure to pass to read_records to extract
 
2137
              the raw data
 
2138
            * compression_parent: Content that this record is built upon, may
 
2139
              be None
 
2140
            * parents: Logical parents of this node
 
2141
            * record_details: extra information about the content which needs
 
2142
              to be passed to Factory.parse_record
2143
2143
        """
2144
2144
        self._check_read()
2145
2145
        result = {}