/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
0.8.9 by Szilveszter Farkas (Phanatic)
2006-07-08 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
1
# Copyright (C) 2006 by Szilveszter Farkas (Phanatic) <szilveszter.farkas@gmail.com>
0.8.1 by Szilveszter Farkas (Phanatic)
* backend/errors.py: some basic exceptions added
2
# Some parts of the code are:
3
# Copyright (C) 2005, 2006 by Canonical Ltd
4
5
# This program is free software; you can redistribute it and/or modify
6
# it under the terms of the GNU General Public License as published by
7
# the Free Software Foundation; either version 2 of the License, or
8
# (at your option) any later version.
9
10
# This program is distributed in the hope that it will be useful,
11
# but WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
# GNU General Public License for more details.
14
15
# You should have received a copy of the GNU General Public License
16
# along with this program; if not, write to the Free Software
17
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
19
import errno
20
import os
21
0.8.3 by Szilveszter Farkas (Phanatic)
* backend/init.py: checkout() implemented - not tested yet
22
import bzrlib
23
import bzrlib.bzrdir as bzrdir
0.8.1 by Szilveszter Farkas (Phanatic)
* backend/errors.py: some basic exceptions added
24
import bzrlib.errors as errors
25
0.8.3 by Szilveszter Farkas (Phanatic)
* backend/init.py: checkout() implemented - not tested yet
26
from bzrlib.branch import Branch
27
0.8.1 by Szilveszter Farkas (Phanatic)
* backend/errors.py: some basic exceptions added
28
from errors import (AlreadyBranchError, BranchExistsWithoutWorkingTree,
0.8.7 by Szilveszter Farkas (Phanatic)
2006-06-20 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
29
                    NonExistingParent, NonExistingRevision,
0.8.15 by Szilveszter Farkas (Phanatic)
2006-07-18 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
30
                    NonExistingSource, NotBranchError, TargetAlreadyExists)
0.8.1 by Szilveszter Farkas (Phanatic)
* backend/errors.py: some basic exceptions added
31
32
def init(location):
0.8.2 by Szilveszter Farkas (Phanatic)
* backend/commit.py: commit() implemented
33
    """ Initialize a directory.
34
    
35
    :param location: full path to the directory you want to be versioned
36
    """
0.8.1 by Szilveszter Farkas (Phanatic)
* backend/errors.py: some basic exceptions added
37
    from bzrlib.builtins import get_format_type
38
39
    format = get_format_type('default')
40
 
41
    if not os.path.exists(location):
42
        os.mkdir(location)
43
 
44
    try:
45
        existing_bzrdir = bzrdir.BzrDir.open(location)
46
    except errors.NotBranchError:
47
        bzrdir.BzrDir.create_branch_convenience(location, format=format)
48
    else:
49
        if existing_bzrdir.has_branch():
50
            if existing_bzrdir.has_workingtree():
51
                raise AlreadyBranchError(location)
52
            else:
53
                raise BranchExistsWithoutWorkingTree(location)
54
        else:
55
            existing_bzrdir.create_branch()
56
            existing_bzrdir.create_workingtree()
57
58
def branch(from_location, to_location, revision=None):
0.8.2 by Szilveszter Farkas (Phanatic)
* backend/commit.py: commit() implemented
59
    """ Create a branch from a local/remote location.
60
    
0.8.3 by Szilveszter Farkas (Phanatic)
* backend/init.py: checkout() implemented - not tested yet
61
    :param from_location: the original location of the branch
0.8.2 by Szilveszter Farkas (Phanatic)
* backend/commit.py: commit() implemented
62
    
0.8.3 by Szilveszter Farkas (Phanatic)
* backend/init.py: checkout() implemented - not tested yet
63
    :param to_location: the directory where the branch should be created
0.8.2 by Szilveszter Farkas (Phanatic)
* backend/commit.py: commit() implemented
64
    
65
    :param revision: if specified, the given revision will be branched
66
    
67
    :return: number of revisions branched
68
    """
0.8.1 by Szilveszter Farkas (Phanatic)
* backend/errors.py: some basic exceptions added
69
    from bzrlib.transport import get_transport
70
71
    try:
72
        br_from = Branch.open(from_location)
73
    except OSError, e:
74
        if e.errno == errno.ENOENT:
75
            raise NonExistingSource(from_location)
76
        else:
77
            raise
0.8.15 by Szilveszter Farkas (Phanatic)
2006-07-18 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
78
    except errors.NotBranchError:
79
        raise NotBranchError(from_location)
0.8.1 by Szilveszter Farkas (Phanatic)
* backend/errors.py: some basic exceptions added
80
81
    br_from.lock_read()
82
83
    try:
84
        basis_dir = None
