~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/branch.py

  • Committer: Martin Pool
  • Date: 2005-09-16 08:49:31 UTC
  • Revision ID: mbp@sourcefrog.net-20050916084931-b6792a121f4f8ae9
- add Branch constructor option to relax version check 
  to help with upgrade process

- tidy up imports

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
     sha_file, appendpath, file_kind
27
27
 
28
28
from bzrlib.errors import (BzrError, InvalidRevisionNumber, InvalidRevisionId,
29
 
                           NoSuchRevision, HistoryMissing)
 
29
                           NoSuchRevision, HistoryMissing, NotBranchError)
30
30
from bzrlib.textui import show_status
31
31
from bzrlib.revision import Revision, validate_revision_id
32
32
from bzrlib.delta import compare_trees
103
103
        if tail:
104
104
            s.insert(0, tail)
105
105
    else:
106
 
        from errors import NotBranchError
107
106
        raise NotBranchError("path %r is not within branch %r" % (rp, base))
108
107
 
109
108
    return os.sep.join(s)
137
136
        head, tail = os.path.split(f)
138
137
        if head == f:
139
138
            # reached the root, whatever that may be
140
 
            raise bzrlib.errors.NotBranchError('%s is not in a branch' % orig_f)
 
139
            raise NotBranchError('%s is not in a branch' % orig_f)
141
140
        f = head
142
141
 
143
142
 
180
179
    # This should match a prefix with a function which accepts
181
180
    REVISION_NAMESPACES = {}
182
181
 
183
 
    def __init__(self, base, init=False, find_root=True):
 
182
    def __init__(self, base, init=False, find_root=True,
 
183
                 relax_version_check=False):
184
184
        """Create new branch object at a particular location.
185
185
 
186
186
        base -- Base directory for the branch.
192
192
        find_root -- If true and init is false, find the root of the
193
193
             existing branch containing base.
194
194
 
 
195
        relax_version_check -- If true, the usual check for the branch
 
196
            version is not applied.  This is intended only for
 
197
            upgrade/recovery type use; it's not guaranteed that
 
198
            all operations will work on old format branches.
 
199
 
195
200
        In the test suite, creation of new trees is tested using the
196
201
        `ScratchBranch` class.
197
202
        """
203
208
        else:
204
209
            self.base = os.path.realpath(base)
205
210
            if not isdir(self.controlfilename('.')):
206
 
                from errors import NotBranchError
207
211
                raise NotBranchError("not a bzr branch: %s" % quotefn(base),
208
 
                                     ['use "bzr init" to initialize a new working tree',
209
 
                                      'current bzr can only operate from top-of-tree'])
210
 
        self._check_format()
 
212
                                     ['use "bzr init" to initialize a new working tree'])
 
213
        
 
214
        self._check_format(relax_version_check)
211
215
 
212
216
        self.weave_store = WeaveStore(self.controlfilename('weaves'))
213
217
        self.revision_store = ImmutableStore(self.controlfilename('revision-store'))
332
336
        
333
337
 
334
338
 
335
 
    def _check_format(self):
 
339
    def _check_format(self, relax_version_check):
336
340
        """Check this branch format is supported.
337
341
 
338
342
        The format level is stored, as an integer, in
344
348
        fmt = self.controlfile('branch-format', 'r').read()
345
349
        if fmt == BZR_BRANCH_FORMAT_5:
346
350
            self._branch_format = 5
347
 
        else:
348
 
            raise BzrError('sorry, branch format "%s" not supported; ' 
349
 
                           'use a different bzr version, '
350
 
                           'or run "bzr upgrade", '
351
 
                           'or remove the .bzr directory and "bzr init" again'
352
 
                           % fmt.rstrip('\n\r'))
 
351
            return
 
352
        elif relax_version_check:
 
353
            if fmt == BZR_BRANCH_FORMAT_4:
 
354
                self._branch_format = 4
 
355
                return
 
356
            
 
357
        raise BzrError('sorry, branch format "%s" not supported; ' 
 
358
                       'use a different bzr version, '
 
359
                       'or run "bzr upgrade"'
 
360
                       % fmt.rstrip('\n\r'))
 
361
        
353
362
 
354
363
    def get_root_id(self):
355
364
        """Return the id of this branches root"""