~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/repofmt/pack_repo.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2011-04-08 12:04:54 UTC
  • mfrom: (5757.1.9 knitpackrepo)
  • Revision ID: pqm@pqm.ubuntu.com-20110408120454-og821s42l3dkaei2
(jelmer) Move knitpack repository format classes to
 bzrlib.repofmt.knitpack_repo. (Jelmer Vernooij)

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
    transactions,
33
33
    tsort,
34
34
    ui,
35
 
    xml5,
36
 
    xml6,
37
 
    xml7,
38
35
    )
39
36
from bzrlib.index import (
40
37
    CombinedGraphIndex,
48
45
    )
49
46
""")
50
47
from bzrlib import (
51
 
    bzrdir,
52
48
    btree_index,
53
49
    errors,
54
50
    lockable_files,
57
53
    )
58
54
 
59
55
from bzrlib.decorators import needs_write_lock, only_raises
60
 
from bzrlib.index import (
61
 
    GraphIndex,
62
 
    InMemoryGraphIndex,
63
 
    )
64
56
from bzrlib.lock import LogicalLockResult
65
57
from bzrlib.repofmt.knitrepo import KnitRepository
66
58
from bzrlib.repository import (
2602
2594
                              _serializer=self._serializer)
2603
2595
 
2604
2596
 
2605
 
class RepositoryFormatKnitPack1(RepositoryFormatPack):
2606
 
    """A no-subtrees parameterized Pack repository.
2607
 
 
2608
 
    This format was introduced in 0.92.
2609
 
    """
2610
 
 
2611
 
    repository_class = KnitPackRepository
2612
 
    _commit_builder_class = PackCommitBuilder
2613
 
    @property
2614
 
    def _serializer(self):
2615
 
        return xml5.serializer_v5
2616
 
    # What index classes to use
2617
 
    index_builder_class = InMemoryGraphIndex
2618
 
    index_class = GraphIndex
2619
 
 
2620
 
    def _get_matching_bzrdir(self):
2621
 
        return bzrdir.format_registry.make_bzrdir('pack-0.92')
2622
 
 
2623
 
    def _ignore_setting_bzrdir(self, format):
2624
 
        pass
2625
 
 
2626
 
    _matchingbzrdir = property(_get_matching_bzrdir, _ignore_setting_bzrdir)
2627
 
 
2628
 
    def get_format_string(self):
2629
 
        """See RepositoryFormat.get_format_string()."""
2630
 
        return "Bazaar pack repository format 1 (needs bzr 0.92)\n"
2631
 
 
2632
 
    def get_format_description(self):
2633
 
        """See RepositoryFormat.get_format_description()."""
2634
 
        return "Packs containing knits without subtree support"
2635
 
 
2636
 
 
2637
 
class RepositoryFormatKnitPack3(RepositoryFormatPack):
2638
 
    """A subtrees parameterized Pack repository.
2639
 
 
2640
 
    This repository format uses the xml7 serializer to get:
2641
 
     - support for recording full info about the tree root
2642
 
     - support for recording tree-references
2643
 
 
2644
 
    This format was introduced in 0.92.
2645
 
    """
2646
 
 
2647
 
    repository_class = KnitPackRepository
2648
 
    _commit_builder_class = PackRootCommitBuilder
2649
 
    rich_root_data = True
2650
 
    experimental = True
2651
 
    supports_tree_reference = True
2652
 
    @property
2653
 
    def _serializer(self):
2654
 
        return xml7.serializer_v7
2655
 
    # What index classes to use
2656
 
    index_builder_class = InMemoryGraphIndex
2657
 
    index_class = GraphIndex
2658
 
 
2659
 
    def _get_matching_bzrdir(self):
2660
 
        return bzrdir.format_registry.make_bzrdir(
2661
 
            'pack-0.92-subtree')
2662
 
 
2663
 
    def _ignore_setting_bzrdir(self, format):
2664
 
        pass
2665
 
 
2666
 
    _matchingbzrdir = property(_get_matching_bzrdir, _ignore_setting_bzrdir)
2667
 
 
2668
 
    def get_format_string(self):
2669
 
        """See RepositoryFormat.get_format_string()."""
2670
 
        return "Bazaar pack repository format 1 with subtree support (needs bzr 0.92)\n"
2671
 
 
2672
 
    def get_format_description(self):
2673
 
        """See RepositoryFormat.get_format_description()."""
2674
 
        return "Packs containing knits with subtree support\n"
2675
 
 
2676
 
 
2677
 
class RepositoryFormatKnitPack4(RepositoryFormatPack):
2678
 
    """A rich-root, no subtrees parameterized Pack repository.
