[yum-cvs] yum-utils yumdownloader.py,NONE,1.1

Gijs Hollestelle gijs at login.linux.duke.edu
Thu Mar 24 11:15:06 UTC 2005


Update of /home/groups/yum/cvs/yum-utils
In directory login:/tmp/cvs-serv1057

Added Files:
	yumdownloader.py 
Log Message:
Initial version of yumdownloader



--- NEW FILE yumdownloader.py ---
#!/usr/bin/python

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Library General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

import yum
import yum.Errors
import sys
import os
import output
from urlgrabber.progress import TextMeter
from yum.logger import Logger
from yum.packages import parsePackages, returnBestPackages
from optparse import OptionParser

def initYum():
    my = yum.YumBase()
    my.doConfigSetup()
    my.conf.setConfigOption('uid', os.geteuid())
    if my.conf.getConfigOption('uid') != 0:
        my.conf.setConfigOption('cache', 1)
    my.repos.setProgressBar(TextMeter(fo=sys.stdout))
    my.log = Logger(threshold=my.conf.getConfigOption('debuglevel'), 
    file_object =sys.stdout)
    my.repos.callback = output.CacheProgressCallback(my.log,
    my.errorlog, my.filelog)
    my.doRepoSetup()
    my.doSackSetup()
    return my

def parseArgs():
    usage = "usage: %s [options] package1 [package2] [package..]" % sys.argv[0]
    parser = OptionParser(usage=usage)
    parser.add_option("--destdir", default=".", dest="destdir",
      help='destination directory (defaults to current directory)')
    (opts, args) = parser.parse_args()
    if len(args) < 1: 
        parser.print_help()
        sys.exit(0)
    return (opts, args)

def main():
    (opts, args) = parseArgs()
    #self.doRpmDBSetup()
    my = initYum()
    avail = my.pkgSack.returnPackages()
    toDownload = {}

    packages = args
    for pkg in packages:
        exactmatch, matched, unmatched = parsePackages(avail, [pkg])
        installable = yum.misc.unique(exactmatch + matched)
        if len(unmatched) > 0: # if we get back anything in unmatched, it fails
            my.errorlog(0, 'No Match for argument %s' % pkg)
            continue
        for newpkg in installable:
            toDownload.setdefault(newpkg.name,[]).append(newpkg.pkgtup)

    toDownload = returnBestPackages(toDownload)
    for pkg in toDownload:
        n,a,e,v,r = pkg
        packages =  my.pkgSack.searchNevra(n,e,v,r,a)
        for download in packages:
            repo = my.repos.getRepo(download.repoid)
            remote = download.returnSimple('relativepath')
            local = os.path.join(opts.destdir, remote)
            if (os.path.exists(local) and 
                str(os.path.getsize(local)) == download.returnSimple('packagesize')):
                my.errorlog(0,"%s already exists and appears to be complete" % local)
                continue
            # Disable cache otherwise things won't download
            repo.cache = 0
            repo.get(relative=remote, local=local)

if __name__ == '__main__':
    main()




More information about the Yum-cvs-commits mailing list