summaryrefslogtreecommitdiff
path: root/UpdateManager
diff options
context:
space:
mode:
authorMichael Vogt <egon@top>2005-12-01 16:11:53 +0100
committerMichael Vogt <egon@top>2005-12-01 16:11:53 +0100
commitf5b1a4bae67c8eac0e2218b0e3c3e85adaf409ea (patch)
tree671364df765fbd8bd56f697fc2eee7e266db5004 /UpdateManager
parent7e6db3ee0e78a1c8c99ad949a8e1bf33a5baad0b (diff)
downloadpython-apt-f5b1a4bae67c8eac0e2218b0e3c3e85adaf409ea.tar.gz
* dist-upgade tool can fetch the update tarball now
* update will use the internal fetcher now too
Diffstat (limited to 'UpdateManager')
-rw-r--r--UpdateManager/GtkProgress.py39
-rw-r--r--UpdateManager/MetaRelease.py3
-rw-r--r--UpdateManager/UpdateManager.py62
3 files changed, 102 insertions, 2 deletions
diff --git a/UpdateManager/GtkProgress.py b/UpdateManager/GtkProgress.py
index d1cdf230..f60a06d8 100644
--- a/UpdateManager/GtkProgress.py
+++ b/UpdateManager/GtkProgress.py
@@ -2,6 +2,7 @@ import pygtk
pygtk.require('2.0')
import gtk
import apt
+import apt_pkg
from gettext import gettext as _
class GtkOpProgress(apt.progress.OpProgress):
@@ -16,3 +17,41 @@ class GtkOpProgress(apt.progress.OpProgress):
def done(self):
self._progressbar.hide()
+
+class GtkFetchProgress(apt.progress.FetchProgress):
+ def __init__(self, parent, summary="", descr=""):
+ # if this is set to false the download will cancel
+ self._continue = True
+ # init vars here
+ # FIXME: find a more elegant way, this sucks
+ self.summary = parent.label_fetch_summary
+ self.status = parent.label_fetch_status
+ self.progress = parent.progressbar_fetch
+ self.window_fetch = parent.window_fetch
+ self.window_fetch.set_transient_for(parent.window_main)
+ # set summary
+ if self.summary != "":
+ self.summary.set_markup("<big><b>%s</b></big> \n\n%s" %
+ (summary, descr))
+ self.window_fetch.set_title(summary)
+ def start(self):
+ self.progress.set_fraction(0)
+ self.window_fetch.show()
+ def stop(self):
+ self.window_fetch.hide()
+ def on_button_fetch_cancel_clicked(self, widget):
+ self._continue = False
+ def pulse(self):
+ apt.progress.FetchProgress.pulse(self)
+ if self.currentCPS > 0:
+ self.status.set_text(_("Download rate: %s/s - %s remaining" % (apt_pkg.SizeToStr(self.currentCPS), apt_pkg.TimeToStr(self.eta))))
+ else:
+ self.status.set_text(_("Download rate: unkown"))
+ self.progress.set_fraction(self.percent/100.0)
+ currentItem = self.currentItems + 1
+ if currentItem > self.totalItems:
+ currentItem = self.totalItems
+ self.progress.set_text(_("Downloading file %li of %li" % (currentItem, self.totalItems)))
+ while gtk.events_pending():
+ gtk.main_iteration()
+ return self._continue
diff --git a/UpdateManager/MetaRelease.py b/UpdateManager/MetaRelease.py
index a19b2229..e6dd1373 100644
--- a/UpdateManager/MetaRelease.py
+++ b/UpdateManager/MetaRelease.py
@@ -16,6 +16,7 @@ class Dist(object):
self.date = date
self.supported = supported
self.releaseNotesURI = None
+ self.upgradeTool = None
class MetaRelease(gobject.GObject):
@@ -82,6 +83,8 @@ class MetaRelease(gobject.GObject):
dist = Dist(name,date,supported)
if index_tag.Section.has_key("ReleaseNotes"):
dist.releaseNotesURI = index_tag.Section["ReleaseNotes"]
+ if index_tag.Section.has_key("UpgradeTool"):
+ dist.upgradeTool = index_tag.Section["UpgradeTool"]
dists.append(dist)
if name == current_dist_name:
current_dist = dist
diff --git a/UpdateManager/UpdateManager.py b/UpdateManager/UpdateManager.py
index b2ebd1c9..6527d4e9 100644
--- a/UpdateManager/UpdateManager.py
+++ b/UpdateManager/UpdateManager.py
@@ -20,7 +20,12 @@ import gconf
import pango
import subprocess
import pwd
+import thread
import xml.sax.saxutils
+
+# dist-upgrade tool
+import tarfile
+
from gettext import gettext as _
from Common.utils import *
@@ -55,6 +60,7 @@ class MyCache(apt.Cache):
self.clean()
assert self._depcache.BrokenCount == 0 and self._depcache.DelCount == 0
self._depcache.Upgrade()
+
@@ -419,7 +425,17 @@ class UpdateManager(SimpleGladeApp):
def on_button_reload_clicked(self, widget):
#print "on_button_reload_clicked"
- self.invoke_manager(UPDATE)
+ #self.invoke_manager(UPDATE)
+ progress = GtkProgress.GtkFetchProgress(self,
+ _("Downloading package "
+ "information"),
+ _("The repositories will be "
+ "checked for new, removed "
+ "or upgraded software "
+ "packages."))
+ self.cache.update(progress)
+ self.initCache()
+
def on_button_help_clicked(self, widget):
gnome.help_display_desktop(self.gnome_program, "update-manager", "update-manager", "")
@@ -610,6 +626,7 @@ class UpdateManager(SimpleGladeApp):
print "on_button_dist_upgrade_clicked"
# see if we have release notes
+
# FIXME: care about i18n! (append -$lang or something)
if self.new_dist.releaseNotesURI != None:
uri = self.new_dist.releaseNotesURI
@@ -637,7 +654,48 @@ class UpdateManager(SimpleGladeApp):
self.window_main.set_sensitive(True)
self.window_main.window.set_cursor(None)
-
+ # now download the tarball with the upgrade script
+ tmpdir = tempfile.mkdtemp()
+ os.chdir(tmpdir)
+ if self.new_dist.upgradeTool != None:
+ progress = GtkProgress.GtkFetchProgress(self,
+ _("Downloading upgrade "
+ "informtion"),
+ _("The upgrade information "
+ "are downloaded"))
+ fetcher = apt_pkg.GetAcquire(progress)
+ uri = self.new_dist.upgradeTool
+ print "Downloading %s to %s" % (uri, tmpdir)
+ af = apt_pkg.GetPkgAcqFile(fetcher,uri,
+ descr=_("Upgrade tool"),
+ destDir=tmpdir)
+ fetcher.Run()
+ print "Done downloading"
+
+ print "extracting"
+ tar = tarfile.open(tmpdir+"/"+os.path.basename(uri),"r")
+ for tarinfo in tar:
+ tar.extract(tarinfo)
+ tar.close()
+ # see if we have a script file that we can run
+ script = "%s/%s" % (tmpdir, self.new_dist.name)
+ if not os.path.exists(script):
+ print "no script file found in extracted tarbal"
+ else:
+ print "runing: %s" % script
+
+ # cleanup
+ os.chdir("..")
+ # del tmpdir
+ for root, dirs, files in os.walk(tmpdir, topdown=False):
+ for name in files:
+ os.remove(os.path.join(root, name))
+ #print "would remove file: %s" % os.path.join(root, name)
+ for name in dirs:
+ os.rmdir(os.path.join(root, name))
+ #print "would remove dir: %s" % os.path.join(root, name)
+ os.rmdir(tmpdir)
+
def new_dist_available(self, meta_release, upgradable_to):
print "new_dist_available: %s" % upgradable_to.name
# check if the user already knowns about this dist