2679
 
 
2680
 
    This repository format uses the xml6 serializer to get:
2681
 
     - support for recording full info about the tree root
2682
 
 
2683
 
    This format was introduced in 1.0.
2684
 
    """
2685
 
 
2686
 
    repository_class = KnitPackRepository
2687
 
    _commit_builder_class = PackRootCommitBuilder
2688
 
    rich_root_data = True
2689
 
    supports_tree_reference = False
2690
 
    @property
2691
 
    def _serializer(self):
2692
 
        return xml6.serializer_v6
2693
 
    # What index classes to use
2694
 
    index_builder_class = InMemoryGraphIndex
2695
 
    index_class = GraphIndex
2696
 
 
2697
 
    def _get_matching_bzrdir(self):
2698
 
        return bzrdir.format_registry.make_bzrdir(
2699
 
            'rich-root-pack')
2700
 
 
2701
 
    def _ignore_setting_bzrdir(self, format):
2702
 
        pass
2703
 
 
2704
 
    _matchingbzrdir = property(_get_matching_bzrdir, _ignore_setting_bzrdir)
2705
 
 
2706
 
    def get_format_string(self):
2707
 
        """See RepositoryFormat.get_format_string()."""
2708
 
        return ("Bazaar pack repository format 1 with rich root"
2709
 
                " (needs bzr 1.0)\n")
2710
 
 
2711
 
    def get_format_description(self):
2712
 
        """See RepositoryFormat.get_format_description()."""
2713
 
        return "Packs containing knits with rich root support\n"
2714
 
 
2715
 
 
2716
 
class RepositoryFormatKnitPack5(RepositoryFormatPack):
2717
 
    """Repository that supports external references to allow stacking.
2718
 
 
2719
 
    New in release 1.6.
2720
 
 
2721
 
    Supports external lookups, which results in non-truncated ghosts after
2722
 
    reconcile compared to pack-0.92 formats.
2723
 
    """
2724
 
 
2725
 
    repository_class = KnitPackRepository
2726
 
    _commit_builder_class = PackCommitBuilder
2727
 
    supports_external_lookups = True
2728
 
    # What index classes to use
2729
 
    index_builder_class = InMemoryGraphIndex
2730
 
    index_class = GraphIndex
2731
 
 
2732
 
    @property
2733
 
    def _serializer(self):
2734
 
        return xml5.serializer_v5
2735
 
 
2736
 
    def _get_matching_bzrdir(self):
2737
 
        return bzrdir.format_registry.make_bzrdir('1.6')
2738
 
 
2739
 
    def _ignore_setting_bzrdir(self, format):
2740
 
        pass
2741
 
 
2742
 
    _matchingbzrdir = property(_get_matching_bzrdir, _ignore_setting_bzrdir)
2743
 
 
2744
 
    def get_format_string(self):
2745
 
        """See RepositoryFormat.get_format_string()."""
2746
 
        return "Bazaar RepositoryFormatKnitPack5 (bzr 1.6)\n"
2747
 
 
2748
 
    def get_format_description(self):
2749
 
        """See RepositoryFormat.get_format_description()."""
2750
 
        return "Packs 5 (adds stacking support, requires bzr 1.6)"
2751
 
 
2752
 
 
2753
 
class RepositoryFormatKnitPack5RichRoot(RepositoryFormatPack):
2754
 
    """A repository with rich roots and stacking.
2755
 
 
2756
 
    New in release 1.6.1.
2757
 
 
2758
 
    Supports stacking on other repositories, allowing data to be accessed
2759
 
    without being stored locally.
