mirror of
https://github.com/aphrody-labs/msys2-devtools.git
synced 2026-10-13 20:12:03 +00:00
53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
import io
|
|
|
|
from .exttarfile import tarfile
|
|
|
|
|
|
def parse_desc(t: str) -> dict[str, list[str]]:
|
|
d: dict[str, list[str]] = {}
|
|
cat = None
|
|
values: list[str] = []
|
|
for l in t.splitlines():
|
|
l = l.strip()
|
|
if cat is None:
|
|
cat = l
|
|
elif not l:
|
|
d[cat] = values
|
|
cat = None
|
|
values = []
|
|
else:
|
|
values.append(l)
|
|
if cat is not None:
|
|
d[cat] = values
|
|
return d
|
|
|
|
|
|
def parse_repo(data: bytes) -> dict[str, dict[str, list[str]]]:
|
|
sources: dict[str, dict[str, list[str]]] = {}
|
|
|
|
with io.BytesIO(data) as f:
|
|
with tarfile.TarFile.open(fileobj=f, mode="r") as tar:
|
|
packages: dict[str, list] = {}
|
|
for info in tar:
|
|
package_id = info.name.split("/", 1)[0]
|
|
infofile = tar.extractfile(info)
|
|
if infofile is None:
|
|
continue
|
|
with infofile:
|
|
packages.setdefault(package_id, []).append(
|
|
(info.name, infofile.read()))
|
|
|
|
for package_id, infos in sorted(packages.items()):
|
|
t = ""
|
|
for name, data in sorted(infos):
|
|
if name.endswith("/desc"):
|
|
t += data.decode("utf-8")
|
|
elif name.endswith("/depends"):
|
|
t += data.decode("utf-8")
|
|
elif name.endswith("/files"):
|
|
t += data.decode("utf-8")
|
|
desc = parse_desc(t)
|
|
sources[package_id] = desc
|
|
|
|
return sources
|