summaryrefslogtreecommitdiff
path: root/DistUpgrade
diff options
context:
space:
mode:
authorSebastian Heinlein <sebastian.heinlein@web.de>2006-02-19 20:39:45 +0100
committerSebastian Heinlein <sebastian.heinlein@web.de>2006-02-19 20:39:45 +0100
commitd87c4020340ed0c869346c5b569a3b2e261b7be2 (patch)
tree4c2563ab7695297dcd467b748cdfb504b9207564 /DistUpgrade
parent53e9180e0aaafae7f93d939b5f97d377990aaeb5 (diff)
downloadpython-apt-d87c4020340ed0c869346c5b569a3b2e261b7be2.tar.gz
* dialog_confirm_changes:
- Show a question mark icon in the confirm changes dialog - Fixed some spacing in the confirm changes dialog - Use a more informative label for the ob button and the summary - Do not show the close button of the wm - Use plural gettext in the summary - Include the summary into the alert message * common error dialogs: - Do not show the close button of the wm - Hopefully made the wording of some error dialogs clearer - Show the missing free space on the corresponding error dialog
Diffstat (limited to 'DistUpgrade')
-rw-r--r--DistUpgrade/DistUpgrade.glade180
-rw-r--r--DistUpgrade/DistUpgradeControler.py37
-rw-r--r--DistUpgrade/DistUpgradeViewGtk.py65
3 files changed, 173 insertions, 109 deletions
diff --git a/DistUpgrade/DistUpgrade.glade b/DistUpgrade/DistUpgrade.glade
index 55b439c1..c28b20ad 100644
--- a/DistUpgrade/DistUpgrade.glade
+++ b/DistUpgrade/DistUpgrade.glade
@@ -520,7 +520,7 @@
<property name="layout_style">GTK_BUTTONBOX_END</property>
<child>
- <widget class="GtkButton" id="button_changes_ok">
+ <widget class="GtkButton" id="button_cancel">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
@@ -533,11 +533,11 @@
</child>
<child>
- <widget class="GtkButton" id="button2">
+ <widget class="GtkButton" id="button_start">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
- <property name="label">_Continue</property>
+ <property name="label">_Start Upgrade</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
@@ -554,106 +554,70 @@
</child>
<child>
- <widget class="GtkVBox" id="vbox3">
+ <widget class="GtkHBox" id="hbox12">
<property name="border_width">6</property>
<property name="visible">True</property>
<property name="homogeneous">False</property>
- <property name="spacing">6</property>
-
- <child>
- <widget class="GtkLabel" id="label_summary">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
+ <property name="spacing">12</property>
<child>
- <widget class="GtkLabel" id="label_changes">
+ <widget class="GtkImage" id="image9">
<property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
+ <property name="stock">gtk-dialog-question</property>
+ <property name="icon_size">6</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
- <property name="fill">False</property>
+ <property name="fill">True</property>
</packing>
</child>
<child>
- <widget class="GtkExpander" id="expander1">
+ <widget class="GtkVBox" id="vbox3">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="expanded">False</property>
- <property name="spacing">0</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">12</property>
<child>
- <widget class="GtkScrolledWindow" id="scrolledwindow1">
- <property name="width_request">400</property>
- <property name="height_request">200</property>
+ <widget class="GtkLabel" id="label_summary">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <widget class="GtkTreeView" id="treeview_details">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_visible">False</property>
- <property name="rules_hint">False</property>
- <property name="reorderable">False</property>
- <property name="enable_search">True</property>
- <property name="fixed_height_mode">False</property>
- <property name="hover_selection">False</property>
- <property name="hover_expand">False</property>
- </widget>
- </child>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">True</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
</child>
<child>
- <widget class="GtkLabel" id="label4">
+ <widget class="GtkLabel" id="label_changes">
<property name="visible">True</property>
- <property name="label" translatable="yes">Details</property>
+ <property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
- <property name="use_markup">False</property>
+ <property name="use_markup">True</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
+ <property name="wrap">True</property>
<property name="selectable">False</property>
- <property name="xalign">0.5</property>
+ <property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
@@ -663,7 +627,73 @@
<property name="angle">0</property>
</widget>
<packing>
- <property name="type">label_item</property>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkExpander" id="expander_details">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="expanded">False</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow1">
+ <property name="width_request">400</property>
+ <property name="height_request">200</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+ <child>
+ <widget class="GtkTreeView" id="treeview_details">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ <property name="rules_hint">False</property>
+ <property name="reorderable">False</property>
+ <property name="enable_search">True</property>
+ <property name="fixed_height_mode">False</property>
+ <property name="hover_selection">False</property>
+ <property name="hover_expand">False</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Details</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
</packing>
</child>
</widget>
diff --git a/DistUpgrade/DistUpgradeControler.py b/DistUpgrade/DistUpgradeControler.py
index 9fa717fe..6dcc0e2a 100644
--- a/DistUpgrade/DistUpgradeControler.py
+++ b/DistUpgrade/DistUpgradeControler.py
@@ -187,13 +187,16 @@ class DistUpgradeControler(object):
st = os.statvfs(archivedir)
free = st[statvfs.F_BAVAIL]*st[statvfs.F_FRSIZE]
if self.cache.requiredDownload > free:
- self._view.error(_("Not enough free space"),
- _("There is not enough free space on your "
- "system to download the required pacakges. "
- "Please free some space before trying again "
- "with e.g. 'sudo apt-get clean'"))
- return False
- res = self._view.confirmChanges(_("Perform Upgrade?"),changes,
+ free_at_least = apt_pkg.SizeToStr(self.cache.requiredDownload-free)
+ self._view.error(_("Not enough free disk space"),
+ _("The upgrade aborts now. "
+ "Please free at least %s of disk space. "
+ "Empty your trash and remove temporary "
+ "packages of former installations using "
+ "'sudo apt-get clean'." % free_at_least ))
+ return False
+ res = self._view.confirmChanges(_("Do you want to start the upgrade?"),
+ changes,
self.cache.requiredDownload)
return res
@@ -208,12 +211,11 @@ class DistUpgradeControler(object):
res = self.cache.commit(fprogress,iprogress)
except SystemError, e:
# installing the packages failed, can't be retried
- self._view.error(_("Error during commit"),
- _("Some problem occured during the upgrade. "
- "Most likely packages failed to install. "
- "Try 'sudo apt-get install -f' or synaptic "
- "to fix your system."),
- "%s" % e)
+ 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)
return False
except IOError, e:
# fetch failed, will be retried
@@ -225,11 +227,10 @@ class DistUpgradeControler(object):
# maximum fetch-retries reached without a successful commit
logging.debug("giving up on fetching after maximum retries")
- self._view.error(_("Error fetching the packages"),
- _("Some problem occured during the fetching "
- "of the packages. This is most likely a network "
- "problem. Please check your network and try "
- "again. "),
+ self._view.error(_("Could not download the upgrades"),
+ _("The upgrade aborts now. Please check your "\
+ "internet connection or "\
+ "installation media and try again. "),
"%s" % e)
# abort here because we want our sources.list back
self.abort()
diff --git a/DistUpgrade/DistUpgradeViewGtk.py b/DistUpgrade/DistUpgradeViewGtk.py
index c36d8dac..7fd39a32 100644
--- a/DistUpgrade/DistUpgradeViewGtk.py
+++ b/DistUpgrade/DistUpgradeViewGtk.py
@@ -39,6 +39,7 @@ from apt.progress import InstallProgress
from DistUpgradeView import DistUpgradeView
from UpdateManager.Common.SimpleGladeApp import SimpleGladeApp, bindtextdomain
+import gettext
from gettext import gettext as _
def utf8(str):
@@ -138,17 +139,20 @@ class GtkInstallProgressAdapter(InstallProgress):
"APT_LISTCHANGES_FRONTEND=none"]
def error(self, pkg, errormsg):
- logging.error("got a error from dpkg for pkg: '%s': '%s'" % (pkg, errormsg))
+ logging.error("got an error from dpkg for pkg: '%s': '%s'" % (pkg, errormsg))
#self.expander_terminal.set_expanded(True)
self.parent.dialog_error.set_transient_for(self.parent.window_main)
summary = _("Could not install '%s'" % pkg)
- msg = _("The upgrade will abort. Please report the bug.")
+ msg = _("The upgrade aborts now. Please report this bug.")
markup="<big><b>%s</b></big>\n\n%s" % (summary, msg)
+ self.parent.dialog_error.realize()
+ self.parent.dialog_error.window.set_functions(gtk.gdk.FUNC_MOVE)
self.parent.label_error.set_markup(markup)
self.parent.textview_error.get_buffer().set_text(utf8(errormsg))
self.parent.scroll_error.show()
self.parent.dialog_error.run()
self.parent.dialog_error.hide()
+
def conffile(self, current, new):
logging.debug("got a conffile-prompt from dpkg for file: '%s'" % current)
self.expander.set_expanded(True)
@@ -218,10 +222,9 @@ class DistUpgradeViewGtk(DistUpgradeView,SimpleGladeApp):
lines = traceback.format_exception(type, value, tb)
logging.error("not handled expection:\n%s" % "\n".join(lines))
self.error(_("A fatal error occured"),
- _("During the operation a fatal error occured. "
- "Please report this as a bug and include the "
+ _("Please report this as a bug and include the "
"files ~/dist-upgrade.log and ~/dist-upgrade-apt.log "
- "in your report. The upgrade will abort now. "),
+ "in your report. The upgrade aborts now. "),
"\n".join(lines))
def create_terminal(self, arg1,arg2,arg3,arg4):
@@ -284,8 +287,9 @@ class DistUpgradeViewGtk(DistUpgradeView,SimpleGladeApp):
self.scroll_error.show()
else:
self.scroll_error.hide()
+ self.dialog_error.realize()
+ self.dialog_error.window.set_functions(gtk.gdk.FUNC_MOVE)
self.dialog_error.run()
- self.dialog_error.show()
self.dialog_error.destroy()
return False
@@ -293,24 +297,51 @@ class DistUpgradeViewGtk(DistUpgradeView,SimpleGladeApp):
# FIXME: add a whitelist here for packages that we expect to be
# removed (how to calc this automatically?)
DistUpgradeView.confirmChanges(self, summary, changes, downloadSize)
+ pkgs_remove = len(self.toRemove)
+ pkgs_inst = len(self.toInstall)
+ pkgs_upgrade = len(self.toUpgrade)
+ msg = ""
+
+ if pkgs_remove > 0:
+ msg += gettext.ngettext("%s package is going to be removed." %\
+ pkgs_remove,
+ "%s packages are going to be removed." %\
+ pkgs_remove, pkgs_remove)
+ msg +=" "
+ if pkgs_inst > 0:
+ msg += gettext.ngettext("%s new package is going to be "\
+ "installed." % pkgs_inst,
+ "%s new packages are going to be "\
+ "installed." % pkgs_inst, pkgs_inst)
+ msg +=" "
+ if pkgs_upgrade > 0:
+ msg += gettext.ngettext("%s package is going to be upgraded." %\
+ pkgs_upgrade,
+ "%s packages are going to be upgraded." %\
+ pkgs_upgrade, pkgs_upgrade)
+ msg +=" "
+ if msg == "":
+ # FIXME: this should go into DistUpgradeController
+ summary = _("Could not find any upgrades")
+ msg = _("Your system has already been upgraded.")
+ self.error(summary, msg)
+ return False
+ else:
+ msg += _("You have to download a total of %s." %\
+ apt_pkg.SizeToStr(downloadSize))
self.label_summary.set_markup("<big><b>%s</b></big>" % summary)
- msg = _("%s packages are going to be removed.\n"
- "%s packages are going to be newly installed.\n"
- "%s packages are going to be upgraded.\n\n"
- "%s needs to be fetched" % (len(self.toRemove),
- len(self.toInstall),
- len(self.toUpgrade),
- apt_pkg.SizeToStr(downloadSize)))
self.label_changes.set_text(msg)
# fill in the details
self.details_list.clear()
for rm in self.toRemove:
- self.details_list.append([_("<b>To be removed: %s</b>" % rm)])
+ self.details_list.append([_("<b>Remove %s</b>" % rm)])
for inst in self.toInstall:
- self.details_list.append([_("To be installed: %s" % inst)])
+ self.details_list.append([_("Install %s" % inst)])
for up in self.toUpgrade:
- self.details_list.append([_("To be upgraded: %s" % up)])
+ self.details_list.append([_("Upgrade %s" % up)])
self.dialog_changes.set_transient_for(self.window_main)
+ self.dialog_changes.realize()
+ self.dialog_changes.window.set_functions(gtk.gdk.FUNC_MOVE)
res = self.dialog_changes.run()
self.dialog_changes.hide()
if res == gtk.RESPONSE_YES:
@@ -347,6 +378,8 @@ class DistUpgradeViewGtk(DistUpgradeView,SimpleGladeApp):
res = self.dialog_cancel.run()
self.dialog_cancel.hide()
if res == gtk.RESPONSE_CANCEL:
+ #FIXME: this does not work correctly and leaves a stalled
+ # dist-upgrade.py process
self.destroy()
return True