/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 backend/commit.py

  • Committer: Szilveszter Farkas (Phanatic)
  • Date: 2006-07-06 17:08:45 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-20060706170845-da015b629f5876a4
2006-07-06  Szilveszter Farkas <Szilveszter.Farkas@gmail.com>

    * I'm not dead :)
    * backend/errors.py: added some exceptions related to fileops.move()
    * backend/fileops.py: implemented move()
    * backend/info_helper.py: added diff_helper()
    * backend/info.py: implemented diff()

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2006 by Szilveszter Farkas (Phanatic)
 
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 codecs
 
20
 
 
21
import bzrlib
 
22
import bzrlib.errors as errors
 
23
 
 
24
from errors import (EmptyMessageError, NoMessageNoFileError,
 
25
                    NoChangesToCommitError, ConflictsInTreeError,
 
26
                    StrictCommitError, BoundBranchOutOfDate,
 
27
                    LocalRequiresBoundBranch, NotBranchError, NonExistingParent,
 
28
                    PathPrefixNotCreated, NoLocationKnown,
 
29
                    DivergedBranchesError)
 
30
 
 
31
def commit(selected_list, message=None, file=None, unchanged=False,
 
32
           strict=False, local=False):
 
33
    """ Command to commit changes into the branch.
 
34
    
 
35
    :param selected_list: list of files you want to commit (at least the top working directory has to specified)
 
36
    
 
37
    :param message: commit message
 
38
    
 
39
    :param file: the file which contains the commit message
 
40
    
 
41
    :param unchanged: force commit if nothing has changed since the last commit
 
42
    
 
43
    :param strict: refuse to commit if there are unknown files in the working tree
 
44
    
 
45
    :param local: perform a local only commit in a bound branch
 
46
    """
 
47
    from bzrlib.builtins import tree_files
 
48
    from bzrlib.commit import NullCommitReporter
 
49
 
 
50
    try:
 
51
        tree, selected_list = tree_files(selected_list)
 
52
    except errors.NotBranchError:
 
53
        raise NotBranchError
 
54
    
 
55
    if local and not tree.branch.get_bound_location():
 
56
        raise LocalRequiresBoundBranch()
 
57
    if message is None and not file:
 
58
        if message is None:
 
59
            raise NoMessageNoFileError
 
60
    elif message and file:
 
61
        raise NoMessageNoFileError
 
62
 
 
63
    if file:
 
64
        message = codecs.open(file, 'rt', bzrlib.user_encoding).read()
 
65
 
 
66
    if message == "":
 
67
        raise EmptyMessageError
 
68
 
 
69
    reporter = NullCommitReporter()
 
70
 
 
71
    try:
 
72
        tree.commit(message, specific_files=selected_list,
 
73
                    allow_pointless=unchanged, strict=strict, local=local,
 
74
                    reporter=reporter)
 
75
    except errors.PointlessCommit:
 
76
        raise NoChangesToCommitError
 
77
    except errors.ConflictsInTree:
 
78
        raise ConflictsInTreeError
 
79
    except errors.StrictCommitFailed:
 
80
        raise StrictCommitError
 
81
    except errors.BoundBranchOutOfDate, e:
 
82
        raise BoundBranchOutOfDate(str(e))
 
83
 
 
84
def push(branch, location=None, remember=False, overwrite=False,
 
85
         create_prefix=False):
 
86
    """ Update a mirror of a branch.
 
87
    
 
88
    :param branch: the source branch
 
89
    
 
90
    :param location: the location of the branch that you'd like to update
 
91
    
 
92
    :param remember: if set, the location will be stored
 
93
    
 
94
    :param overwrite: overwrite target location if it diverged
 
95
    
 
96
    :param create_prefix: create the path leading up to the branch if it doesn't exist
 
97
    
 
98
    :return: number of revisions pushed
 
99
    """
 
100
    from bzrlib.branch import Branch
 
101
    from bzrlib.transport import get_transport
 
102
        
 
103
    br_from = Branch.open_containing(branch)[0]
 
104
    stored_loc = br_from.get_push_location()
 
105
    if location is None:
 
106
        if stored_loc is None:
 
107
            raise NoLocationKnown
 
108
        else:
 
109
            location = stored_loc
 
110
 
 
111
    transport = get_transport(location)
 
112
    location_url = transport.base
 
113
 
 
114
    if br_from.get_push_location() is None or remember:
 
115
        br_from.set_push_location(location_url)
 
116
 
 
117
    old_rh = []
 
118
 
 
119
    try:
 
120
        dir_to = bzrlib.bzrdir.BzrDir.open(location_url)
 
121
        br_to = dir_to.open_branch()
 
122
    except errors.NotBranchError:
 
123
        # create a branch.
 
124
        transport = transport.clone('..')
 
125
        if not create_prefix:
 
126
            try:
 
127
                relurl = transport.relpath(location_url)
 
128
                transport.mkdir(relurl)
 
129
            except errors.NoSuchFile:
 
130
                raise NonExistingParent(location)
 
131
        else:
 
132
            current = transport.base
 
133
            needed = [(transport, transport.relpath(location_url))]
 
134
            while needed:
 
135
                try:
 
136
                    transport, relpath = needed[-1]
 
137
                    transport.mkdir(relpath)
 
138
                    needed.pop()
 
139
                except errors.NoSuchFile:
 
140
                    new_transport = transport.clone('..')
 
141
                    needed.append((new_transport,
 
142
                                   new_transport.relpath(transport.base)))
 
143
                    if new_transport.base == transport.base:
 
144
                        raise PathPrefixNotCreated
 
145
        dir_to = br_from.bzrdir.clone(location_url,
 
146
            revision_id=br_from.last_revision())
 
147
        br_to = dir_to.open_branch()
 
148
        count = len(br_to.revision_history())
 
149
    else:
 
150
        old_rh = br_to.revision_history()
 
151
        try:
 
152
            try:
 
153
                tree_to = dir_to.open_workingtree()
 
154
            except errors.NotLocalUrl:
 
155
                # FIXME - what to do here? how should we warn the user?
 
156
                #warning('This transport does not update the working '
 
157
                #        'tree of: %s' % (br_to.base,))
 
158
                count = br_to.pull(br_from, overwrite)
 
159
            except errors.NoWorkingTree:
 
160
                count = br_to.pull(br_from, overwrite)
 
161
            else:
 
162
                count = tree_to.pull(br_from, overwrite)
 
163
        except errors.DivergedBranches:
 
164
            raise DivergedBranchesError
 
165
    
 
166
    return count