2760
 
    """
2761
 
 
2762
 
    repository_class = KnitPackRepository
2763
 
    _commit_builder_class = PackRootCommitBuilder
2764
 
    rich_root_data = True
2765
 
    supports_tree_reference = False # no subtrees
2766
 
    supports_external_lookups = True
2767
 
    # What index classes to use
2768
 
    index_builder_class = InMemoryGraphIndex
2769
 
    index_class = GraphIndex
2770
 
 
2771
 
    @property
2772
 
    def _serializer(self):
2773
 
        return xml6.serializer_v6
2774
 
 
2775
 
    def _get_matching_bzrdir(self):
2776
 
        return bzrdir.format_registry.make_bzrdir(
2777
 
            '1.6.1-rich-root')
2778
 
 
2779
 
    def _ignore_setting_bzrdir(self, format):
2780
 
        pass
2781
 
 
2782
 
    _matchingbzrdir = property(_get_matching_bzrdir, _ignore_setting_bzrdir)
2783
 
 
2784
 
    def get_format_string(self):
2785
 
        """See RepositoryFormat.get_format_string()."""
2786
 
        return "Bazaar RepositoryFormatKnitPack5RichRoot (bzr 1.6.1)\n"
2787
 
 
2788
 
    def get_format_description(self):
2789
 
        return "Packs 5 rich-root (adds stacking support, requires bzr 1.6.1)"
2790
 
 
2791
 
 
2792
 
class RepositoryFormatKnitPack5RichRootBroken(RepositoryFormatPack):
2793
 
    """A repository with rich roots and external references.
2794
 
 
2795
 
    New in release 1.6.
2796
 
 
2797
 
    Supports external lookups, which results in non-truncated ghosts after
2798
 
    reconcile compared to pack-0.92 formats.
2799
 
 
2800
 
    This format was deprecated because the serializer it uses accidentally
2801
 
    supported subtrees, when the format was not intended to. This meant that
2802
 
    someone could accidentally fetch from an incorrect repository.
2803
 
    """
2804
 
 
2805
 
    repository_class = KnitPackRepository
2806
 
    _commit_builder_class = PackRootCommitBuilder
2807
 
    rich_root_data = True
2808
 
    supports_tree_reference = False # no subtrees
2809
 
 
2810
 
    supports_external_lookups = True
2811
 
    # What index classes to use
2812
 
    index_builder_class = InMemoryGraphIndex
2813
 
    index_class = GraphIndex
2814
 
 
2815
 
    @property
2816
 
    def _serializer(self):
2817
 
        return xml7.serializer_v7
2818
 
 
2819
 
    def _get_matching_bzrdir(self):
2820
 
        matching = bzrdir.format_registry.make_bzrdir(
2821
 
            '1.6.1-rich-root')
2822
 
        matching.repository_format = self
2823
 
        return matching
2824
 
 
2825
 
    def _ignore_setting_bzrdir(self, format):
2826
 
        pass
2827
 
 
2828
 
    _matchingbzrdir = property(_get_matching_bzrdir, _ignore_setting_bzrdir)
2829
 
 
2830
 
    def get_format_string(self):
2831
 
        """See RepositoryFormat.get_format_string()."""
2832
 
        return "Bazaar RepositoryFormatKnitPack5RichRoot (bzr 1.6)\n"
2833
 
 
2834
 
    def get_format_description(self):
2835
 
        return ("Packs 5 rich-root (adds stacking support, requires bzr 1.6)"
2836
 
                " (deprecated)")
2837
 
 
2838
 
    def is_deprecated(self):
2839
 
        return True
2840
 
 
2841
 
 
2842
 
class RepositoryFormatKnitPack6(RepositoryFormatPack):
2843
 
    """A repository with stacking and btree indexes,
2844
 
    without rich roots or subtrees.
2845
 
 
2846
 
    This is equivalent to pack-1.6 with B+Tree indices.
2847
 
    """
2848
 
 
2849
 
    repository_class = KnitPackRepository
2850
 
    _commit_builder_class = PackCommitBuilder
2851
 
    supports_external_lookups = True
2852
 
    # What index classes to use
2853
 
    index_builder_class = btree_index.BTreeBuilder
2854
 
    index_class = btree_index.BTreeGraphIndex
2855
 
 
2856
 
    @property
2857
 
    def _serializer(self):
2858
 
        return xml5.serializer_v5
2859
 
 
2860
 
    def _get_matching_bzrdir(self):
2861
 
        return bzrdir.format_registry.make_bzrdir('1.9')
2862
 
 
2863
 
    def _ignore_setting_bzrdir(self, format):
2864
 
        pass
2865
 
 
2866
 
    _matchingbzrdir = property(_get_matching_bzrdir, _ignore_setting_bzrdir)
2867
 
 
2868
 
    def get_format_string(self):
2869
 
        """See RepositoryFormat.get_format_string()."""
2870
 
        return "Bazaar RepositoryFormatKnitPack6 (bzr 1.9)\n"
2871
 
 
2872
 
    def get_format_description(self):
2873
 
        """See RepositoryFormat.get_format_description()."""
2874
 
        return "Packs 6 (uses btree indexes, requires bzr 1.9)"
2875
 
 
2876
 
 
2877
 
class RepositoryFormatKnitPack6RichRoot(RepositoryFormatPack):
2878
 
    """A repository with rich roots, no subtrees, stacking and btree indexes.
