1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

Properly parse JSON Lines output from yarn (#4050) (#4098)

* Properly parse JSON Lines output from yarn

* Properly support output of yarn global list

* Add changelog fragment

* Check that the string starts with 'bins-'

* Fix changelog fragment

* Update changelogs/fragments/4050-properly-parse-json-lines-output-from-yarn.yaml

Co-authored-by: Felix Fontein <felix@fontein.de>

Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 4309dfda52)

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
This commit is contained in:
patchback[bot] 2022-01-28 07:38:51 +01:00 committed by GitHub
parent 3ca6e8525e
commit 88bf99b272
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 9 deletions

View file

@ -0,0 +1,3 @@
bugfixes:
- yarn - fix incorrect handling of ``yarn list`` and ``yarn global list`` output that could result in fatal error (https://github.com/ansible-collections/community.general/pull/4050).
- yarn - fix incorrectly reported status when installing a package globally (https://github.com/ansible-collections/community.general/issues/4045, https://github.com/ansible-collections/community.general/pull/4050).

View file

@ -241,16 +241,19 @@ class Yarn(object):
if error: if error:
self.module.fail_json(msg=error) self.module.fail_json(msg=error)
data = json.loads(result) for json_line in result.strip().split('\n'):
try: data = json.loads(json_line)
dependencies = data['data']['trees'] if self.globally:
except KeyError: if data['type'] == 'list' and data['data']['type'].startswith('bins-'):
missing.append(self.name) # This is a string in format: 'bins-<PACKAGE_NAME>'
return installed, missing installed.append(data['data']['type'][5:])
else:
if data['type'] == 'tree':
dependencies = data['data']['trees']
for dep in dependencies: for dep in dependencies:
name, version = dep['name'].rsplit('@', 1) name, version = dep['name'].rsplit('@', 1)
installed.append(name) installed.append(name)
if self.name not in installed: if self.name not in installed:
missing.append(self.name) missing.append(self.name)