122
121
self.comm.set_busy(self.window)
123
122
if self.radio_stored.get_active():
125
revs = commit.push(self.comm.get_path(),
126
overwrite=self.check_overwrite.get_active())
124
revs = do_push(self.comm.get_path(),
125
overwrite=self.check_overwrite.get_active())
127
126
except errors.NotBranchError:
128
127
self.dialog.error_dialog(_('Directory is not a branch'),
129
128
_('You can perform this action only in a branch.'))
131
except errors.NoLocationKnown:
132
self.dialog.error_dialog(_('Push location is unknown'),
133
_('Please specify a location manually.'))
135
except errors.NonExistingParent, errmsg:
136
self.dialog.error_dialog(_('Non existing parent directory'),
137
_("The parent directory (%s)\ndoesn't exist.") % errmsg)
139
except errors.DivergedBranchesError:
130
except errors.DivergedBranches:
140
131
self.dialog.error_dialog(_('Branches have been diverged'),
141
132
_('You cannot push if branches have diverged. Use the\noverwrite option if you want to push anyway.'))
153
revs = commit.push(self.comm.get_path(), location,
154
self.check_remember.get_active(),
155
self.check_overwrite.get_active(),
156
self.check_create.get_active())
144
revs = do_push(self.comm.get_path(), location,
145
self.check_remember.get_active(),
146
self.check_overwrite.get_active(),
147
self.check_create.get_active())
157
148
except errors.NotBranchError:
158
149
self.dialog.error_dialog(_('Directory is not a branch'),
159
150
_('You can perform this action only in a branch.'))
160
151
self.comm.set_busy(self.window, False)
162
except errors.NonExistingParent, errmsg:
163
self.dialog.error_dialog(_('Non existing parent directory'),
164
_("The parent directory (%s)\ndoesn't exist.") % errmsg)
165
self.comm.set_busy(self.window, False)
167
except errors.DivergedBranchesError:
153
except errors.DivergedBranches:
168
154
self.dialog.error_dialog(_('Branches have been diverged'),
169
155
_('You cannot push if branches have diverged. Use the\noverwrite option if you want to push anyway.'))
170
156
self.comm.set_busy(self.window, False)
172
except errors.PathPrefixNotCreated:
173
self.dialog.error_dialog(_('Path prefix not created'),
174
_("The path leading up to the specified location couldn't\nbe created."))
175
self.comm.set_busy(self.window, False)
213
194
def close(self, widget=None):
214
195
self.window.destroy()
197
def do_push(branch, location=None, remember=False, overwrite=False,
198
create_prefix=False):
199
""" Update a mirror of a branch.
201
:param branch: the source branch
203
:param location: the location of the branch that you'd like to update
205
:param remember: if set, the location will be stored
207
:param overwrite: overwrite target location if it diverged
209
:param create_prefix: create the path leading up to the branch if it doesn't exist
211
:return: number of revisions pushed
213
from bzrlib.branch import Branch
214
from bzrlib.bzrdir import BzrDir
215
from bzrlib.transport import get_transport
217
br_from = Branch.open_containing(branch)[0]
219
stored_loc = br_from.get_push_location()
221
if stored_loc is None:
222
self.dialog.error_dialog(_('Push location is unknown'),
223
_('Please specify a location manually.'))
226
location = stored_loc
228
transport = get_transport(location)
229
location_url = transport.base
231
if br_from.get_push_location() is None or remember:
232
br_from.set_push_location(location_url)
237
dir_to = BzrDir.open(location_url)
238
br_to = dir_to.open_branch()
239
except errors.NotBranchError:
241
transport = transport.clone('..')
242
if not create_prefix:
244
relurl = transport.relpath(location_url)
245
transport.mkdir(relurl)
246
except errors.NoSuchFile:
247
self.dialog.error_dialog(_('Non existing parent directory'),
248
_("The parent directory (%s)\ndoesn't exist.") % location)
251
current = transport.base
252
needed = [(transport, transport.relpath(location_url))]
255
transport, relpath = needed[-1]
256
transport.mkdir(relpath)
258
except errors.NoSuchFile:
259
new_transport = transport.clone('..')
260
needed.append((new_transport,
261
new_transport.relpath(transport.base)))
262
if new_transport.base == transport.base:
263
self.dialog.error_dialog(_('Path prefix not created'),
264
_("The path leading up to the specified location couldn't\nbe created."))
266
dir_to = br_from.bzrdir.clone(location_url,
267
revision_id=br_from.last_revision())
268
br_to = dir_to.open_branch()
269
count = len(br_to.revision_history())
271
old_rh = br_to.revision_history()
274
tree_to = dir_to.open_workingtree()
275
except errors.NotLocalUrl:
276
# FIXME - what to do here? how should we warn the user?
277
#warning('This transport does not update the working '
278
# 'tree of: %s' % (br_to.base,))
279
count = br_to.pull(br_from, overwrite)
280
except errors.NoWorkingTree:
281
count = br_to.pull(br_from, overwrite)
283
count = tree_to.pull(br_from, overwrite)
284
except errors.DivergedBranches: