[Yum] [PATCH 1 of 4] Download progress display

Daniel P. Berrange berrange at redhat.com
Wed May 30 17:59:31 UTC 2007


This patch hooks up a TextMeter progress display object to the repositories
so that the user gets feedback when downloading repository metadata and
individual packages. It also tells the user how many packages have been
downloaded from the repo & how many are needed in total. 

Output looks like

  development               100% |=========================|  951 B    00:00     
  primary.xml.gz            100% |=========================| 232 kB    00:07     
  ...snipped other 12000 lines...
  [development: 12052 of 12957 ] Skipping existing Fedora/werken-xpath-javadoc-0.9.4-0.beta.12jpp.2.i386.rpm
  [development: 12053 of 12957 ] Downloading Fedora/wesnoth-1.2.4-1.fc7.x86_64.rpm
  wesnoth-1.2.4-1.fc7.x86_6  37% |=========                |  25 MB    04:13 ETA 

Regards,
Dan.
-- 
|=- Red Hat, Engineering, Emerging Technologies, Boston.  +1 978 392 2496 -=|
|=-           Perl modules: http://search.cpan.org/~danberr/              -=|
|=-               Projects: http://freshmeat.net/~danielpb/               -=|
|=-  GnuPG: 7D3B9505   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505  -=| 
-------------- next part --------------
diff -r 11dd5bccfc29 reposync.py
--- a/reposync.py	Wed May 30 12:33:54 2007 -0400
+++ b/reposync.py	Wed May 30 13:34:48 2007 -0400
@@ -47,6 +47,7 @@ from yum.packageSack import ListPackageS
 from yum.packageSack import ListPackageSack
 import rpmUtils.arch
 import logging
+from urlgrabber.progress import TextMeter
 
 # for yum 2.4.X compat
 def sortPkgObj(pkg1 ,pkg2):
@@ -145,6 +146,11 @@ def main():
         for repo in myrepos:
             repo.enable()
 
+    # Use progress bar display when downloading repo metadata
+    # and package files
+    if not opts.quiet:
+        my.repos.setProgressBar(TextMeter(fo=sys.stdout))
+
     my.doRpmDBSetup()
     my.doRepoSetup()
     my.doSackSetup(rpmUtils.arch.getArchList(opts.arch))
@@ -163,7 +169,9 @@ def main():
             download_list = list(reposack)
         
         download_list.sort(sortPkgObj)
+        n = 0
         for pkg in download_list:
+            n = n + 1
             repo = my.repos.getRepo(pkg.repoid)
             remote = pkg.returnSimple('relativepath')
             local = local_repo_path + '/' + remote
@@ -175,7 +183,7 @@ def main():
                 str(os.path.getsize(local)) == pkg.returnSimple('packagesize')):
                 
                 if not opts.quiet:
-                    my.logger.error("%s already exists and appears to be complete" % local)
+                    my.logger.error("[%s: %-5d of %-5d ] Skipping existing %s" % (repo.id, n, len(download_list), remote))
                 continue
     
             if opts.urls:
@@ -195,7 +203,7 @@ def main():
             # Disable cache otherwise things won't download            
             repo.cache = 0
             if not opts.quiet:
-                my.logger.info( 'Downloading %s' % os.path.basename(remote))
+                my.logger.info( '[%s: %-5d of %-5d ] Downloading %s' % (repo.id, n, len(download_list), remote))
             pkg.localpath = local # Hack: to set the localpath we want.
             path = repo.getPackage(pkg)
             if opts.gpgcheck:


More information about the Yum mailing list