implement sources to download from the CentOS lookaside cache

This commit is contained in:
Brian Stinson 2014-06-13 23:19:14 -05:00
parent 6f323dcd6f
commit 9bd7b3b47a

View file

@ -105,8 +105,69 @@ class Commands(pyrpkg.Commands):
def push(self, *args, **kwargs):
raise NotImplementedError("This command is not yet implemented in centpkg")
def sources(self, *args, **kwargs):
raise NotImplementedError("This command is not yet implemented in centpkg")
def sources(self, outdir=None):
"""Download source files"""
# We are not using sources() in super because the metadata file is
# hard-coded into the first open() call. Otherwise this is copied from
# upstream pyrpkg
try:
archives = open(os.path.join(self.path,
'.{0}.metadata'.format(self.module_name)),
'r').readlines()
except IOError, e:
raise pyrpkg.rpkgError('%s is not a valid repo: %s' % (self.path, e))
# Default to putting the files where the module is
if not outdir:
outdir = self.path
for archive in archives:
try:
# This strip / split is kind a ugly, but checksums shouldn't have
# two spaces in them. sources file might need more structure in the
# future
csum, file = archive.strip().split(' ', 1)
except ValueError:
raise pyrpkg.rpkgError('Malformed sources file.')
# See if we already have a valid copy downloaded
outfile = os.path.join(outdir, file)
if os.path.exists(outfile):
if self._verify_file(outfile, csum, self.lookasidehash):
continue
self.log.info("Downloading %s" % (file))
url = '%s/%s/%s/%s' % (self.lookaside, self.module_name,
self.branch_merge,
csum,
)
# There is some code here for using pycurl, but for now,
# just use subprocess
#output = open(file, 'wb')
#curl = pycurl.Curl()
#curl.setopt(pycurl.URL, url)
#curl.setopt(pycurl.FOLLOWLOCATION, 1)
#curl.setopt(pycurl.MAXREDIRS, 5)
#curl.setopt(pycurl.CONNECTTIMEOUT, 30)
#curl.setopt(pycurl.TIMEOUT, 300)
#curl.setopt(pycurl.WRITEDATA, output)
#try:
# curl.perform()
#except:
# print "Problems downloading %s" % url
# curl.close()
# output.close()
# return 1
#curl.close()
#output.close()
# These options came from Makefile.common.
# Probably need to support wget as well
command = ['curl', '-H', 'Pragma:', '-o', outfile, '-R', '-S', '--fail']
if self.quiet:
command.append('-s')
command.append(url)
self._run_command(command)
if not self._verify_file(outfile, csum, self.lookasidehash):
raise pyrpkg.rpkgError('%s failed checksum' % file)
return
def switch_branch(self, *args, **kwargs):
raise NotImplementedError("This command is not yet implemented in centpkg")