def do_push(br_from, location, overwrite): """Update a mirror of a branch. :param br_from: the source branch :param location: the location of the branch that you'd like to update :param overwrite: overwrite target location if it diverged :return: number of revisions pushed """ revision_id = None to_transport = get_transport(location) try: dir_to = ControlDir.open_from_transport(to_transport) except errors.NotBranchError: dir_to = None if dir_to is None: try: br_to = br_from.create_clone_on_transport( to_transport, revision_id=revision_id) except errors.NoSuchFile: response = question_dialog( _i18n('Non existing parent directory'), _i18n("The parent directory (%s)\ndoesn't exist. Create?") % location) if response == Gtk.ResponseType.OK: br_to = br_from.create_clone_on_transport( to_transport, revision_id=revision_id, create_prefix=True) else: return _i18n("Push aborted.") push_result = create_push_result(br_from, br_to) else: push_result = dir_to.push_branch(br_from, revision_id, overwrite) message = create_push_message(br_from, push_result) return message
def _on_push_clicked(self, widget): """Push button clicked handler. """ self._push_message.hide() self._progress_widget.tick() location = self._combo.get_child().get_text() try: message = do_push(self.branch, location, overwrite=False) except errors.DivergedBranches: response = question_dialog( _i18n('Branches have been diverged'), _i18n('You cannot push if branches have diverged.\n' 'Overwrite?')) if response == Gtk.ResponseType.YES: message = do_push(self.branch, location, overwrite=True) else: return self._history.add_entry(location) if (self.branch is not None and self.branch.get_push_location() is None): self.branch.set_push_location(location) if message: self._progress_widget.finished() self._push_message.props.label = message self._push_message.show()
def run(self): try: loom_branch.require_loom_branch(self.branch) except loom_branch.NotALoom: response = question_dialog( _i18n("Upgrade to Loom branch?"), _i18n("Branch is not a loom branch. Upgrade to Loom format?"), parent=self) # Doesn't set a parent for the dialog.. if response == Gtk.ResponseType.NO: return assert self.branch.nick is not None loom_branch.loomify(self.branch) self._load_threads() return super(LoomDialog, self).run()