~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/reconfigure.py

  • Committer: Aaron Bentley
  • Date: 2007-09-08 06:02:59 UTC
  • mto: This revision was merged to the branch mainline in revision 2826.
  • Revision ID: aaron.bentley@utoronto.ca-20070908060259-e1bzvj22gu66qk22
Begin work on reconfigure command

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2007 Canonical Ltd
 
2
#
 
3
# This program is free software; you can redistribute it and/or modify
 
4
# it under the terms of the GNU General Public License as published by
 
5
# the Free Software Foundation; either version 2 of the License, or
 
6
# (at your option) any later version.
 
7
#
 
8
# This program is distributed in the hope that it will be useful,
 
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
11
# GNU General Public License for more details.
 
12
#
 
13
# You should have received a copy of the GNU General Public License
 
14
# along with this program; if not, write to the Free Software
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
16
 
 
17
"""Reconfigure a bzrdir into a new tree/branch/repository layout"""
 
18
 
 
19
from bzrlib import (
 
20
    errors,
 
21
    )
 
22
 
 
23
class Reconfigure(object):
 
24
 
 
25
    def __init__(self, bzrdir, tree, branch, unbind):
 
26
        self.bzrdir = bzrdir
 
27
        self.tree = tree
 
28
        self.branch = branch
 
29
        self.unbind = unbind
 
30
 
 
31
    @staticmethod
 
32
    def to_branch(bzrdir):
 
33
        try:
 
34
            branch = bzrdir.open_branch()
 
35
        except errors.NotBranchError:
 
36
            raise errors.ReconfigurationNotSupported(bzrdir)
 
37
        unbind = (branch.get_bound_location() is not None)
 
38
        try:
 
39
            tree = bzrdir.open_workingtree()
 
40
        except errors.NoWorkingTree:
 
41
            raise errors.AlreadyBranch(bzrdir)
 
42
        return Reconfigure(bzrdir, tree, branch, unbind)
 
43
 
 
44
    def _check(self):
 
45
        changes = self.tree.changes_from(self.tree.basis_tree())
 
46
        if changes.has_changed():
 
47
            raise errors.UncommittedChanges(self.tree)
 
48
 
 
49
    def apply(self, force=False):
 
50
        if not force:
 
51
            self._check()
 
52
        self.bzrdir.destroy_workingtree()
 
53
        if self.unbind:
 
54
            self.branch.unbind()