0.8.4 by Szilveszter Farkas (Phanatic)
* backend/commit.py: minor tweaks to push()
85
        if revision is not None:
86
            revision_id = br_from.get_rev_id(revision)
0.8.1 by Szilveszter Farkas (Phanatic)
* backend/errors.py: some basic exceptions added
87
        else:
0.8.4 by Szilveszter Farkas (Phanatic)
* backend/commit.py: minor tweaks to push()
88
            revision_id = None
0.8.1 by Szilveszter Farkas (Phanatic)
* backend/errors.py: some basic exceptions added
89
90
        to_location = to_location + '/' + os.path.basename(from_location.rstrip("/\\"))
91
        name = None
92
        to_transport = get_transport(to_location)
93
94
        try:
95
            to_transport.mkdir('.')
96
        except errors.FileExists:
97
            raise TargetAlreadyExists(to_location)
98
        except errors.NoSuchFile:
99
            raise NonExistingParent(to_location)
100
101
        try:
102
            dir = br_from.bzrdir.sprout(to_transport.base, revision_id, basis_dir)
103
            branch = dir.open_branch()
104
        except errors.NoSuchRevision:
105
            to_transport.delete_tree('.')
106
            raise NonExistingRevision(from_location, revision[0])
107
108
        if name:
109
            branch.control_files.put_utf8('branch-name', name)
110
    finally:
111
        br_from.unlock()
112
        
113
    return branch.revno()
114
0.8.3 by Szilveszter Farkas (Phanatic)
* backend/init.py: checkout() implemented - not tested yet
115
def checkout(branch_location, to_location, revision=None, lightweight=False):
116
    """ Create a new checkout of an existing branch.
117
    
118
    :param branch_location: the location of the branch you'd like to checkout
119
    
120
    :param to_location: the directory where the checkout should be created
121
    
122
    :param revision: the given revision will be checkout'ed (be aware!)
123
    
124
    :param lightweight: perform a lightweight checkout (be aware!)
125
    """
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
126
    try:
127
        source = Branch.open(branch_location)
128
    except errors.NotBranchError:
129
        raise NotBranchError(branch_location)
0.8.4 by Szilveszter Farkas (Phanatic)
* backend/commit.py: minor tweaks to push()
130
    
131
    if revision is not None:
132
        revision_id = source.get_rev_id(revision)
0.8.3 by Szilveszter Farkas (Phanatic)
* backend/init.py: checkout() implemented - not tested yet
133
    else:
134
        revision_id = None
135
136
    # if the source and to_location are the same, 
137
    # and there is no working tree,
138
    # then reconstitute a branch
0.8.4 by Szilveszter Farkas (Phanatic)
* backend/commit.py: minor tweaks to push()
139
    if (bzrlib.osutils.abspath(to_location) ==
0.8.3 by Szilveszter Farkas (Phanatic)
* backend/init.py: checkout() implemented - not tested yet
140
        bzrlib.osutils.abspath(branch_location)):
141
        try:
142
            source.bzrdir.open_workingtree()
143
        except errors.NoWorkingTree:
144
            source.bzrdir.create_workingtree()
145
            return
146
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
147
    to_location = to_location + '/' + os.path.basename(branch_location.rstrip("/\\"))
148
    
0.8.3 by Szilveszter Farkas (Phanatic)
* backend/init.py: checkout() implemented - not tested yet
149
    try:
150
        os.mkdir(to_location)
151
    except OSError, e:
152
        if e.errno == errno.EEXIST:
153
            raise TargetAlreadyExists(to_location)
154
        if e.errno == errno.ENOENT:
155
            raise NonExistingParent(to_location)
156
        else:
157
            raise
158
159
    old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
160
    bzrlib.bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirMetaFormat1())
161
162
    try:
163
        if lightweight:
164
            checkout = bzrdir.BzrDirMetaFormat1().initialize(to_location)
165
            bzrlib.branch.BranchReferenceFormat().initialize(checkout, source)
166
        else:
167
            checkout_branch = bzrlib.bzrdir.BzrDir.create_branch_convenience(
168
                to_location, force_new_tree=False)
169
            checkout = checkout_branch.bzrdir
170
            checkout_branch.bind(source)
171
            if revision_id is not None:
172
                rh = checkout_branch.revision_history()
173
                checkout_branch.set_revision_history(rh[:rh.index(revision_id) + 1])
0.8.4 by Szilveszter Farkas (Phanatic)
* backend/commit.py: minor tweaks to push()
174
0.8.3 by Szilveszter Farkas (Phanatic)
* backend/init.py: checkout() implemented - not tested yet
175
        checkout.create_workingtree(revision_id)
176
    finally:
177
        bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)