Skip to content

Commit f742bb4

Browse files
committed
luarocks: switch to json manifest
1 parent 58685da commit f742bb4

File tree

2 files changed

+10
-40
lines changed

2 files changed

+10
-40
lines changed
Lines changed: 9 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (C) 2019 Dmitry Marakasov <amdmi3@amdmi3.ru>
1+
# Copyright (C) 2019-2026 Dmitry Marakasov <amdmi3@amdmi3.ru>
22
#
33
# This file is part of repology
44
#
@@ -17,50 +17,20 @@
1717

1818
from typing import Any, Iterable
1919

20-
from pyparsing import Empty, Forward, QuotedString, Regex, Suppress, ZeroOrMore
20+
from libversion import version_compare
2121

2222
from repology.packagemaker import NameType, PackageFactory, PackageMaker
2323
from repology.parsers import Parser
24-
25-
26-
def _parse_data(data: str) -> dict[str, Any]:
27-
lcur, rcur, lbrk, rbrk, comma, eq = map(Suppress, '{}[],=')
28-
29-
tablekey = Regex(r'[a-z][a-z0-9_]*') | (lbrk + QuotedString(quoteChar="'") + rbrk)
30-
qstring = QuotedString(quoteChar='"')
31-
32-
value = Forward()
33-
34-
keyval = (tablekey + eq + value).setParseAction(lambda s, l, t: [(str(t[0]), t[1])])
35-
36-
array_table = (value + ZeroOrMore(comma + value)).setParseAction(lambda s, l, t: [list(t)])
37-
dict_table = (keyval + ZeroOrMore(comma + keyval)).setParseAction(lambda s, l, t: [{k: v for k, v in t}])
38-
39-
# mypy: Call to untyped function "Empty" in typed context
40-
# srsly? why only Empty, why not other pyparsing classes? how can I fix it?
41-
table = lcur + (dict_table | array_table | Empty().setParseAction(lambda s, l, t: [None])) + rcur
42-
value << (qstring | table)
43-
44-
root = ZeroOrMore(keyval).setParseAction(lambda s, l, t: {k: v for k, v in t})
45-
46-
return root.parseString(data, parseAll=True)[0] # type: ignore
24+
from repology.parsers.json import iter_json_dict
25+
from repology.parsers.versions import VersionStripper
4726

4827

4928
class LuaRocksParser(Parser):
5029
def iter_parse(self, path: str, factory: PackageFactory) -> Iterable[PackageMaker]:
51-
with open(path, encoding='utf-8', errors='ignore') as contents:
52-
data = contents.read()
30+
normalize_version = VersionStripper().strip_right('-')
5331

54-
for pkgname, pkgdata in _parse_data(data)['repository'].items():
55-
with factory.begin() as pkg:
32+
for pkgname, pkgversions in iter_json_dict(path, ('repository', None)):
33+
with factory.begin(pkgname) as pkg:
5634
pkg.add_name(pkgname, NameType.LUAROCKS_NAME)
57-
58-
for version, versiondatas in pkgdata.items():
59-
for versiondata in versiondatas:
60-
verpkg = pkg.clone()
61-
62-
verpkg.set_rawversion(version)
63-
verpkg.set_version(version.rsplit('-', 1)[0])
64-
verpkg.set_arch(versiondata['arch'])
65-
66-
yield verpkg
35+
version = max(pkgversions.keys(), key=cmp_to_key(version_compare))
36+
verpkg.set_version(version, normalize_version)

repos.d/modules/luarocks.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
- name: manifest
1212
fetcher:
1313
class: FileFetcher
14-
url: https://luarocks.org/manifest
14+
url: https://luarocks.org/manifest.json
1515
parser:
1616
class: LuaRocksParser
1717
shadow: true

0 commit comments

Comments
 (0)