diff options
Diffstat (limited to 'bitbake')
-rw-r--r-- | bitbake/lib/bb/fetch2/npm.py | 42 |
1 files changed, 27 insertions, 15 deletions
diff --git a/bitbake/lib/bb/fetch2/npm.py b/bitbake/lib/bb/fetch2/npm.py index a39f1c1998..e497c38dc7 100644 --- a/bitbake/lib/bb/fetch2/npm.py +++ b/bitbake/lib/bb/fetch2/npm.py | |||
@@ -79,9 +79,25 @@ class NpmEnvironment(object): | |||
79 | Using a npm config file seems more reliable than using cli arguments. | 79 | Using a npm config file seems more reliable than using cli arguments. |
80 | This class allows to create a controlled environment for npm commands. | 80 | This class allows to create a controlled environment for npm commands. |
81 | """ | 81 | """ |
82 | def __init__(self, d, configs=None): | 82 | def __init__(self, d, configs=None, npmrc=None): |
83 | self.d = d | 83 | self.d = d |
84 | self.configs = configs | 84 | |
85 | if configs: | ||
86 | self.user_config = tempfile.NamedTemporaryFile(mode="w", buffering=1) | ||
87 | self.user_config_name = self.user_config.name | ||
88 | for key, value in configs: | ||
89 | self.user_config.write("%s=%s\n" % (key, value)) | ||
90 | else: | ||
91 | self.user_config_name = "/dev/null" | ||
92 | |||
93 | if npmrc: | ||
94 | self.global_config_name = npmrc | ||
95 | else: | ||
96 | self.global_config_name = "/dev/null" | ||
97 | |||
98 | def __del__(self): | ||
99 | if self.user_config: | ||
100 | self.user_config.close() | ||
85 | 101 | ||
86 | def run(self, cmd, args=None, configs=None, workdir=None): | 102 | def run(self, cmd, args=None, configs=None, workdir=None): |
87 | """Run npm command in a controlled environment""" | 103 | """Run npm command in a controlled environment""" |
@@ -89,23 +105,19 @@ class NpmEnvironment(object): | |||
89 | d = bb.data.createCopy(self.d) | 105 | d = bb.data.createCopy(self.d) |
90 | d.setVar("HOME", tmpdir) | 106 | d.setVar("HOME", tmpdir) |
91 | 107 | ||
92 | cfgfile = os.path.join(tmpdir, "npmrc") | ||
93 | |||
94 | if not workdir: | 108 | if not workdir: |
95 | workdir = tmpdir | 109 | workdir = tmpdir |
96 | 110 | ||
97 | def _run(cmd): | 111 | def _run(cmd): |
98 | cmd = "NPM_CONFIG_USERCONFIG=%s " % cfgfile + cmd | 112 | cmd = "NPM_CONFIG_USERCONFIG=%s " % (self.user_config_name) + cmd |
99 | cmd = "NPM_CONFIG_GLOBALCONFIG=%s " % cfgfile + cmd | 113 | cmd = "NPM_CONFIG_GLOBALCONFIG=%s " % (self.global_config_name) + cmd |
100 | return runfetchcmd(cmd, d, workdir=workdir) | 114 | return runfetchcmd(cmd, d, workdir=workdir) |
101 | 115 | ||
102 | if self.configs: | ||
103 | for key, value in self.configs: | ||
104 | _run("npm config set %s %s" % (key, shlex.quote(value))) | ||
105 | |||
106 | if configs: | 116 | if configs: |
117 | bb.warn("Use of configs argument of NpmEnvironment.run() function" | ||
118 | " is deprecated. Please use args argument instead.") | ||
107 | for key, value in configs: | 119 | for key, value in configs: |
108 | _run("npm config set %s %s" % (key, shlex.quote(value))) | 120 | cmd += " --%s=%s" % (key, shlex.quote(value)) |
109 | 121 | ||
110 | if args: | 122 | if args: |
111 | for key, value in args: | 123 | for key, value in args: |
@@ -167,14 +179,14 @@ class Npm(FetchMethod): | |||
167 | 179 | ||
168 | def _resolve_proxy_url(self, ud, d): | 180 | def _resolve_proxy_url(self, ud, d): |
169 | def _npm_view(): | 181 | def _npm_view(): |
170 | configs = [] | 182 | args = [] |
171 | configs.append(("json", "true")) | 183 | args.append(("json", "true")) |
172 | configs.append(("registry", ud.registry)) | 184 | args.append(("registry", ud.registry)) |
173 | pkgver = shlex.quote(ud.package + "@" + ud.version) | 185 | pkgver = shlex.quote(ud.package + "@" + ud.version) |
174 | cmd = ud.basecmd + " view %s" % pkgver | 186 | cmd = ud.basecmd + " view %s" % pkgver |
175 | env = NpmEnvironment(d) | 187 | env = NpmEnvironment(d) |
176 | check_network_access(d, cmd, ud.registry) | 188 | check_network_access(d, cmd, ud.registry) |
177 | view_string = env.run(cmd, configs=configs) | 189 | view_string = env.run(cmd, args=args) |
178 | 190 | ||
179 | if not view_string: | 191 | if not view_string: |
180 | raise FetchError("Unavailable package %s" % pkgver, ud.url) | 192 | raise FetchError("Unavailable package %s" % pkgver, ud.url) |