diff options
| author | Michael Vogt <egon@top> | 2005-12-01 16:11:53 +0100 |
|---|---|---|
| committer | Michael Vogt <egon@top> | 2005-12-01 16:11:53 +0100 |
| commit | f5b1a4bae67c8eac0e2218b0e3c3e85adaf409ea (patch) | |
| tree | 671364df765fbd8bd56f697fc2eee7e266db5004 /UpdateManager | |
| parent | 7e6db3ee0e78a1c8c99ad949a8e1bf33a5baad0b (diff) | |
| download | python-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.py | 39 | ||||
| -rw-r--r-- | UpdateManager/MetaRelease.py | 3 | ||||
| -rw-r--r-- | UpdateManager/UpdateManager.py | 62 |
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 |
