/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 branch(from_location, to_location, revision=None):
0.8.2 by Szilveszter Farkas (Phanatic)
* backend/commit.py: commit() implemented
33
    """ Create a branch from a local/remote location.
34
    
0.8.3 by Szilveszter Farkas (Phanatic)
* backend/init.py: checkout() implemented - not tested yet
35
    :param from_location: the original location of the branch
0.8.2 by Szilveszter Farkas (Phanatic)
* backend/commit.py: commit() implemented
36
    
0.8.3 by Szilveszter Farkas (Phanatic)
* backend/init.py: checkout() implemented - not tested yet
37
    :param to_location: the directory where the branch should be created
0.8.2 by Szilveszter Farkas (Phanatic)
* backend/commit.py: commit() implemented
38
    
39
    :param revision: if specified, the given revision will be branched
40
    
41
    :return: number of revisions branched
42
    """
0.8.1 by Szilveszter Farkas (Phanatic)
* backend/errors.py: some basic exceptions added
43
    from bzrlib.transport import get_transport
44
45
    try:
46
        br_from = Branch.open(from_location)
47
    except OSError, e:
48
        if e.errno == errno.ENOENT:
49
            raise NonExistingSource(from_location)
50
        else:
51
            raise
0.8.15 by Szilveszter Farkas (Phanatic)
2006-07-18 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
52
    except errors.NotBranchError:
53
        raise NotBranchError(from_location)
0.8.1 by Szilveszter Farkas (Phanatic)
* backend/errors.py: some basic exceptions added
54
55
    br_from.lock_read()
56
57
    try:
58
        basis_dir = None
0.8.4 by Szilveszter Farkas (Phanatic)
* backend/commit.py: minor tweaks to push()
59
        if revision is not None:
60
            revision_id = br_from.get_rev_id(revision)
0.8.1 by Szilveszter Farkas (Phanatic)
* backend/errors.py: some basic exceptions added
61
        else:
0.8.4 by Szilveszter Farkas (Phanatic)
* backend/commit.py: minor tweaks to push()
62
            revision_id = None
0.8.1 by Szilveszter Farkas (Phanatic)
* backend/errors.py: some basic exceptions added
63
64
        to_location = to_location + '/' + os.path.basename(from_location.rstrip("/\\"))
65
        name = None
66
        to_transport = get_transport(to_location)
67
68
        try:
69
            to_transport.mkdir('.')
70
        except errors.FileExists:
71
            raise TargetAlreadyExists(to_location)
72
        except errors.NoSuchFile:
73
            raise NonExistingParent(to_location)
74
75
        try:
76
            dir = br_from.bzrdir.sprout(to_transport.base, revision_id, basis_dir)
77
            branch = dir.open_branch()
78
        except errors.NoSuchRevision:
79
            to_transport.delete_tree('.')
80
            raise NonExistingRevision(from_location, revision[0])
81
82
        if name:
83
            branch.control_files.put_utf8('branch-name', name)
84
    finally:
85
        br_from.unlock()
86
        
87
    return branch.revno()
88
0.8.3 by Szilveszter Farkas (Phanatic)
* backend/init.py: checkout() implemented - not tested yet
89
def checkout(branch_location, to_location, revision=None, lightweight=False):
90
    """ Create a new checkout of an existing branch.
91
    
92
    :param branch_location: the location of the branch you'd like to checkout
93
    
94
    :param to_location: the directory where the checkout should be created
95
    
96
    :param revision: the given revision will be checkout'ed (be aware!)
97
    
98
    :param lightweight: perform a lightweight checkout (be aware!)
99
    """
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
100
    try:
101
        source = Branch.open(branch_location)
102
    except errors.NotBranchError:
103
        raise NotBranchError(branch_location)
0.8.4 by Szilveszter Farkas (Phanatic)
* backend/commit.py: minor tweaks to push()
104
    
105
    if revision is not None:
106
        revision_id = source.get_rev_id(revision)
0.8.3 by Szilveszter Farkas (Phanatic)
* backend/init.py: checkout() implemented - not tested yet
107
    else:
108
        revision_id = None
109
110
    # if the source and to_location are the same, 
111
    # and there is no working tree,
112
    # then reconstitute a branch
0.8.4 by Szilveszter Farkas (Phanatic)
* backend/commit.py: minor tweaks to push()
113
    if (bzrlib.osutils.abspath(to_location) ==
0.8.3 by Szilveszter Farkas (Phanatic)
* backend/init.py: checkout() implemented - not tested yet
114
        bzrlib.osutils.abspath(branch_location)):
115
        try:
116
            source.bzrdir.open_workingtree()
117
        except errors.NoWorkingTree:
118
            source.bzrdir.create_workingtree()
119
            return
120
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
121
    to_location = to_location + '/' + os.path.basename(branch_location.rstrip("/\\"))
122
    
0.8.3 by Szilveszter Farkas (Phanatic)
* backend/init.py: checkout() implemented - not tested yet
123
    try:
124
        os.mkdir(to_location)
125
    except OSError, e:
126
        if e.errno == errno.EEXIST:
127
            raise TargetAlreadyExists(to_location)
128
        if e.errno == errno.ENOENT:
129
            raise NonExistingParent(to_location)
130
        else:
131
            raise
132
133
    old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
134
    bzrlib.bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirMetaFormat1())
135
136
    try:
137
        if lightweight:
138
            checkout = bzrdir.BzrDirMetaFormat1().initialize(to_location)
139
            bzrlib.branch.BranchReferenceFormat().initialize(checkout, source)
140
        else:
141
            checkout_branch = bzrlib.bzrdir.BzrDir.create_branch_convenience(
142
                to_location, force_new_tree=False)
143
            checkout = checkout_branch.bzrdir
144
            checkout_branch.bind(source)
145
            if revision_id is not None:
146
                rh = checkout_branch.revision_history()
147
                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()
148
0.8.3 by Szilveszter Farkas (Phanatic)
* backend/init.py: checkout() implemented - not tested yet
149
        checkout.create_workingtree(revision_id)
150
    finally:
151
        bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
152
153
def init(location):
154
    """ Initialize a directory.
155
    
156
    :param location: full path to the directory you want to be versioned
157
    """
158
    from bzrlib.builtins import get_format_type
159
160
    format = get_format_type('default')
161
 
162
    if not os.path.exists(location):
163
        os.mkdir(location)
164
 
165
    try:
166
        existing_bzrdir = bzrdir.BzrDir.open(location)
167
    except errors.NotBranchError:
168
        bzrdir.BzrDir.create_branch_convenience(location, format=format)
169
    else:
170
        if existing_bzrdir.has_branch():
171
            if existing_bzrdir.has_workingtree():
172
                raise AlreadyBranchError(location)
173
            else:
174
                raise BranchExistsWithoutWorkingTree(location)
175
        else:
176
            existing_bzrdir.create_branch()
177
            existing_bzrdir.create_workingtree()