39
38
class PushDialog(Gtk.Dialog):
40
39
"""New implementation of the Push dialog."""
42
def __init__(self, repository=None, revid=None, branch=None, parent=None):
41
def __init__(self, repository, revid, branch=None, parent=None):
43
42
"""Initialize the Push dialog. """
44
43
super(PushDialog, self).__init__(
45
44
title="Push", parent=parent, flags=0, border_width=6,
46
45
buttons=(Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE))
47
if repository is None:
48
repository = branch.repository
49
46
self.branch = branch
52
49
self.repository = repository
54
revid = branch.last_revision()
57
52
# Create the widgets
141
136
:param overwrite: overwrite target location if it diverged
142
137
:return: number of revisions pushed
145
to_transport = get_transport(location)
139
transport = get_transport(location)
140
location_url = transport.base
147
dir_to = ControlDir.open_from_transport(to_transport)
143
dir_to = BzrDir.open(location_url)
144
br_to = dir_to.open_branch()
148
145
except errors.NotBranchError:
147
transport = transport.clone('..')
153
br_to = br_from.create_clone_on_transport(
154
to_transport, revision_id=revision_id)
149
relurl = transport.relpath(location_url)
150
transport.mkdir(relurl)
155
151
except errors.NoSuchFile:
156
152
response = question_dialog(
157
153
_i18n('Non existing parent directory'),
158
154
_i18n("The parent directory (%s)\ndoesn't exist. Create?") %
160
156
if response == Gtk.ResponseType.OK:
161
br_to = br_from.create_clone_on_transport(
162
to_transport, revision_id=revision_id, create_prefix=True)
157
transport.create_prefix()
164
return _i18n("Push aborted.")
165
push_result = create_push_result(br_from, br_to)
160
dir_to = br_from.bzrdir.clone(location_url,
161
revision_id=br_from.last_revision())
162
br_to = dir_to.open_branch()
163
count = len(br_to.revision_history())
167
push_result = dir_to.push_branch(br_from, revision_id, overwrite)
168
message = create_push_message(br_from, push_result)
172
def create_push_message(br_from, push_result):
173
"""Return a mesage explaining what happened during the push."""
175
rev_count = br_from.revno() - push_result.old_revno
176
messages.append(_i18n("%d revision(s) pushed.") % rev_count)
177
if push_result.stacked_on is not None:
178
messages.append(_i18n("Stacked on %s.") % push_result.stacked_on)
179
if push_result.workingtree_updated is False:
180
messages.append(_i18n(
181
"\nThe working tree was not updated:"
182
"\nSee 'bzr help working-trees' for more information."))
183
return '\n'.join(messages)
186
def create_push_result(br_from, br_to):
187
"""Return a PushResult like one created by ControlDir.push_branch()."""
188
push_result = PushResult()
189
push_result.source_branch = br_from
190
push_result.target_branch = br_to
191
push_result.branch_push_result = None
192
push_result.master_branch = None
193
push_result.old_revno = 0
194
push_result.old_revid = br_to.last_revision()
195
push_result.workingtree_updated = None # Not applicable to this case.
197
push_result.stacked_on = br_to.get_stacked_on_url()
198
except (errors.UnstackableBranchFormat,
199
errors.UnstackableRepositoryFormat,
201
push_result.stacked_on = None
165
br_to.revision_history()
167
tree_to = dir_to.open_workingtree()
168
except errors.NotLocalUrl:
169
# FIXME - what to do here? how should we warn the user?
170
count = br_to.pull(br_from, overwrite)
171
except errors.NoWorkingTree:
172
count = br_to.pull(br_from, overwrite)
174
count = tree_to.pull(br_from, overwrite)
176
# The count var is either an int or a PushResult. PushResult is being
177
# coerced into an int, but the method is deprecatedx
178
return _i18n("%d revision(s) pushed.") % int(count)