~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/repofmt/pack_repo.py

  • Committer: Andrew Bennetts
  • Date: 2008-08-07 00:25:38 UTC
  • mfrom: (3612 +trunk)
  • mto: This revision was merged to the branch mainline in revision 3613.
  • Revision ID: andrew.bennetts@canonical.com-20080807002538-mtl1fcgy2fdabha4
Merge from bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
from bzrlib.lazy_import import lazy_import
18
18
lazy_import(globals(), """
19
19
from itertools import izip
20
 
import math
21
20
import md5
22
21
import time
23
22
 
24
23
from bzrlib import (
25
 
        debug,
26
 
        graph,
27
 
        pack,
28
 
        ui,
29
 
        )
 
24
    debug,
 
25
    graph,
 
26
    pack,
 
27
    transactions,
 
28
    ui,
 
29
    )
30
30
from bzrlib.index import (
31
31
    GraphIndex,
32
32
    GraphIndexBuilder,
41
41
    _DirectPackAccess,
42
42
    )
43
43
from bzrlib.osutils import rand_chars, split_lines
44
 
from bzrlib.pack import ContainerWriter
45
 
from bzrlib.store import revision
46
44
from bzrlib import tsort
47
45
""")
48
46
from bzrlib import (
50
48
    errors,
51
49
    lockable_files,
52
50
    lockdir,
53
 
    osutils,
54
51
    symbol_versioning,
55
 
    transactions,
56
52
    xml5,
57
53
    xml6,
58
54
    xml7,
59
55
    )
60
56
 
61
 
from bzrlib.decorators import needs_read_lock, needs_write_lock
 
57
from bzrlib.decorators import needs_write_lock
62
58
from bzrlib.repofmt.knitrepo import KnitRepository
63
59
from bzrlib.repository import (
64
60
    CommitBuilder,
65
 
    InterRepository,
66
 
    MetaDirRepository,
67
61
    MetaDirRepositoryFormat,
68
62
    RepositoryFormat,
69
63
    RootCommitBuilder,
70
64
    )
71
65
import bzrlib.revision as _mod_revision
72
 
from bzrlib.store.versioned import VersionedFileStore
73
66
from bzrlib.trace import (
74
67
    mutter,
75
 
    mutter_callsite,
76
 
    note,
77
68
    warning,
78
69
    )
79
70
 
1728
1719
        self._reconcile_does_inventory_gc = True
1729
1720
        self._reconcile_fixes_text_parents = True
1730
1721
        self._reconcile_backsup_inventory = False
 
1722
        self._fetch_order = 'unsorted'
 
1723
 
 
1724
    def _warn_if_deprecated(self):
 
1725
        # This class isn't deprecated
 
1726
        pass
1731
1727
 
1732
1728
    def _abort_write_group(self):
1733
1729
        self._pack_collection._abort_write_group()
1814
1810
            raise errors.ReadOnlyError(self)
1815
1811
        self._write_lock_count += 1
1816
1812
        if self._write_lock_count == 1:
1817
 
            from bzrlib import transactions
1818
1813
            self._transaction = transactions.WriteTransaction()
1819
1814
            for repo in self._fallback_repositories:
1820
1815
                # Writes don't affect fallback repos
1975
1970
        pass
1976
1971
 
1977
1972
 
1978
 
class RepositoryFormatPack(MetaDirRepositoryFormat):
1979
 
    """Format logic for pack structured repositories.
1980
 
 
1981
 
    This repository format has:
1982
 
     - a list of packs in pack-names
1983
 
     - packs in packs/NAME.pack
1984
 
     - indices in indices/NAME.{iix,six,tix,rix}
1985
 
     - knit deltas in the packs, knit indices mapped to the indices.
1986
 
     - thunk objects to support the knits programming API.
1987
 
     - a format marker of its own
1988
 
     - an optional 'shared-storage' flag
1989
 
     - an optional 'no-working-trees' flag
1990
 
     - a LockDir lock
1991
 
    """
1992
 
 
1993
 
    # Set this attribute in derived classes to control the repository class
