~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/index.py

  • Committer: Richard Wilbur
  • Date: 2016-02-04 19:07:28 UTC
  • mto: This revision was merged to the branch mainline in revision 6618.
  • Revision ID: richard.wilbur@gmail.com-20160204190728-p0zvfii6zase0fw7
Update COPYING.txt from the original http://www.gnu.org/licenses/gpl-2.0.txt  (Only differences were in whitespace.)  Thanks to Petr Stodulka for pointing out the discrepancy.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
"""Indexing facilities."""
18
18
 
 
19
from __future__ import absolute_import
 
20
 
19
21
__all__ = [
20
22
    'CombinedGraphIndex',
21
23
    'GraphIndex',
70
72
class GraphIndexBuilder(object):
71
73
    """A builder that can build a GraphIndex.
72
74
 
73
 
    The resulting graph has the structure:
 
75
    The resulting graph has the structure::
74
76
 
75
 
    _SIGNATURE OPTIONS NODES NEWLINE
76
 
    _SIGNATURE     := 'Bazaar Graph Index 1' NEWLINE
77
 
    OPTIONS        := 'node_ref_lists=' DIGITS NEWLINE
78
 
    NODES          := NODE*
79
 
    NODE           := KEY NULL ABSENT? NULL REFERENCES NULL VALUE NEWLINE
80
 
    KEY            := Not-whitespace-utf8
81
 
    ABSENT         := 'a'
82
 
    REFERENCES     := REFERENCE_LIST (TAB REFERENCE_LIST){node_ref_lists - 1}
83
 
    REFERENCE_LIST := (REFERENCE (CR REFERENCE)*)?
84
 
    REFERENCE      := DIGITS  ; digits is the byte offset in the index of the
85
 
                              ; referenced key.
86
 
    VALUE          := no-newline-no-null-bytes
 
77
      _SIGNATURE OPTIONS NODES NEWLINE
 
78
      _SIGNATURE     := 'Bazaar Graph Index 1' NEWLINE
 
79
      OPTIONS        := 'node_ref_lists=' DIGITS NEWLINE
 
80
      NODES          := NODE*
 
81
      NODE           := KEY NULL ABSENT? NULL REFERENCES NULL VALUE NEWLINE
 
82
      KEY            := Not-whitespace-utf8
 
83
      ABSENT         := 'a'
 
84
      REFERENCES     := REFERENCE_LIST (TAB REFERENCE_LIST){node_ref_lists - 1}
 
85
      REFERENCE_LIST := (REFERENCE (CR REFERENCE)*)?
 
86
      REFERENCE      := DIGITS  ; digits is the byte offset in the index of the
 
87
                                ; referenced key.
 
88
      VALUE          := no-newline-no-null-bytes
87
89
    """
88
90
 
89
91
    def __init__(self, reference_lists=0, key_elements=1):
185
187
        :param value: The value associate with this key. Must not contain
186
188
            newlines or null characters.
187
189
        :return: (node_refs, absent_references)
188
 
            node_refs   basically a packed form of 'references' where all
189
 
                        iterables are tuples
190
 
            absent_references   reference keys that are not in self._nodes.
191
 
                                This may contain duplicates if the same key is
192
 
                                referenced in multiple lists.
 
190
        
 
191
            * node_refs: basically a packed form of 'references' where all
 
192
              iterables are tuples
 
193
            * absent_references: reference keys that are not in self._nodes.
 
194
              This may contain duplicates if the same key is referenced in
 
195
              multiple lists.
193
196
        """
194
197
        as_st = StaticTuple.from_sequence
195
198
        self._check_key(key)
220
223
        :param references: An iterable of iterables of keys. Each is a
221
224
            reference to another key.
222
225
        :param value: The value to associate with the key. It may be any
223
 
            bytes as long as it does not contain \0 or \n.
 
226
            bytes as long as it does not contain \\0 or \\n.
224
227
        """
225
228
        (node_refs,
226
229
         absent_references) = self._check_key_ref_value(key, references, value)
244
247
        """
245
248
        
246
249
    def finish(self):
 
250
        """Finish the index.
 
251
 
 
252
        :returns: cStringIO holding the full context of the index as it 
 
253
        should be written to disk.
 
254
        """
247
255
        lines = [_SIGNATURE]
248
256
        lines.append(_OPTION_NODE_REFS + str(self.reference_lists) + '\n')
249
257
        lines.append(_OPTION_KEY_ELEMENTS + str(self._key_length) + '\n')