~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/repofmt/knitrepo.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2011-05-04 20:44:14 UTC
  • mfrom: (5807.2.2 inventory-tree-tests)
  • Revision ID: pqm@pqm.ubuntu.com-20110504204414-j893hspmx3k1rki4
(jelmer) Skip per_tree tests that are InventoryTree-specific if they're run
 against non-inventory trees. (Jelmer Vernooij)

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
from bzrlib.lazy_import import lazy_import
18
18
lazy_import(globals(), """
19
 
import itertools
20
 
 
21
19
from bzrlib import (
22
20
    bzrdir,
23
21
    errors,
36
34
""")
37
35
from bzrlib.decorators import needs_read_lock, needs_write_lock
38
36
from bzrlib.repository import (
 
37
    CommitBuilder,
39
38
    InterRepository,
 
39
    InterSameDataRepository,
40
40
    IsInWriteGroupError,
 
41
    MetaDirRepository,
 
42
    MetaDirRepositoryFormat,
41
43
    RepositoryFormat,
42
 
    )
43
 
from bzrlib.vf_repository import (
44
 
    InterSameDataRepository,
45
 
    MetaDirVersionedFileRepository,
46
 
    MetaDirVersionedFileRepositoryFormat,
47
 
    VersionedFileCommitBuilder,
48
 
    VersionedFileRootCommitBuilder,
 
44
    RootCommitBuilder,
49
45
    )
50
46
from bzrlib import symbol_versioning
51
47
 
107
103
        return result
108
104
 
109
105
 
110
 
class KnitRepository(MetaDirVersionedFileRepository):
 
106
class KnitRepository(MetaDirRepository):
111
107
    """Knit format repository."""
112
108
 
113
109
    # These attributes are inherited from the Repository base class. Setting
119
115
 
120
116
    def __init__(self, _format, a_bzrdir, control_files, _commit_builder_class,
121
117
        _serializer):
122
 
        super(KnitRepository, self).__init__(_format, a_bzrdir, control_files)
 
118
        MetaDirRepository.__init__(self, _format, a_bzrdir, control_files)
123
119
        self._commit_builder_class = _commit_builder_class
124
120
        self._serializer = _serializer
125
121
        self._reconcile_fixes_text_parents = True
181
177
        result.get_parent_map([('A',)])
182
178
        return result
183
179
 
 
180
    def fileid_involved_between_revs(self, from_revid, to_revid):
 
181
        """Find file_id(s) which are involved in the changes between revisions.
 
182
 
 
183
        This determines the set of revisions which are involved, and then
 
184
        finds all file ids affected by those revisions.
 
185
        """
 
186
        vf = self._get_revision_vf()
 
187
        from_set = set(vf.get_ancestry(from_revid))
 
188
        to_set = set(vf.get_ancestry(to_revid))
 
189
        changed = to_set.difference(from_set)
 
190
        return self._fileid_involved_by_set(changed)
 
191
 
 
192
    def fileid_involved(self, last_revid=None):
 
193
        """Find all file_ids modified in the ancestry of last_revid.
 
194
 
 
195
        :param last_revid: If None, last_revision() will be used.
 
196
        """
 
197
        if not last_revid:
 
198
            changed = set(self.all_revision_ids())
 
199
        else:
 
200
            changed = set(self.get_ancestry(last_revid))
 
201
        if None in changed:
 
202
            changed.remove(None)
 
203
        return self._fileid_involved_by_set(changed)
 
204
 
184
205
    @needs_read_lock
185
206
    def get_revision(self, revision_id):
186
207
        """Return the Revision object for a named revision"""
212
233
        return _KnitsParentsProvider(self.revisions)
213
234
 
214
235
 
215
 
class RepositoryFormatKnit(MetaDirVersionedFileRepositoryFormat):
 
236
class RepositoryFormatKnit(MetaDirRepositoryFormat):
216
237
    """Bzr repository knit format (generalized).
217
238
 
218
239
    This repository format has:
248
269
    _fetch_uses_deltas = True
249
270
    fast_deltas = False
250
271
    supports_funky_characters = True
 
272
    supports_full_versioned_files = True
251
273
    # The revision.kndx could potentially claim a revision has a different
252
274
    # parent to the revision text.
253
275
    revision_graph_can_have_wrong_parents = True
359
381
    """
360
382
 
361
383
    repository_class = KnitRepository
362
 
    _commit_builder_class = VersionedFileCommitBuilder
 
384
    _commit_builder_class = CommitBuilder
363
385
    @property
364
386
    def _serializer(self):
365
387
        return xml5.serializer_v5
393
415
    """
394
416
 
395
417
    repository_class = KnitRepository
396
 
    _commit_builder_class = VersionedFileRootCommitBuilder
 
418
    _commit_builder_class = RootCommitBuilder
397
419
    rich_root_data = True
398
420
    experimental = True
399
421
    supports_tree_reference = True
435
457
    """
436
458
 
437
459
    repository_class = KnitRepository
438
 
    _commit_builder_class = VersionedFileRootCommitBuilder
 
460
    _commit_builder_class = RootCommitBuilder
439
461
    rich_root_data = True
440
462
    supports_tree_reference = False
441
463
    @property
484
506
    @needs_read_lock
485
507
    def search_missing_revision_ids(self,
486
508
            revision_id=symbol_versioning.DEPRECATED_PARAMETER,
487
 
            find_ghosts=True, revision_ids=None, if_present_ids=None,
488
 
            limit=None):
 
509
            find_ghosts=True, revision_ids=None, if_present_ids=None):
489
510
        """See InterRepository.search_missing_revision_ids()."""
490
511
        if symbol_versioning.deprecated_passed(revision_id):
491
512
            symbol_versioning.warn(
520
541
            # that against the revision records.
521
542
            result_set = set(
522
543
                self.source._eliminate_revisions_not_present(required_revisions))
523
 
        if limit is not None:
524
 
            topo_ordered = self.source.get_graph().iter_topo_order(result_set)
525
 
            result_set = set(itertools.islice(topo_ordered, limit))
526
544
        return self.source.revision_ids_to_search_result(result_set)
527
545
 
528
546