[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