~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/repository.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2007-11-22 21:20:30 UTC
  • mfrom: (3010.1.17 pack.read-locks)
  • Revision ID: pqm@pqm.ubuntu.com-20071122212030-ehfexlt3qzptnsdv
(robertc) Various lock and write-group correctness issues which show
        up when packs are the default format. (Robert Collins, #154204).

Show diffs side-by-side

added added

removed removed

Lines of Context:
792
792
                (format, data_list, StringIO(knit_bytes).read))
793
793
 
794
794
    @needs_read_lock
795
 
    def missing_revision_ids(self, other, revision_id=None):
 
795
    def missing_revision_ids(self, other, revision_id=None, find_ghosts=True):
796
796
        """Return the revision ids that other has that this does not.
797
797
        
798
798
        These are returned in topological order.
799
799
 
800
800
        revision_id: only return revision ids included by revision_id.
801
801
        """
802
 
        return InterRepository.get(other, self).missing_revision_ids(revision_id)
 
802
        return InterRepository.get(other, self).missing_revision_ids(
 
803
            revision_id, find_ghosts)
803
804
 
804
805
    @staticmethod
805
806
    def open(base):
2054
2055
        raise NotImplementedError(self.fetch)
2055
2056
   
2056
2057
    @needs_read_lock
2057
 
    def missing_revision_ids(self, revision_id=None):
 
2058
    def missing_revision_ids(self, revision_id=None, find_ghosts=True):
2058
2059
        """Return the revision ids that source has that target does not.
2059
2060
        
2060
2061
        These are returned in topological order.
2221
2222
        return f.count_copied, f.failed_revisions
2222
2223
 
2223
2224
    @needs_read_lock
2224
 
    def missing_revision_ids(self, revision_id=None):
 
2225
    def missing_revision_ids(self, revision_id=None, find_ghosts=True):
2225
2226
        """See InterRepository.missing_revision_ids()."""
2226
2227
        # we want all revisions to satisfy revision_id in source.
2227
2228
        # but we don't want to stat every file here and there.
2299
2300
        return f.count_copied, f.failed_revisions
2300
2301
 
2301
2302
    @needs_read_lock
2302
 
    def missing_revision_ids(self, revision_id=None):
 
2303
    def missing_revision_ids(self, revision_id=None, find_ghosts=True):
2303
2304
        """See InterRepository.missing_revision_ids()."""
2304
2305
        if revision_id is not None:
2305
2306
            source_ids = self.source.get_ancestry(revision_id)
2376
2377
            # sensibly detect 'new revisions' without doing a full index scan.
2377
2378
        elif _mod_revision.is_null(revision_id):
2378
2379
            # nothing to do:
2379
 
            return
 
2380
            return (0, [])
2380
2381
        else:
2381
2382
            try:
2382
2383
                revision_ids = self.missing_revision_ids(revision_id,
2392
2393
            # a pack creation, but for now it is simpler to think about as
2393
2394
            # 'upload data, then repack if needed'.
2394
2395
            self.target._pack_collection.autopack()
2395
 
            return pack.get_revision_count()
 
2396
            return (pack.get_revision_count(), [])
2396
2397
        else:
2397
 
            return 0
 
2398
            return (0, [])
2398
2399
 
2399
2400
    @needs_read_lock
2400
2401
    def missing_revision_ids(self, revision_id=None, find_ghosts=True):
2421
2422
                    target_index.iter_entries(target_keys))
2422
2423
                missing_revs.update(next_revs - have_revs)
2423
2424
                searcher.stop_searching_any(have_revs)
 
2425
            if next_revs - have_revs == set([revision_id]):
 
2426
                # we saw the start rev itself, but no parents from it (or
 
2427
                # next_revs would have been updated to e.g. set(). We remove
 
2428
                # have_revs because if we found revision_id locally we
 
2429
                # stop_searching at the first time around.
 
2430
                raise errors.NoSuchRevision(self.source, revision_id)
2424
2431
            return missing_revs
2425
2432
        elif revision_id is not None:
2426
2433
            source_ids = self.source.get_ancestry(revision_id)