1994
 
    # created by open and initialize.
1995
 
    repository_class = None
1996
 
    # Set this attribute in derived classes to control the
1997
 
    # _commit_builder_class that the repository objects will have passed to
1998
 
    # their constructor.
1999
 
    _commit_builder_class = None
2000
 
    # Set this attribute in derived clases to control the _serializer that the
2001
 
    # repository objects will have passed to their constructor.
2002
 
    _serializer = None
2003
 
    # External references are not supported in pack repositories yet.
2004
 
    supports_external_lookups = False
2005
 
 
2006
 
    def initialize(self, a_bzrdir, shared=False):
2007
 
        """Create a pack based repository.
2008
 
 
2009
 
        :param a_bzrdir: bzrdir to contain the new repository; must already
2010
 
            be initialized.
2011
 
        :param shared: If true the repository will be initialized as a shared
2012
 
                       repository.
2013
 
        """
2014
 
        mutter('creating repository in %s.', a_bzrdir.transport.base)
2015
 
        dirs = ['indices', 'obsolete_packs', 'packs', 'upload']
2016
 
        builder = GraphIndexBuilder()
2017
 
        files = [('pack-names', builder.finish())]
2018
 
        utf8_files = [('format', self.get_format_string())]
2019
 
        
2020
 
        self._upload_blank_content(a_bzrdir, dirs, files, utf8_files, shared)
2021
 
        return self.open(a_bzrdir=a_bzrdir, _found=True)
2022
 
 
2023
 
    def open(self, a_bzrdir, _found=False, _override_transport=None):
2024
 
        """See RepositoryFormat.open().
2025
 
        
2026
 
        :param _override_transport: INTERNAL USE ONLY. Allows opening the
2027
 
                                    repository at a slightly different url
2028
 
                                    than normal. I.e. during 'upgrade'.
2029
 
        """
2030
 
        if not _found:
2031
 
            format = RepositoryFormat.find_format(a_bzrdir)
2032
 
        if _override_transport is not None:
2033
 
            repo_transport = _override_transport
2034
 
        else:
2035
 
            repo_transport = a_bzrdir.get_repository_transport(None)
2036
 
        control_files = lockable_files.LockableFiles(repo_transport,
2037
 
                                'lock', lockdir.LockDir)
2038
 
        return self.repository_class(_format=self,
2039
 
                              a_bzrdir=a_bzrdir,
2040
 
                              control_files=control_files,
2041
 
                              _commit_builder_class=self._commit_builder_class,
2042
 
                              _serializer=self._serializer)
2043
 
 
2044
 
 
2045
 
class RepositoryFormatKnitPack1(RepositoryFormatPack):
2046
 
    """A no-subtrees parameterized Pack repository.
2047
 
 
2048
 
    This format was introduced in 0.92.
2049
 
    """
2050
 
 
2051
 
    repository_class = KnitPackRepository
2052
 
    _commit_builder_class = PackCommitBuilder
2053
 
    _serializer = xml5.serializer_v5
2054
 
 
2055
 
    def _get_matching_bzrdir(self):
2056
 
        return bzrdir.format_registry.make_bzrdir('pack-0.92')
2057
 
 
2058
 
    def _ignore_setting_bzrdir(self, format):
2059
 
        pass
2060
 
 
2061
 
    _matchingbzrdir = property(_get_matching_bzrdir, _ignore_setting_bzrdir)
2062
 
 
2063
 
    def get_format_string(self):
2064
 
        """See RepositoryFormat.get_format_string()."""
2065
 
        return "Bazaar pack repository format 1 (needs bzr 0.92)\n"
2066
 
 
2067
 
    def get_format_description(self):
2068
 
        """See RepositoryFormat.get_format_description()."""
2069
 
        return "Packs containing knits without subtree support"
2070
 
 
2071
 
    def check_conversion_target(self, target_format):
2072
 
        pass
2073
 
 
2074
 
 
2075
1973
class RepositoryFormatKnitPack3(RepositoryFormatPack):
2076
1974
    """A subtrees parameterized Pack repository.
2077
1975