diff options
author | Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com> | 2021-10-06 16:35:53 +0200 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2021-10-08 16:45:05 +0100 |
commit | 00f2b6d0b70a067e88957585a50183548a0d92a4 (patch) | |
tree | 428a45e448ec7fe9fb250497c2be74b0b5856fd3 /bitbake/lib/bb | |
parent | d2d40e733248b94b28a1cb5a0f69dc8cb5860fd9 (diff) | |
download | poky-00f2b6d0b70a067e88957585a50183548a0d92a4.tar.gz |
bitbake: fetch2: npm: Create config npmrc in environment instantiation
Create a configuration npmrc per npm environment to avoid repeated
creation of the same configuration file. Create the file via python to
avoid multiple npm config calls and add the ability to pass a file
path instead of a temporary file.
Deprecate the npm configs argument of the run function. The configs
should be passed to npm environment or as command specific arguments.
(Bitbake rev: 2c2df49b06a2bad7a5b8872a9998338a4660498f)
Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb')
-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) |