diff options
| -rw-r--r-- | bitbake/lib/bb/fetch2/npm.py | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/bitbake/lib/bb/fetch2/npm.py b/bitbake/lib/bb/fetch2/npm.py index 4427b1bb87..9700e61029 100644 --- a/bitbake/lib/bb/fetch2/npm.py +++ b/bitbake/lib/bb/fetch2/npm.py | |||
| @@ -101,11 +101,19 @@ class Npm(FetchMethod): | |||
| 101 | return False | 101 | return False |
| 102 | return True | 102 | return True |
| 103 | 103 | ||
| 104 | def _runwget(self, ud, d, command, quiet): | 104 | def _runpack(self, ud, d, pkgfullname: str, quiet=False) -> str: |
| 105 | logger.debug(2, "Fetching %s using command '%s'" % (ud.url, command)) | 105 | """ |
| 106 | bb.fetch2.check_network_access(d, command, ud.url) | 106 | Runs npm pack on a full package name. |
| 107 | Returns the filename of the downloaded package | ||
| 108 | """ | ||
| 109 | bb.fetch2.check_network_access(d, pkgfullname, ud.registry) | ||
| 107 | dldir = d.getVar("DL_DIR") | 110 | dldir = d.getVar("DL_DIR") |
| 108 | runfetchcmd(command, d, quiet, workdir=dldir) | 111 | dldir = os.path.join(dldir, ud.prefixdir) |
| 112 | |||
| 113 | command = "npm pack {} --registry {}".format(pkgfullname, ud.registry) | ||
| 114 | logger.debug(2, "Fetching {} using command '{}' in {}".format(pkgfullname, command, dldir)) | ||
| 115 | filename = runfetchcmd(command, d, quiet, workdir=dldir) | ||
| 116 | return filename.rstrip() | ||
| 109 | 117 | ||
| 110 | def _unpackdep(self, ud, pkg, data, destdir, dldir, d): | 118 | def _unpackdep(self, ud, pkg, data, destdir, dldir, d): |
| 111 | file = data[pkg]['tgz'] | 119 | file = data[pkg]['tgz'] |
| @@ -163,6 +171,9 @@ class Npm(FetchMethod): | |||
| 163 | pkgfullname = pkg | 171 | pkgfullname = pkg |
| 164 | if version != '*' and not '/' in version: | 172 | if version != '*' and not '/' in version: |
| 165 | pkgfullname += "@'%s'" % version | 173 | pkgfullname += "@'%s'" % version |
| 174 | if pkgfullname in fetchedlist: | ||
| 175 | return | ||
| 176 | |||
| 166 | logger.debug(2, "Calling getdeps on %s" % pkg) | 177 | logger.debug(2, "Calling getdeps on %s" % pkg) |
| 167 | fetchcmd = "npm view %s --json --registry %s" % (pkgfullname, ud.registry) | 178 | fetchcmd = "npm view %s --json --registry %s" % (pkgfullname, ud.registry) |
| 168 | output = runfetchcmd(fetchcmd, d, True) | 179 | output = runfetchcmd(fetchcmd, d, True) |
| @@ -182,15 +193,10 @@ class Npm(FetchMethod): | |||
| 182 | if (not blacklist and 'linux' not in pkg_os) or '!linux' in pkg_os: | 193 | if (not blacklist and 'linux' not in pkg_os) or '!linux' in pkg_os: |
| 183 | logger.debug(2, "Skipping %s since it's incompatible with Linux" % pkg) | 194 | logger.debug(2, "Skipping %s since it's incompatible with Linux" % pkg) |
| 184 | return | 195 | return |
| 185 | #logger.debug(2, "Output URL is %s - %s - %s" % (ud.basepath, ud.basename, ud.localfile)) | 196 | filename = self._runpack(ud, d, pkgfullname) |
| 186 | outputurl = pdata['dist']['tarball'] | ||
| 187 | data[pkg] = {} | 197 | data[pkg] = {} |
| 188 | data[pkg]['tgz'] = os.path.basename(outputurl) | 198 | data[pkg]['tgz'] = filename |
| 189 | if outputurl in fetchedlist: | 199 | fetchedlist.append(pkgfullname) |
| 190 | return | ||
| 191 | |||
| 192 | self._runwget(ud, d, "%s --directory-prefix=%s %s" % (self.basecmd, ud.prefixdir, outputurl), False) | ||
| 193 | fetchedlist.append(outputurl) | ||
| 194 | 200 | ||
| 195 | dependencies = pdata.get('dependencies', {}) | 201 | dependencies = pdata.get('dependencies', {}) |
| 196 | optionalDependencies = pdata.get('optionalDependencies', {}) | 202 | optionalDependencies = pdata.get('optionalDependencies', {}) |
| @@ -217,17 +223,12 @@ class Npm(FetchMethod): | |||
| 217 | if obj == pkg: | 223 | if obj == pkg: |
| 218 | self._getshrinkeddependencies(obj, data['dependencies'][obj], data['dependencies'][obj]['version'], d, ud, lockdown, manifest, False) | 224 | self._getshrinkeddependencies(obj, data['dependencies'][obj], data['dependencies'][obj]['version'], d, ud, lockdown, manifest, False) |
| 219 | return | 225 | return |
| 220 | outputurl = "invalid" | 226 | |
| 221 | if ('resolved' not in data) or (not data['resolved'].startswith('http://') and not data['resolved'].startswith('https://')): | 227 | pkgnameWithVersion = "{}@{}".format(pkg, version) |
| 222 | # will be the case for ${PN} | 228 | logger.debug(2, "Get dependencies for {}".format(pkgnameWithVersion)) |
| 223 | fetchcmd = "npm view %s@%s dist.tarball --registry %s" % (pkg, version, ud.registry) | 229 | filename = self._runpack(ud, d, pkgnameWithVersion) |
| 224 | logger.debug(2, "Found this matching URL: %s" % str(fetchcmd)) | ||
| 225 | outputurl = runfetchcmd(fetchcmd, d, True) | ||
| 226 | else: | ||
| 227 | outputurl = data['resolved'] | ||
| 228 | self._runwget(ud, d, "%s --directory-prefix=%s %s" % (self.basecmd, ud.prefixdir, outputurl), False) | ||
| 229 | manifest[pkg] = {} | 230 | manifest[pkg] = {} |
| 230 | manifest[pkg]['tgz'] = os.path.basename(outputurl).rstrip() | 231 | manifest[pkg]['tgz'] = filename |
| 231 | manifest[pkg]['deps'] = {} | 232 | manifest[pkg]['deps'] = {} |
| 232 | 233 | ||
| 233 | if pkg in lockdown: | 234 | if pkg in lockdown: |
