/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: Jelmer Vernooij
  • Date: 2012-07-09 15:23:26 UTC
  • mto: This revision was merged to the branch mainline in revision 794.
  • Revision ID: jelmer@samba.org-20120709152326-dzxb8zoz0btull7n
Remove bzr-notify.

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 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