2879
 
 
2880
 
    1.6-rich-root with B+Tree indices.
2881
 
    """
2882
 
 
2883
 
    repository_class = KnitPackRepository
2884
 
    _commit_builder_class = PackRootCommitBuilder
2885
 
    rich_root_data = True
2886
 
    supports_tree_reference = False # no subtrees
2887
 
    supports_external_lookups = True
2888
 
    # What index classes to use
2889
 
    index_builder_class = btree_index.BTreeBuilder
2890
 
    index_class = btree_index.BTreeGraphIndex
2891
 
 
2892
 
    @property
2893
 
    def _serializer(self):
2894
 
        return xml6.serializer_v6
2895
 
 
2896
 
    def _get_matching_bzrdir(self):
2897
 
        return bzrdir.format_registry.make_bzrdir(
2898
 
            '1.9-rich-root')
2899
 
 
2900
 
    def _ignore_setting_bzrdir(self, format):
2901
 
        pass
2902
 
 
2903
 
    _matchingbzrdir = property(_get_matching_bzrdir, _ignore_setting_bzrdir)
2904
 
 
2905
 
    def get_format_string(self):
2906
 
        """See RepositoryFormat.get_format_string()."""
2907
 
        return "Bazaar RepositoryFormatKnitPack6RichRoot (bzr 1.9)\n"
2908
 
 
2909
 
    def get_format_description(self):
2910
 
        return "Packs 6 rich-root (uses btree indexes, requires bzr 1.9)"
2911
 
 
2912
 
 
2913
 
class RepositoryFormatPackDevelopment2Subtree(RepositoryFormatPack):
2914
 
    """A subtrees development repository.
2915
 
 
2916
 
    This format should be retained in 2.3, to provide an upgrade path from this
2917
 
    to RepositoryFormat2aSubtree.  It can be removed in later releases.
2918
 
 
2919
 
    1.6.1-subtree[as it might have been] with B+Tree indices.
2920
 
    """
2921
 
 
2922
 
    repository_class = KnitPackRepository
2923
 
    _commit_builder_class = PackRootCommitBuilder
2924
 
    rich_root_data = True
2925
 
    experimental = True
2926
 
    supports_tree_reference = True
2927
 
    supports_external_lookups = True
2928
 
    # What index classes to use
2929
 
    index_builder_class = btree_index.BTreeBuilder
2930
 
    index_class = btree_index.BTreeGraphIndex
2931
 
 
2932
 
    @property
2933
 
    def _serializer(self):
2934
 
        return xml7.serializer_v7
2935
 
 
2936
 
    def _get_matching_bzrdir(self):
2937
 
        return bzrdir.format_registry.make_bzrdir(
2938
 
            'development5-subtree')
2939
 
 
2940
 
    def _ignore_setting_bzrdir(self, format):
2941
 
        pass
2942
 
 
2943
 
    _matchingbzrdir = property(_get_matching_bzrdir, _ignore_setting_bzrdir)
2944
 
 
2945
 
    def get_format_string(self):
2946
 
        """See RepositoryFormat.get_format_string()."""
2947
 
        return ("Bazaar development format 2 with subtree support "
2948
 
            "(needs bzr.dev from before 1.8)\n")
2949
 
 
2950
 
    def get_format_description(self):
2951
 
        """See RepositoryFormat.get_format_description()."""
2952
 
        return ("Development repository format, currently the same as "
2953
 
            "1.6.1-subtree with B+Tree indices.\n")
2954
 
 
2955
 
 
2956
2597
class RetryPackOperations(errors.RetryWithNewPacks):
2957
2598
    """Raised when we are packing and we find a missing file.
2958
2599