diff --git a/src/centpkg/__init__.py b/src/centpkg/__init__.py index 0d1f025..7332b45 100644 --- a/src/centpkg/__init__.py +++ b/src/centpkg/__init__.py @@ -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")