/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to olive/backend/init.py

  • Committer: Szilveszter Farkas (Phanatic)
  • Date: 2006-09-27 19:11:59 UTC
  • mfrom: (0.8.90 merge)
  • mto: (93.1.1 win32.bialix)
  • mto: This revision was merged to the branch mainline in revision 103.
  • Revision ID: Szilveszter.Farkas@gmail.com-20060927191159-cc4e54f613575779
Merge all changes. Release 0.11.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006 by Szilveszter Farkas (Phanatic) <szilveszter.farkas@gmail.com>
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
 
 
22
 
import bzrlib
23
 
import bzrlib.bzrdir as bzrdir
24
 
import bzrlib.errors as errors
25
 
 
26
 
from bzrlib.branch import Branch
27
 
 
28
 
from errors import (AlreadyBranchError, BranchExistsWithoutWorkingTree,
29
 
                    NonExistingParent, NonExistingRevision,
30
 
                    NonExistingSource, NotBranchError, TargetAlreadyExists)
31
 
 
32
 
def branch(from_location, to_location, revision=None):
33
 
    """ Create a branch from a local/remote location.
34
 
    
35
 
    :param from_location: the original location of the branch
36
 
    
37
 
    :param to_location: the directory where the branch should be created
38
 
    
39
 
    :param revision: if specified, the given revision will be branched
40
 
    
41
 
    :return: number of revisions branched
42
 
    """
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
52
 
    except errors.NotBranchError:
53
 
        raise NotBranchError(from_location)
54
 
 
55
 
    br_from.lock_read()
56
 
 
57
 
    try:
58
 
        basis_dir = None
59
 
        if revision is not None:
60
 
            revision_id = br_from.get_rev_id(revision)
61
 
        else:
62
 
            revision_id = None
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
 
 
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
 
    """
100
 
    try:
101
 
        source = Branch.open(branch_location)
102
 
    except errors.NotBranchError:
103
 
        raise NotBranchError(branch_location)
104
 
    
105
 
    if revision is not None:
106
 
        revision_id = source.get_rev_id(revision)
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
113
 
    if (bzrlib.osutils.abspath(to_location) ==
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
 
 
121
 
    to_location = to_location + '/' + os.path.basename(branch_location.rstrip("/\\"))
122
 
    
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])
148
 
 
149
 
        checkout.create_workingtree(revision_id)
150
 
    finally:
151
 
        bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
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()