/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-07-20 14:31:08 UTC
  • mto: (0.14.1 main) (93.1.1 win32.bialix)
  • mto: This revision was merged to the branch mainline in revision 83.
  • Revision ID: Szilveszter.Farkas@gmail.com-20060720143108-12c16a5c52431578
2006-07-20  Szilveszter Farkas <Szilveszter.Farkas@gmail.com>

    * olive/frontend/gtk/__init__.py: implemented OliveCommunication.refresh_right()
    * olive/frontend/gtk/handler.py: implemented browsing in the file list
    * olive/backend/fileops.py: tweaked status() (to get proper status in fact)

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 init(location):
 
33
    """ Initialize a directory.
 
34
    
 
35
    :param location: full path to the directory you want to be versioned
 
36
    """
 
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):
 
59
    """ Create a branch from a local/remote location.
 
60
    
 
61
    :param from_location: the original location of the branch
 
62
    
 
63
    :param to_location: the directory where the branch should be created
 
64
    
 
65
    :param revision: if specified, the given revision will be branched
 
66
    
 
67
    :return: number of revisions branched
 
68
    """
 
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
 
78
    except errors.NotBranchError:
 
79
        raise NotBranchError(from_location)
 
80
 
 
81
    br_from.lock_read()
 
82
 
 
83
    try:
 
84
        basis_dir = None
 
85
        if revision is not None:
 
86
            revision_id = br_from.get_rev_id(revision)
 
87
        else:
 
88
            revision_id = None
 
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
 
 
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
    """
 
126
    try:
 
127
        source = Branch.open(branch_location)
 
128
    except errors.NotBranchError:
 
129
        raise NotBranchError(branch_location)
 
130
    
 
131
    if revision is not None:
 
132
        revision_id = source.get_rev_id(revision)
 
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
 
139
    if (bzrlib.osutils.abspath(to_location) ==
 
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
 
 
147
    to_location = to_location + '/' + os.path.basename(branch_location.rstrip("/\\"))
 
148
    
 
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])
 
174
 
 
175
        checkout.create_workingtree(revision_id)
 
176
    finally:
 
177
        bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)