diff options
author | Melody Horn <melody@boringcactus.com> | 2021-03-29 20:08:32 -0600 |
---|---|---|
committer | Melody Horn <melody@boringcactus.com> | 2021-03-29 20:08:32 -0600 |
commit | faee70554a0e18f15676ba850d584f2d3e990c97 (patch) | |
tree | 7d9a51e8f8c2a3778c19c38983bea90bcbcd5433 /repos | |
parent | 768aa24eeb1c9606fa214bf0aa57315814c04f5e (diff) | |
download | where-packaged-faee70554a0e18f15676ba850d584f2d3e990c97.tar.gz where-packaged-faee70554a0e18f15676ba850d584f2d3e990c97.zip |
debian
Diffstat (limited to 'repos')
-rw-r--r-- | repos/__init__.py | 3 | ||||
-rw-r--r-- | repos/debian.py | 69 |
2 files changed, 71 insertions, 1 deletions
diff --git a/repos/__init__.py b/repos/__init__.py index 005dcf8..e5e4f98 100644 --- a/repos/__init__.py +++ b/repos/__init__.py @@ -1,6 +1,6 @@ from typing import Mapping, List -from . import alpine_linux, arch_linux, crates_io, homebrew +from . import alpine_linux, arch_linux, crates_io, debian, homebrew from .base import Repository, slug, Version __all__ = [ @@ -17,6 +17,7 @@ all_repos: List[Repository] = [ *repos_from(alpine_linux), *repos_from(arch_linux), *repos_from(crates_io), + *repos_from(debian), *repos_from(homebrew), ] diff --git a/repos/debian.py b/repos/debian.py new file mode 100644 index 0000000..6ad93fd --- /dev/null +++ b/repos/debian.py @@ -0,0 +1,69 @@ +import gzip +from pathlib import Path +import re +from typing import Mapping + +from .base import Repository, Version + +__all__ = [ + 'buster_main_all', + 'buster_main_amd64', + 'buster_contrib_all', + 'buster_contrib_amd64', + 'buster_non_free_all', + 'buster_non_free_amd64', + 'testing_main_all', + 'testing_main_amd64', + 'testing_contrib_all', + 'testing_contrib_amd64', + 'testing_non_free_all', + 'testing_non_free_amd64', +] + +PACKAGE_REVISION_INFO = re.compile(r'(\+\w+)?-\d+$') + +def parse_cached(cached: Path) -> Mapping[str, Version]: + result = dict() + with gzip.open(cached, mode='rt') as file: + this_package = None + this_version = None + for line in file: + line = line.strip() + pieces = line.split(': ', 1) + if len(pieces) != 2: + continue + line_type, line_data = pieces + if line_type == 'Package': + this_package = line_data + elif line_type == 'Version': + this_version = line_data + + if this_package is not None and this_version is not None: + clean_version = PACKAGE_REVISION_INFO.sub('', this_version) + result[this_package] = Version(this_version, clean_version) + this_version = None + this_package = None + return result + +def build_repo(name: str, dist: str, section: str, arch: str = 'all') -> Repository: + url = f'https://deb.debian.org/debian/dists/{dist}/{section}/binary-{arch}/Packages.gz' + return Repository( + family='Debian', + repo=name, + index_url=url, + parse=parse_cached, + ) + +buster_main_all = build_repo('10 - Buster (main)', 'buster', 'main') +buster_main_amd64 = build_repo('10 - Buster (main/amd64)', 'buster', 'main', 'amd64') +buster_contrib_all = build_repo('10 - Buster (contrib)', 'buster', 'contrib') +buster_contrib_amd64 = build_repo('10 - Buster (contrib/amd64)', 'buster', 'contrib', 'amd64') +buster_non_free_all = build_repo('10 - Buster (non-free)', 'buster', 'non-free') +buster_non_free_amd64 = build_repo('10 - Buster (non-free/amd64)', 'buster', 'non-free', 'amd64') + +testing_main_all = build_repo('Testing (main)', 'testing', 'main') +testing_main_amd64 = build_repo('Testing (main/amd64)', 'testing', 'main', 'amd64') +testing_contrib_all = build_repo('Testing (contrib)', 'testing', 'contrib') +testing_contrib_amd64 = build_repo('Testing (contrib/amd64)', 'testing', 'contrib', 'amd64') +testing_non_free_all = build_repo('Testing (non-free)', 'testing', 'non-free') +testing_non_free_amd64 = build_repo('Testing (non-free/amd64)', 'testing', 'non-free', 'amd64') |