245
245
except Exception as error:
246
246
self._on_trans_error(error)
249
def fix_incomplete_install(self):
251
trans = yield self.aptd_client.fix_incomplete_install(defer=True)
252
self.emit("transaction-started", "", "", trans.tid,
253
TransactionTypes.REPAIR)
254
yield self._run_transaction(trans, None, None, None)
255
except Exception as error:
256
self._on_trans_error(error)
248
258
# FIXME: upgrade add-ons here
249
259
@inline_callbacks
250
260
def upgrade(self, app, iconname, addons_install=[], addons_remove=[],
821
831
if enum == enums.EXIT_FAILED:
823
# Handle invalid packages separately
824
if trans.error.code == enums.ERROR_INVALID_PACKAGE_FILE:
825
action = _("_Ignore and install")
826
res = self._show_transaction_failed_dialog(
829
# Reinject the transaction
830
app, iconname, filename, meta_copy = \
831
self._get_app_and_icon_and_deb_from_trans(trans)
832
self.install(app, iconname, filename, [], [],
833
metadata=meta_copy, force=True)
835
# on unauthenticated errors, try a "repair" using the
836
# reload functionatlity
837
elif trans.error.code == enums.ERROR_PACKAGE_UNAUTHENTICATED:
839
res = self._show_transaction_failed_dialog(
842
app, iconname, filename, meta_copy = \
843
self._get_app_and_icon_and_deb_from_trans(trans)
845
self.install(app, iconname, filename, [], [],
832
# Handle invalid packages separately
834
trans.error.code == enums.ERROR_INVALID_PACKAGE_FILE):
835
action = _("_Ignore and install")
836
res = self._show_transaction_failed_dialog(
839
# Reinject the transaction
840
app, iconname, filename, meta_copy = \
841
self._get_app_and_icon_and_deb_from_trans(trans)
842
self.install(app, iconname, filename, [], [],
843
metadata=meta_copy, force=True)
845
# on unauthenticated errors, try a "repair" using the
846
# reload functionatlity
847
elif (trans.error and
848
trans.error.code == enums.ERROR_PACKAGE_UNAUTHENTICATED):
850
res = self._show_transaction_failed_dialog(
853
app, iconname, filename, meta_copy = \
854
self._get_app_and_icon_and_deb_from_trans(trans)
856
self.install(app, iconname, filename, [], [],
859
# Finish a cancelled installation before resuming. If the
860
# user e.g. rebooted during a debconf question apt
861
# will hang and the user is required to call
862
# dpkg --configure -a, see LP#659438
863
elif (trans.error and
864
trans.error.code == enums.ERROR_INCOMPLETE_INSTALL):
866
res = self._show_transaction_failed_dialog(trans, enum,
869
self.fix_incomplete_install()
849
872
elif (not "sc_add_repo_and_install_ignore_errors" in
851
874
self._show_transaction_failed_dialog(trans, enum)
853
876
# send finished signal, use "" here instead of None, because