From e68d67031ef224da375c0473d2f44902623acb0f Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 24 Mar 2006 16:07:54 +0100 Subject: * merge with the stuff from the update-manager--mvo branch --- DistUpgrade/DistUpgradeControler.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'DistUpgrade/DistUpgradeControler.py') diff --git a/DistUpgrade/DistUpgradeControler.py b/DistUpgrade/DistUpgradeControler.py index 6dcc0e2a..972ea2dc 100644 --- a/DistUpgrade/DistUpgradeControler.py +++ b/DistUpgrade/DistUpgradeControler.py @@ -157,7 +157,7 @@ class DistUpgradeControler(object): # FIXME: retry here too? just like the DoDistUpgrade? # also remove all files from the lists partial dir! currentRetry = 0 - maxRetries = self.config.get("Network","MaxRetries") + maxRetries = int(self.config.get("Network","MaxRetries")) while currentRetry < maxRetries: try: res = self.cache.update(progress) @@ -183,7 +183,7 @@ class DistUpgradeControler(object): # log the changes for debuging self._logChanges() # ask the user if he wants to do the changes - archivedir = apt_pkg.Config.FindDir("Dir::Cache::archives ") + archivedir = apt_pkg.Config.FindDir("Dir::Cache::archives") st = os.statvfs(archivedir) free = st[statvfs.F_BAVAIL]*st[statvfs.F_FRSIZE] if self.cache.requiredDownload > free: @@ -205,7 +205,7 @@ class DistUpgradeControler(object): fprogress = self._view.getFetchProgress() iprogress = self._view.getInstallProgress() # retry the fetching in case of errors - maxRetries = self.config.get("Network","MaxRetries") + maxRetries = int(self.config.get("Network","MaxRetries")) while currentRetry < maxRetries: try: res = self.cache.commit(fprogress,iprogress) @@ -270,9 +270,12 @@ class DistUpgradeControler(object): # get changes changes = self.cache.getChanges() logging.debug("The following packages are remove candidates: %s" % " ".join([pkg.name for pkg in changes])) + summary = _("Remove obsolete packages?") + actions = [_("_Skip This Step"), _("_Remove")] + # FIXME Add an explanation about what obsolete pacages are + #explanation = _("") if len(changes) > 0 and \ - self._view.confirmChanges(_("Remove obsolete Packages?"), - changes, 0): + self._view.confirmChanges(summary, changes, 0, actions): fprogress = self._view.getFetchProgress() iprogress = self._view.getInstallProgress() try: @@ -301,7 +304,8 @@ class DistUpgradeControler(object): abort(1) # run a "apt-get update" now - self.doUpdate() + if not self.doUpdate(): + self.abort() # do pre-upgrade stuff (calc list of obsolete pkgs etc) self.doPreUpdate() -- cgit v1.2.3 From 376af57686222fcddc489ca6a6088b6a23ec1ca1 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 27 Mar 2006 15:22:54 +0200 Subject: * if apt fails, try to recover with "dpkg --configure -a" --- DistUpgrade/DistUpgradeControler.py | 7 ++++--- DistUpgrade/DistUpgradeView.py | 8 ++++++++ DistUpgrade/DistUpgradeViewGtk.py | 21 ++++++++++++++++++--- 3 files changed, 30 insertions(+), 6 deletions(-) (limited to 'DistUpgrade/DistUpgradeControler.py') diff --git a/DistUpgrade/DistUpgradeControler.py b/DistUpgrade/DistUpgradeControler.py index 972ea2dc..874eaf0b 100644 --- a/DistUpgrade/DistUpgradeControler.py +++ b/DistUpgrade/DistUpgradeControler.py @@ -213,9 +213,10 @@ class DistUpgradeControler(object): # installing the packages failed, can't be retried self._view.error(_("Could not install the upgrades"), _("The upgrade aborts now. Your system " - "can be in an unusable state. Please " - "try 'sudo apt-get install -f' or Synaptic " - "to fix your system."), "%s" % e) + "can be in an unusable state. A recovery " + "is now run (dpkg --configure -a)."), + "%s" % e) + self._view.getTerminal().call(["dpkg","--configure","-a"]) return False except IOError, e: # fetch failed, will be retried diff --git a/DistUpgrade/DistUpgradeView.py b/DistUpgrade/DistUpgradeView.py index 8e9a3d3f..02894939 100644 --- a/DistUpgrade/DistUpgradeView.py +++ b/DistUpgrade/DistUpgradeView.py @@ -19,6 +19,12 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA +class DumbTerminal(object): + def run(self, cmd): + " expects a command in the subprocess style (as a list) " + subprocess.call(cmd) + + class DistUpgradeView(object): " abstraction for the upgrade view " def __init__(self): @@ -32,6 +38,8 @@ class DistUpgradeView(object): def getInstallProgress(self): " return a install progress object " return apt.progress.InstallProgress() + def getTerminal(self): + return DumbTerminal() def updateStatus(self, msg): """ update the current status of the distUpgrade based on the current view diff --git a/DistUpgrade/DistUpgradeViewGtk.py b/DistUpgrade/DistUpgradeViewGtk.py index 1e1edc67..b095478c 100644 --- a/DistUpgrade/DistUpgradeViewGtk.py +++ b/DistUpgrade/DistUpgradeViewGtk.py @@ -210,6 +210,14 @@ class GtkInstallProgressAdapter(InstallProgress): gtk.main_iteration() time.sleep(0.02) +class DistUpgradeVteTerminal(object): + def __init__(self, parent, term): + self.term = term + self.parent = parent + def call(self, cmd): + self.term.show() + self.parent.expander_terminal.set_expanded(True) + self.term.fork_command(command=cmd[0],argv=cmd) class DistUpgradeViewGtk(DistUpgradeView,SimpleGladeApp): " gtk frontend of the distUpgrade tool " @@ -258,13 +266,20 @@ class DistUpgradeViewGtk(DistUpgradeView,SimpleGladeApp): "\n".join(lines)) sys.exit(1) + def getTerminal(self): + return DistUpgradeVteTerminal(self, self._term) + def create_terminal(self, arg1,arg2,arg3,arg4): " helper to create a vte terminal " self._term = vte.Terminal() self._term.set_font_from_string("monospace 10") self._term.connect("contents-changed", self._term_content_changed) self._terminal_lines = [] - self._terminal_log = open("/var/log/dist-upgrade-term.log","w") + try: + self._terminal_log = open("/var/log/dist-upgrade-term.log","w") + except IOError: + # if something goes wrong (permission denied etc), use stdout + self._terminal_log = sys.stdout return self._term def _term_content_changed(self, term): @@ -437,7 +452,8 @@ if __name__ == "__main__": view = DistUpgradeViewGtk() ip = GtkInstallProgressAdapter(view) ip.conffile("TODO","TODO~") - + view.getTerminal().call(["dpkg","--configure","-a"]) + #view.getTerminal().call(["ls"]) view.error("short","long", "asfds afsdj af asdf asdf asf dsa fadsf asdf as fasf sextended\n" "asfds afsdj af asdf asdf asf dsa fadsf asdf as fasf sextended\n" @@ -448,4 +464,3 @@ if __name__ == "__main__": "asfds afsdj af asdf asdf asf dsa fadsf asdf as fasf sextended\n" ) #view.confirmChanges("xx",[], 100) - -- cgit v1.2.3