~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/repofmt/pack_repo.py

  • Committer: Robert Collins
  • Date: 2010-02-27 12:27:33 UTC
  • mto: This revision was merged to the branch mainline in revision 5061.
  • Revision ID: robertc@robertcollins.net-20100227122733-2o3me3fkk3pk36ns
``bzrlib.branchbuilder.BranchBuilder.build_snapshot`` now accepts a
``message_callback`` in the same way that commit does. (Robert Collins)

Show diffs side-by-side

added added

removed removed

Lines of Context:
587
587
                                             flush_func=flush_func)
588
588
        self.add_callback = None
589
589
 
 
590
    def replace_indices(self, index_to_pack, indices):
 
591
        """Replace the current mappings with fresh ones.
 
592
 
 
593
        This should probably not be used eventually, rather incremental add and
 
594
        removal of indices. It has been added during refactoring of existing
 
595
        code.
 
596
 
 
597
        :param index_to_pack: A mapping from index objects to
 
598
            (transport, name) tuples for the pack file data.
 
599
        :param indices: A list of indices.
 
600
        """
 
601
        # refresh the revision pack map dict without replacing the instance.
 
602
        self.index_to_pack.clear()
 
603
        self.index_to_pack.update(index_to_pack)
 
604
        # XXX: API break - clearly a 'replace' method would be good?
 
605
        self.combined_index._indices[:] = indices
 
606
        # the current add nodes callback for the current writable index if
 
607
        # there is one.
 
608
        self.add_callback = None
 
609
 
590
610
    def add_index(self, index, pack):
591
611
        """Add index to the aggregate, which is an index for Pack pack.
592
612
 
599
619
        # expose it to the index map
600
620
        self.index_to_pack[index] = pack.access_tuple()
601
621
        # put it at the front of the linear index list
602
 
        self.combined_index.insert_index(0, index, pack.name)
 
622
        self.combined_index.insert_index(0, index)
603
623
 
604
624
    def add_writable_index(self, index, pack):
605
625
        """Add an index which is able to have data added to it.
625
645
        self.data_access.set_writer(None, None, (None, None))
626
646
        self.index_to_pack.clear()
627
647
        del self.combined_index._indices[:]
628
 
        del self.combined_index._index_names[:]
629
648
        self.add_callback = None
630
649
 
631
650
    def remove_index(self, index):
634
653
        :param index: An index from the pack parameter.
635
654
        """
636
655
        del self.index_to_pack[index]
637
 
        pos = self.combined_index._indices.index(index)
638
 
        del self.combined_index._indices[pos]
639
 
        del self.combined_index._index_names[pos]
 
656
        self.combined_index._indices.remove(index)
640
657
        if (self.add_callback is not None and
641
658
            getattr(index, 'add_nodes', None) == self.add_callback):
642
659
            self.add_callback = None
1398
1415
        self.inventory_index = AggregateIndex(self.reload_pack_names, flush)
1399
1416
        self.text_index = AggregateIndex(self.reload_pack_names, flush)
1400
1417
        self.signature_index = AggregateIndex(self.reload_pack_names, flush)
1401
 
        all_indices = [self.revision_index, self.inventory_index,
1402
 
                self.text_index, self.signature_index]
1403
1418
        if use_chk_index:
1404
1419
            self.chk_index = AggregateIndex(self.reload_pack_names, flush)
1405
 
            all_indices.append(self.chk_index)
1406
1420
        else:
1407
1421
            # used to determine if we're using a chk_index elsewhere.
1408
1422
            self.chk_index = None
1409
 
        # Tell all the CombinedGraphIndex objects about each other, so they can
1410
 
        # share hints about which pack names to search first.
1411
 
        all_combined = [agg_idx.combined_index for agg_idx in all_indices]
1412
 
        for combined_idx in all_combined:
1413
 
            combined_idx.set_sibling_indices(
1414
 
                set(all_combined).difference([combined_idx]))
1415
1423
        # resumed packs
1416
1424
        self._resumed_packs = []
1417
1425
 
1560
1568
        """Is the collection already packed?"""
1561
1569
        return not (self.repo._format.pack_compresses or (len(self._names) > 1))
1562
1570
 
1563
 
    def pack(self, hint=None, clean_obsolete_packs=False):
 
1571
    def pack(self, hint=None):
1564
1572
        """Pack the pack collection totally."""
1565
1573
        self.ensure_loaded()
1566
1574
        total_packs = len(self._names)
1582
1590
                pack_operations[-1][1].append(pack)
1583
1591
        self._execute_pack_operations(pack_operations, OptimisingPacker)
1584
1592
 
1585
 
        if clean_obsolete_packs:
1586
 
            self._clear_obsolete_packs()
1587
 
 
1588
1593
    def plan_autopack_combinations(self, existing_packs, pack_distribution):
1589
1594
        """Plan a pack operation.
1590
1595
 
2378
2383
        raise NotImplementedError(self.dont_leave_lock_in_place)
2379
2384
 
2380
2385
    @needs_write_lock
2381
 
    def pack(self, hint=None, clean_obsolete_packs=False):
 
2386
    def pack(self, hint=None):
2382
2387
        """Compress the data within the repository.
2383
2388
 
2384
2389
        This will pack all the data to a single pack. In future it may
2385
2390
        recompress deltas or do other such expensive operations.
2386
2391
        """
2387
 
        self._pack_collection.pack(hint=hint, clean_obsolete_packs=clean_obsolete_packs)
 
2392
        self._pack_collection.pack(hint=hint)
2388
2393
 
2389
2394
    @needs_write_lock
2390
2395
    def reconcile(self, other=None, thorough=False):
2546
2551
        utf8_files = [('format', self.get_format_string())]
2547
2552
 
2548
2553
        self._upload_blank_content(a_bzrdir, dirs, files, utf8_files, shared)
2549
 
        repository = self.open(a_bzrdir=a_bzrdir, _found=True)
2550
 
        self._run_post_repo_init_hooks(repository, a_bzrdir, shared)
2551
 
        return repository
 
2554
        return self.open(a_bzrdir=a_bzrdir, _found=True)
2552
2555
 
2553
2556
    def open(self, a_bzrdir, _found=False, _override_transport=None):
2554
2557
        """See RepositoryFormat.open().