def _getshrinkeddependencies(self, pkg, data, version, d, ud, lockdown, manifest, toplevel=True): logger.debug(2, "NPM shrinkwrap file is %s" % data) if toplevel: name = data.get('name', None) if name and name != pkg: for obj in data.get('dependencies', []): if obj == pkg: self._getshrinkeddependencies(obj, data['dependencies'][obj], data['dependencies'][obj]['version'], d, ud, lockdown, manifest, False) return outputurl = "invalid" if ('resolved' not in data) or (not data['resolved'].startswith('http')): # will be the case for ${PN} fetchcmd = "npm view %s@%s dist.tarball --registry %s" % (pkg, version, ud.registry) logger.debug(2, "Found this matching URL: %s" % str(fetchcmd)) outputurl = runfetchcmd(fetchcmd, d, True) else: outputurl = data['resolved'] self._runwget(ud, d, "%s --directory-prefix=%s %s" % (self.basecmd, ud.prefixdir, outputurl), False) manifest[pkg] = {} manifest[pkg]['tgz'] = os.path.basename(outputurl).rstrip() manifest[pkg]['deps'] = {} if pkg in lockdown: sha1_expected = lockdown[pkg][version] sha1_data = bb.utils.sha1_file("npm/%s/%s" % (ud.pkgname, manifest[pkg]['tgz'])) if sha1_expected != sha1_data: msg = "\nFile: '%s' has %s checksum %s when %s was expected" % (manifest[pkg]['tgz'], 'sha1', sha1_data, sha1_expected) raise ChecksumError('Checksum mismatch!%s' % msg) else: logger.debug(2, "No lockdown data for %s@%s" % (pkg, version)) if 'dependencies' in data: for obj in data['dependencies']: logger.debug(2, "Found dep is %s" % str(obj)) self._getshrinkeddependencies(obj, data['dependencies'][obj], data['dependencies'][obj]['version'], d, ud, lockdown, manifest[pkg]['deps'], False)
def _getshrinkeddependencies(self, pkg, data, version, d, ud, lockdown, manifest, toplevel=True): logger.debug(2, "NPM shrinkwrap file is %s" % data) if toplevel: name = data.get('name', None) if name and name != pkg: for obj in data.get('dependencies', []): if obj == pkg: self._getshrinkeddependencies(obj, data['dependencies'][obj], data['dependencies'][obj]['version'], d, ud, lockdown, manifest, False) return pkgnameWithVersion = "{}@{}".format(pkg, version) logger.debug(2, "Get dependencies for {}".format(pkgnameWithVersion)) filename = self._runpack(ud, d, pkgnameWithVersion) manifest[pkg] = {} manifest[pkg]['tgz'] = filename manifest[pkg]['deps'] = {} if pkg in lockdown: sha1_expected = lockdown[pkg][version] sha1_data = bb.utils.sha1_file("npm/%s/%s" % (ud.pkgname, manifest[pkg]['tgz'])) if sha1_expected != sha1_data: msg = "\nFile: '%s' has %s checksum %s when %s was expected" % (manifest[pkg]['tgz'], 'sha1', sha1_data, sha1_expected) raise ChecksumError('Checksum mismatch!%s' % msg) else: logger.debug(2, "No lockdown data for %s@%s" % (pkg, version)) if 'dependencies' in data: for obj in data['dependencies']: logger.debug(2, "Found dep is %s" % str(obj)) self._getshrinkeddependencies(obj, data['dependencies'][obj], data['dependencies'][obj]['version'], d, ud, lockdown, manifest[pkg]['deps'], False)