summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/fetch2/npm.py45
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: