diff --git a/swh/lister/arch/__init__.py b/swh/lister/arch/__init__.py index 97abe5e..13e8abe 100644 --- a/swh/lister/arch/__init__.py +++ b/swh/lister/arch/__init__.py @@ -1,12 +1,226 @@ # Copyright (C) 2022 the Software Heritage developers # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information +""" +Arch Linux lister +================= + +The Arch lister list origins from `archlinux.org`_, the official Arch Linux packages, +and from `archlinuxarm.org`_, the Arch Linux ARM packages, an unofficial port for arm. + +Packages are put in three different repositories, `core`, `extra` and `community`. + +To manage listing those origins, this lister must be instantiated with a `flavours` dict. + +`flavours` default values:: + + "official": { + "archs": ["x86_64"], + "repos": ["core", "extra", "community"], + "base_info_url": "https://archlinux.org", + "base_archive_url": "https://archive.archlinux.org", + "base_mirror_url": "", + "base_api_url": "https://archlinux.org", + }, + "arm": { + "archs": ["armv7h", "aarch64"], + "repos": ["core", "extra", "community"], + "base_info_url": "https://archlinuxarm.org", + "base_archive_url": "", + "base_mirror_url": "https://uk.mirror.archlinuxarm.org", + "base_api_url": "", + } + +From official Arch Linux repositories we can list all packages and all released versions. +They provide an api and archives. + +From Arch Linux ARM repositories we can list all packages at their latest versions, they +do not provide api or archives. + +As of August 2022 `archlinux.org`_ list 12592 packages and `archlinuxarm.org` 24044 packages. +Please note that those amounts are the total of `regular`_ and `split`_ packages. + +Origins retrieving strategy +--------------------------- + +Download repositories archives as tar.gz files from https://archive.archlinux.org/repos/last/, +extract to a temp directory and then walks through each 'desc' files. +Repository archive index url example for Arch Linux `core repository`_ and Arch +Linux ARM `extra repository`_. + +Each 'desc' file describe the latest released version of a package and helps +to build an origin url and `package versions url`_ from where scrapping artifacts metadata +and get a list of versions. + +For Arch Linux ARM it follow the same discovery process parsing 'desc' files. +The main difference is that we can't get existing versions of an arm package +because https://archlinuxarm.org does not have an 'archive' website or api. + +Page listing +------------ + +Each page is a list of package belonging to a flavour ('official', 'arm'), and a +repo ('core', 'extra', 'community'). + +Each line of a page represents an origin url for a package name with related metadata and versions. + +Origin url examples: + +* **Arch Linux**: https://archlinux.org/packages/extra/x86_64/mercurial +* **Arch Linux ARM**: https://archlinuxarm.org/packages/armv7h/mercurial + +The data schema for each line is: + +* **name**: Package name +* **version**: Last released package version +* **last_modified**: Iso8601 last modified date from timestamp +* **url**: Origin url +* **data**: Package metadata dict +* **versions**: A list of dict with artifacts metadata for each versions + +The data schema for `versions` within a line: + +* **name**: Package name +* **version**: Package version +* **repo**: One of core, extra, community +* **arch**: Processor architecture targeted +* **filename**: Filename of the archive to download +* **url**: Package download url +* **last_modified**: Iso8601 last modified date from timestamp, used as publication date + for this version +* **length**: Length of the archive to download + +Origins from page +----------------- + +The origin url corresponds to: + +* **Arch Linux**: https://archlinux.org/packages/{repo}/{arch}/{name} +* **Arch Linux ARM**: https://archlinuxarm.org/packages/{arch}/{name} + +Additionally we add some data set to "extra_loader_arguments": + +* **artifacts**: Represent data about the Arch Linux package archive to download, + following :ref:`original-artifacts-json specification ` +* **arch_metadata**: To store all other interesting attributes that do not belongs to artifacts. + +Origin data example Arch Linux official:: + + { + "url": "https://archlinux.org/packages/extra/x86_64/mercurial", + "visit_type": "arch", + "extra_loader_arguments": { + "artifacts": [ + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-4.8.2-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "4.8.2-1", + "length": 4000000, + "filename": "mercurial-4.8.2-1-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-4.9-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "4.9-1", + "length": 4000000, + "filename": "mercurial-4.9-1-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-4.9.1-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "4.9.1-1", + "length": 4000000, + "filename": "mercurial-4.9.1-1-x86_64.pkg.tar.xz", + }, + ... + ], + "arch_metadata": [ + { + "arch": "x86_64", + "repo": "extra", + "name": "mercurial", + "version": "4.8.2-1", + "last_modified": "2019-01-15T20:31:00", + }, + { + "arch": "x86_64", + "repo": "extra", + "name": "mercurial", + "version": "4.9-1", + "last_modified": "2019-02-12T06:15:00", + }, + { + "arch": "x86_64", + "repo": "extra", + "name": "mercurial", + "version": "4.9.1-1", + "last_modified": "2019-03-30T17:40:00", + }, + ], + }, + }, + +Origin data example Arch Linux ARM:: + + { + "url": "https://archlinuxarm.org/packages/armv7h/mercurial", + "visit_type": "arch", + "extra_loader_arguments": { + "artifacts": [ + { + "url": "https://uk.mirror.archlinuxarm.org/armv7h/extra/mercurial-6.1.3-1-armv7h.pkg.tar.xz", # noqa: B950 + "length": 4897816, + "version": "6.1.3-1", + "filename": "mercurial-6.1.3-1-armv7h.pkg.tar.xz", + } + ], + "arch_metadata": [ + { + "arch": "armv7h", + "name": "mercurial", + "repo": "extra", + "version": "6.1.3-1", + "last_modified": "2022-06-02T22:13:08", + } + ], + }, + }, + +Running tests +------------- + +Activate the virtualenv and run from within swh-lister directory:: + + pytest -s -vv --log-cli-level=DEBUG swh/lister/arch/tests + +Testing with Docker +------------------- + +Change directory to swh/docker then launch the docker environment:: + + docker-compose up -d + +Then connect to the lister:: + + docker exec -it docker_swh-lister_1 bash + +And run the lister (The output of this listing results in “oneshot” tasks in the scheduler):: + + swh lister run -l arch + +.. _archlinux.org: https://archlinux.org/packages/ +.. _archlinuxarm.org: https://archlinuxarm.org/packages/ +.. _core repository: https://archive.archlinux.org/repos/last/core/os/x86_64/core.files.tar.gz +.. _extra repository: https://uk.mirror.archlinuxarm.org/armv7h/extra/extra.files.tar.gz +.. _package versions url: https://archive.archlinux.org/packages/m/mercurial/ +.. _regular: https://wiki.archlinux.org/title/PKGBUILD#Package_name +.. _split: https://man.archlinux.org/man/PKGBUILD.5#PACKAGE_SPLITTING +""" + + def register(): from .lister import ArchLister return { "lister": ArchLister, "task_modules": ["%s.tasks" % __name__], } diff --git a/swh/lister/arch/lister.py b/swh/lister/arch/lister.py index 0b6afb6..9c6e764 100644 --- a/swh/lister/arch/lister.py +++ b/swh/lister/arch/lister.py @@ -1,448 +1,469 @@ # Copyright (C) 2022 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information import datetime import logging from pathlib import Path import re import tarfile from typing import Any, Dict, Iterator, List, Optional from urllib.parse import unquote, urljoin from bs4 import BeautifulSoup import requests from swh.model.hashutil import hash_to_hex from swh.scheduler.interface import SchedulerInterface from swh.scheduler.model import ListedOrigin from ..pattern import CredentialsType, StatelessLister logger = logging.getLogger(__name__) # Aliasing the page results returned by `get_pages` method from the lister. ArchListerPage = List[Dict[str, Any]] def size_to_bytes(size: str) -> int: """Convert human readable file size to bytes. Resulting value is an approximation as input value is in most case rounded. Args: size: A string representing a human readable file size (eg: '500K') Returns: A decimal representation of file size Examples:: >>> size_to_bytes("500") 500 >>> size_to_bytes("1K") 1000 """ units = { "K": 1000, "M": 1000**2, "G": 1000**3, "T": 1000**4, "P": 1000**5, "E": 1000**6, "Z": 1000**7, "Y": 1000**8, } if size.endswith(tuple(units)): v, u = (size[:-1], size[-1]) return int(v) * units[u] else: return int(size) class ArchLister(StatelessLister[ArchListerPage]): """List Arch linux origins from 'core', 'extra', and 'community' repositories For 'official' Arch Linux it downloads core.tar.gz, extra.tar.gz and community.tar.gz from https://archive.archlinux.org/repos/last/ extract to a temp directory and then walks through each 'desc' files. Each 'desc' file describe the latest released version of a package and helps to build an origin url from where scrapping artifacts metadata. For 'arm' Arch Linux it follow the same discovery process parsing 'desc' files. The main difference is that we can't get existing versions of an arm package because https://archlinuxarm.org does not have an 'archive' website or api. """ LISTER_NAME = "arch" VISIT_TYPE = "arch" INSTANCE = "arch" DESTINATION_PATH = Path("/tmp/archlinux_archive") ARCH_PACKAGE_URL_PATTERN = "{base_url}/packages/{repo}/{arch}/{pkgname}" ARCH_PACKAGE_VERSIONS_URL_PATTERN = "{base_url}/packages/{pkgname[0]}/{pkgname}" ARCH_PACKAGE_DOWNLOAD_URL_PATTERN = ( "{base_url}/packages/{pkgname[0]}/{pkgname}/{filename}" ) ARCH_API_URL_PATTERN = "{base_url}/packages/{repo}/{arch}/{pkgname}/json" ARM_PACKAGE_URL_PATTERN = "{base_url}/packages/{arch}/{pkgname}" ARM_PACKAGE_DOWNLOAD_URL_PATTERN = "{base_url}/{arch}/{repo}/{filename}" def __init__( self, scheduler: SchedulerInterface, credentials: Optional[CredentialsType] = None, flavours: Dict[str, Any] = { "official": { "archs": ["x86_64"], "repos": ["core", "extra", "community"], "base_info_url": "https://archlinux.org", "base_archive_url": "https://archive.archlinux.org", "base_mirror_url": "", "base_api_url": "https://archlinux.org", }, "arm": { "archs": ["armv7h", "aarch64"], "repos": ["core", "extra", "community"], "base_info_url": "https://archlinuxarm.org", "base_archive_url": "", "base_mirror_url": "https://uk.mirror.archlinuxarm.org", "base_api_url": "", }, }, ): super().__init__( scheduler=scheduler, credentials=credentials, url=flavours["official"]["base_info_url"], instance=self.INSTANCE, ) self.flavours = flavours def scrap_package_versions( self, name: str, repo: str, base_url: str ) -> List[Dict[str, Any]]: """Given a package 'name' and 'repo', make an http call to origin url and parse its content to get package versions artifacts data. That method is suitable only for 'official' Arch Linux, not 'arm'. Args: name: Package name repo: The repository the package belongs to (one of self.repos) Returns: A list of dict of version Example:: [ {"url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20190211-1-x86_64.pkg.tar.xz", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20190211-1", "length": 180000, "filename": "dialog-1:1.3_20190211-1-x86_64.pkg.tar.xz", "last_modified": "2019-02-13T08:36:00"}, ] """ url = self.ARCH_PACKAGE_VERSIONS_URL_PATTERN.format( pkgname=name, base_url=base_url ) soup = BeautifulSoup(requests.get(url).text, "html.parser") links = soup.find_all("a", href=True) # drop the first line (used to go to up directory) if links[0].attrs["href"] == "../": links.pop(0) versions = [] for link in links: # filename displayed can be cropped if name is too long, get it from href instead filename = unquote(link.attrs["href"]) if filename.endswith((".tar.xz", ".tar.zst")): # Extract arch from filename arch_rex = re.compile( rf"^{re.escape(name)}-(?P.*)-(?Pany|i686|x86_64)" rf"(.pkg.tar.(?:zst|xz))$" ) m = arch_rex.match(filename) if m is None: logger.error( "Can not find a match for architecture in %(filename)s" % dict(filename=filename) ) else: arch = m.group("arch") version = m.group("version") # Extract last_modified and an approximate file size raw_text = link.next_sibling raw_text_rex = re.compile( r"^(?P\d+-\w+-\d+ \d\d:\d\d)\s+(?P\w+)$" ) s = raw_text_rex.search(raw_text.strip()) if s is None: logger.error( "Can not find a match for 'last_modified' and/or " "'size' in '%(raw_text)s'" % dict(raw_text=raw_text) ) else: assert s.groups() assert len(s.groups()) == 2 last_modified_str, size = s.groups() # format as expected last_modified = datetime.datetime.strptime( last_modified_str, "%d-%b-%Y %H:%M" ).isoformat() length = size_to_bytes(size) # we want bytes # link url is relative, format a canonical one url = self.ARCH_PACKAGE_DOWNLOAD_URL_PATTERN.format( base_url=base_url, pkgname=name, filename=filename ) versions.append( dict( name=name, version=version, repo=repo, arch=arch, filename=filename, url=url, last_modified=last_modified, length=length, ) ) return versions def get_repo_archive(self, url: str, destination_path: Path) -> Path: """Given an url and a destination path, retrieve and extract .tar.gz archive which contains 'desc' file for each package. Each .tar.gz archive corresponds to an Arch Linux repo ('core', 'extra', 'community'). Args: url: url of the .tar.gz archive to download destination_path: the path on disk where to extract archive Returns: a directory Path where the archive has been extracted to. """ res = requests.get(url) destination_path.parent.mkdir(parents=True, exist_ok=True) destination_path.write_bytes(res.content) extract_to = Path(str(destination_path).split(".tar.gz")[0]) tar = tarfile.open(destination_path) tar.extractall(path=extract_to) tar.close() return extract_to def parse_desc_file( self, path: Path, repo: str, base_url: str, dl_url_fmt: str, ) -> Dict[str, Any]: """Extract package information from a 'desc' file. There are subtle differences between parsing 'official' and 'arm' des files Args: path: A path to a 'desc' file on disk repo: The repo the package belongs to Returns: A dict of metadata Example:: {'api_url': 'https://archlinux.org/packages/core/x86_64/dialog/json', 'arch': 'x86_64', 'base': 'dialog', 'builddate': '1650081535', 'csize': '203028', 'desc': 'A tool to display dialog boxes from shell scripts', 'filename': 'dialog-1:1.3_20220414-1-x86_64.pkg.tar.zst', 'isize': '483988', 'license': 'LGPL2.1', 'md5sum': '06407c0cb11c50d7bf83d600f2e8107c', 'name': 'dialog', 'packager': 'Evangelos Foutras ', 'pgpsig': 'pgpsig content xxx', 'project_url': 'https://invisible-island.net/dialog/', 'provides': 'libdialog.so=15-64', 'repo': 'core', 'sha256sum': 'ef8c8971f591de7db0f455970ef5d81d5aced1ddf139f963f16f6730b1851fa7', 'url': 'https://archive.archlinux.org/packages/.all/dialog-1:1.3_20220414-1-x86_64.pkg.tar.zst', # noqa: B950 'version': '1:1.3_20220414-1'} """ rex = re.compile(r"^\%(?P\w+)\%\n(?P.*)\n$", re.M) with path.open("rb") as content: parsed = rex.findall(content.read().decode()) data = {entry[0].lower(): entry[1] for entry in parsed} if "url" in data.keys(): data["project_url"] = data["url"] assert data["name"] assert data["filename"] assert data["arch"] data["repo"] = repo data["url"] = urljoin( base_url, dl_url_fmt.format( base_url=base_url, pkgname=data["name"], filename=data["filename"], arch=data["arch"], repo=repo, ), ) assert data["md5sum"] assert data["sha256sum"] data["checksums"] = { "md5sum": hash_to_hex(data["md5sum"]), "sha256sum": hash_to_hex(data["sha256sum"]), } return data def get_pages(self) -> Iterator[ArchListerPage]: """Yield an iterator sorted by name in ascending order of pages. Each page is a list of package belonging to a flavour ('official', 'arm'), and a repo ('core', 'extra', 'community') """ for name, flavour in self.flavours.items(): for arch in flavour["archs"]: for repo in flavour["repos"]: page = [] if name == "official": prefix = urljoin(flavour["base_archive_url"], "/repos/last/") filename = f"{repo}.files.tar.gz" archive_url = urljoin(prefix, f"{repo}/os/{arch}/{filename}") destination_path = Path(self.DESTINATION_PATH, arch, filename) base_url = flavour["base_archive_url"] dl_url_fmt = self.ARCH_PACKAGE_DOWNLOAD_URL_PATTERN base_info_url = flavour["base_info_url"] info_url_fmt = self.ARCH_PACKAGE_URL_PATTERN elif name == "arm": filename = f"{repo}.files.tar.gz" archive_url = urljoin( flavour["base_mirror_url"], f"{arch}/{repo}/{filename}" ) destination_path = Path(self.DESTINATION_PATH, arch, filename) base_url = flavour["base_mirror_url"] dl_url_fmt = self.ARM_PACKAGE_DOWNLOAD_URL_PATTERN base_info_url = flavour["base_info_url"] info_url_fmt = self.ARM_PACKAGE_URL_PATTERN archive = self.get_repo_archive( url=archive_url, destination_path=destination_path ) assert archive packages_desc = list(archive.glob("**/desc")) logger.debug( "Processing %(instance)s source packages info from " "%(flavour)s %(arch)s %(repo)s repository, " "(%(qty)s packages)." % dict( instance=self.instance, flavour=name, arch=arch, repo=repo, qty=len(packages_desc), ) ) for package_desc in packages_desc: data = self.parse_desc_file( path=package_desc, repo=repo, base_url=base_url, dl_url_fmt=dl_url_fmt, ) assert data["builddate"] last_modified = datetime.datetime.fromtimestamp( float(data["builddate"]), tz=datetime.timezone.utc ) assert data["name"] assert data["filename"] assert data["arch"] url = info_url_fmt.format( base_url=base_info_url, pkgname=data["name"], filename=data["filename"], repo=repo, arch=data["arch"], ) assert data["version"] if name == "official": # find all versions of a package scrapping archive versions = self.scrap_package_versions( name=data["name"], repo=repo, base_url=base_url, ) elif name == "arm": # There is no way to get related versions of a package, # but 'data' represents the latest released version, # use it in this case assert data["builddate"] assert data["csize"] assert data["url"] versions = [ dict( name=data["name"], version=data["version"], repo=repo, arch=data["arch"], filename=data["filename"], url=data["url"], last_modified=last_modified.replace( tzinfo=None ).isoformat(timespec="seconds"), length=int(data["csize"]), ) ] package = { "name": data["name"], "version": data["version"], "last_modified": last_modified, "url": url, "versions": versions, "data": data, } page.append(package) yield page def get_origins_from_page(self, page: ArchListerPage) -> Iterator[ListedOrigin]: """Iterate on all arch pages and yield ListedOrigin instances.""" assert self.lister_obj.id is not None for origin in page: + artifacts = [] + arch_metadata = [] + for version in origin["versions"]: + artifacts.append( + { + "version": version["version"], + "filename": version["filename"], + "url": version["url"], + "length": version["length"], + } + ) + arch_metadata.append( + { + "version": version["version"], + "name": version["name"], + "arch": version["arch"], + "repo": version["repo"], + "last_modified": version["last_modified"], + } + ) yield ListedOrigin( lister_id=self.lister_obj.id, visit_type=self.VISIT_TYPE, url=origin["url"], last_update=origin["last_modified"], extra_loader_arguments={ - "artifacts": origin["versions"], + "artifacts": artifacts, + "arch_metadata": arch_metadata, }, ) diff --git a/swh/lister/arch/tests/test_lister.py b/swh/lister/arch/tests/test_lister.py index 78f5f2e..abe8e81 100644 --- a/swh/lister/arch/tests/test_lister.py +++ b/swh/lister/arch/tests/test_lister.py @@ -1,1088 +1,1400 @@ # Copyright (C) 2022 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information from swh.lister.arch.lister import ArchLister expected_origins = [ { "url": "https://archlinux.org/packages/core/x86_64/dialog", "visit_type": "arch", "extra_loader_arguments": { "artifacts": [ { "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20190211-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "1:1.3_20190211-1", + "length": 180000, + "filename": "dialog-1:1.3_20190211-1-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20190724-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "1:1.3_20190724-1", + "length": 180000, + "filename": "dialog-1:1.3_20190724-1-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20190728-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "1:1.3_20190728-1", + "length": 180000, + "filename": "dialog-1:1.3_20190728-1-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20190806-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "1:1.3_20190806-1", + "length": 182000, + "filename": "dialog-1:1.3_20190806-1-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20190808-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "1:1.3_20190808-1", + "length": 182000, + "filename": "dialog-1:1.3_20190808-1-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20191110-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "1:1.3_20191110-1", + "length": 183000, + "filename": "dialog-1:1.3_20191110-1-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20191110-2-x86_64.pkg.tar.xz", # noqa: B950 + "version": "1:1.3_20191110-2", + "length": 183000, + "filename": "dialog-1:1.3_20191110-2-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20191209-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "1:1.3_20191209-1", + "length": 183000, + "filename": "dialog-1:1.3_20191209-1-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20191210-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "1:1.3_20191210-1", + "length": 184000, + "filename": "dialog-1:1.3_20191210-1-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20200228-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "1:1.3_20200228-1", + "length": 196000, + "filename": "dialog-1:1.3_20200228-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20200327-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "1:1.3_20200327-1", + "length": 196000, + "filename": "dialog-1:1.3_20200327-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20201126-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "1:1.3_20201126-1", + "length": 199000, + "filename": "dialog-1:1.3_20201126-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20210117-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "1:1.3_20210117-1", + "length": 200000, + "filename": "dialog-1:1.3_20210117-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20210306-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "1:1.3_20210306-1", + "length": 201000, + "filename": "dialog-1:1.3_20210306-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20210319-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "1:1.3_20210319-1", + "length": 201000, + "filename": "dialog-1:1.3_20210319-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20210324-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "1:1.3_20210324-1", + "length": 201000, + "filename": "dialog-1:1.3_20210324-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20210509-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "1:1.3_20210509-1", + "length": 198000, + "filename": "dialog-1:1.3_20210509-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20210530-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "1:1.3_20210530-1", + "length": 198000, + "filename": "dialog-1:1.3_20210530-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20210621-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "1:1.3_20210621-1", + "length": 199000, + "filename": "dialog-1:1.3_20210621-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20211107-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "1:1.3_20211107-1", + "length": 197000, + "filename": "dialog-1:1.3_20211107-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20211214-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "1:1.3_20211214-1", + "length": 197000, + "filename": "dialog-1:1.3_20211214-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20220117-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "1:1.3_20220117-1", + "length": 199000, + "filename": "dialog-1:1.3_20220117-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20220414-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "1:1.3_20220414-1", + "length": 198000, + "filename": "dialog-1:1.3_20220414-1-x86_64.pkg.tar.zst", + }, + ], + "arch_metadata": [ + { "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20190211-1", - "length": 180000, - "filename": "dialog-1:1.3_20190211-1-x86_64.pkg.tar.xz", "last_modified": "2019-02-13T08:36:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20190724-1-x86_64.pkg.tar.xz", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20190724-1", - "length": 180000, - "filename": "dialog-1:1.3_20190724-1-x86_64.pkg.tar.xz", "last_modified": "2019-07-26T21:39:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20190728-1-x86_64.pkg.tar.xz", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20190728-1", - "length": 180000, - "filename": "dialog-1:1.3_20190728-1-x86_64.pkg.tar.xz", "last_modified": "2019-07-29T12:10:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20190806-1-x86_64.pkg.tar.xz", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20190806-1", - "length": 182000, - "filename": "dialog-1:1.3_20190806-1-x86_64.pkg.tar.xz", "last_modified": "2019-08-07T04:19:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20190808-1-x86_64.pkg.tar.xz", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20190808-1", - "length": 182000, - "filename": "dialog-1:1.3_20190808-1-x86_64.pkg.tar.xz", "last_modified": "2019-08-09T22:49:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20191110-1-x86_64.pkg.tar.xz", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20191110-1", - "length": 183000, - "filename": "dialog-1:1.3_20191110-1-x86_64.pkg.tar.xz", "last_modified": "2019-11-11T11:15:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20191110-2-x86_64.pkg.tar.xz", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20191110-2", - "length": 183000, - "filename": "dialog-1:1.3_20191110-2-x86_64.pkg.tar.xz", "last_modified": "2019-11-13T17:40:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20191209-1-x86_64.pkg.tar.xz", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20191209-1", - "length": 183000, - "filename": "dialog-1:1.3_20191209-1-x86_64.pkg.tar.xz", "last_modified": "2019-12-10T09:56:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20191210-1-x86_64.pkg.tar.xz", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20191210-1", - "length": 184000, - "filename": "dialog-1:1.3_20191210-1-x86_64.pkg.tar.xz", "last_modified": "2019-12-12T15:55:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20200228-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20200228-1", - "length": 196000, - "filename": "dialog-1:1.3_20200228-1-x86_64.pkg.tar.zst", "last_modified": "2020-03-06T02:21:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20200327-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20200327-1", - "length": 196000, - "filename": "dialog-1:1.3_20200327-1-x86_64.pkg.tar.zst", "last_modified": "2020-03-29T17:08:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20201126-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20201126-1", - "length": 199000, - "filename": "dialog-1:1.3_20201126-1-x86_64.pkg.tar.zst", "last_modified": "2020-11-27T12:19:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20210117-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20210117-1", - "length": 200000, - "filename": "dialog-1:1.3_20210117-1-x86_64.pkg.tar.zst", "last_modified": "2021-01-18T18:05:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20210306-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20210306-1", - "length": 201000, - "filename": "dialog-1:1.3_20210306-1-x86_64.pkg.tar.zst", "last_modified": "2021-03-07T11:40:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20210319-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20210319-1", - "length": 201000, - "filename": "dialog-1:1.3_20210319-1-x86_64.pkg.tar.zst", "last_modified": "2021-03-20T00:12:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20210324-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20210324-1", - "length": 201000, - "filename": "dialog-1:1.3_20210324-1-x86_64.pkg.tar.zst", "last_modified": "2021-03-26T17:53:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20210509-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20210509-1", - "length": 198000, - "filename": "dialog-1:1.3_20210509-1-x86_64.pkg.tar.zst", "last_modified": "2021-05-16T02:04:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20210530-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20210530-1", - "length": 198000, - "filename": "dialog-1:1.3_20210530-1-x86_64.pkg.tar.zst", "last_modified": "2021-05-31T14:59:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20210621-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20210621-1", - "length": 199000, - "filename": "dialog-1:1.3_20210621-1-x86_64.pkg.tar.zst", "last_modified": "2021-06-23T02:59:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20211107-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20211107-1", - "length": 197000, - "filename": "dialog-1:1.3_20211107-1-x86_64.pkg.tar.zst", "last_modified": "2021-11-09T14:06:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20211214-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20211214-1", - "length": 197000, - "filename": "dialog-1:1.3_20211214-1-x86_64.pkg.tar.zst", "last_modified": "2021-12-14T09:26:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20220117-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20220117-1", - "length": 199000, - "filename": "dialog-1:1.3_20220117-1-x86_64.pkg.tar.zst", "last_modified": "2022-01-19T09:56:00", }, { - "url": "https://archive.archlinux.org/packages/d/dialog/dialog-1:1.3_20220414-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "dialog", "version": "1:1.3_20220414-1", - "length": 198000, - "filename": "dialog-1:1.3_20220414-1-x86_64.pkg.tar.zst", "last_modified": "2022-04-16T03:59:00", }, - ] + ], }, }, { "url": "https://archlinux.org/packages/community/x86_64/gnome-code-assistance", "visit_type": "arch", "extra_loader_arguments": { "artifacts": [ { "url": "https://archive.archlinux.org/packages/g/gnome-code-assistance/gnome-code-assistance-1:3.16.1+15+g0fd8b5f-1-x86_64.pkg.tar.xz", # noqa: B950 - "arch": "x86_64", - "repo": "community", - "name": "gnome-code-assistance", "version": "1:3.16.1+15+g0fd8b5f-1", "length": 2000000, "filename": "gnome-code-assistance-1:3.16.1+15+g0fd8b5f-1-x86_64.pkg.tar.xz", # noqa: B950 - "last_modified": "2019-11-10T20:55:00", }, { "url": "https://archive.archlinux.org/packages/g/gnome-code-assistance/gnome-code-assistance-1:3.16.1+15+g0fd8b5f-2-x86_64.pkg.tar.zst", # noqa: B950 - "arch": "x86_64", - "repo": "community", - "name": "gnome-code-assistance", "version": "1:3.16.1+15+g0fd8b5f-2", "length": 2000000, "filename": "gnome-code-assistance-1:3.16.1+15+g0fd8b5f-2-x86_64.pkg.tar.zst", # noqa: B950 - "last_modified": "2020-03-28T15:58:00", }, { "url": "https://archive.archlinux.org/packages/g/gnome-code-assistance/gnome-code-assistance-1:3.16.1+15+g0fd8b5f-3-x86_64.pkg.tar.zst", # noqa: B950 - "arch": "x86_64", - "repo": "community", - "name": "gnome-code-assistance", "version": "1:3.16.1+15+g0fd8b5f-3", "length": 2000000, "filename": "gnome-code-assistance-1:3.16.1+15+g0fd8b5f-3-x86_64.pkg.tar.zst", # noqa: B950 - "last_modified": "2020-07-05T15:28:00", }, { "url": "https://archive.archlinux.org/packages/g/gnome-code-assistance/gnome-code-assistance-1:3.16.1+15+g0fd8b5f-4-x86_64.pkg.tar.zst", # noqa: B950 - "arch": "x86_64", - "repo": "community", - "name": "gnome-code-assistance", "version": "1:3.16.1+15+g0fd8b5f-4", "length": 2000000, "filename": "gnome-code-assistance-1:3.16.1+15+g0fd8b5f-4-x86_64.pkg.tar.zst", # noqa: B950 - "last_modified": "2020-11-12T17:28:00", }, { "url": "https://archive.archlinux.org/packages/g/gnome-code-assistance/gnome-code-assistance-2:3.16.1+14+gaad6437-1-x86_64.pkg.tar.zst", # noqa: B950 - "arch": "x86_64", - "repo": "community", - "name": "gnome-code-assistance", "version": "2:3.16.1+14+gaad6437-1", "length": 2000000, "filename": "gnome-code-assistance-2:3.16.1+14+gaad6437-1-x86_64.pkg.tar.zst", # noqa: B950 - "last_modified": "2021-02-24T16:30:00", }, { "url": "https://archive.archlinux.org/packages/g/gnome-code-assistance/gnome-code-assistance-2:3.16.1+14+gaad6437-2-x86_64.pkg.tar.zst", # noqa: B950 - "arch": "x86_64", - "repo": "community", - "name": "gnome-code-assistance", "version": "2:3.16.1+14+gaad6437-2", "length": 2000000, "filename": "gnome-code-assistance-2:3.16.1+14+gaad6437-2-x86_64.pkg.tar.zst", # noqa: B950 - "last_modified": "2021-12-02T23:36:00", }, { "url": "https://archive.archlinux.org/packages/g/gnome-code-assistance/gnome-code-assistance-3.16.1+14+gaad6437-1-x86_64.pkg.tar.xz", # noqa: B950 - "arch": "x86_64", - "repo": "community", - "name": "gnome-code-assistance", "version": "3.16.1+14+gaad6437-1", "length": 2000000, "filename": "gnome-code-assistance-3.16.1+14+gaad6437-1-x86_64.pkg.tar.xz", # noqa: B950 - "last_modified": "2019-03-15T19:23:00", }, { "url": "https://archive.archlinux.org/packages/g/gnome-code-assistance/gnome-code-assistance-3.16.1+14+gaad6437-2-x86_64.pkg.tar.xz", # noqa: B950 - "arch": "x86_64", - "repo": "community", - "name": "gnome-code-assistance", "version": "3.16.1+14+gaad6437-2", "length": 2000000, "filename": "gnome-code-assistance-3.16.1+14+gaad6437-2-x86_64.pkg.tar.xz", # noqa: B950 - "last_modified": "2019-08-24T20:05:00", }, { "url": "https://archive.archlinux.org/packages/g/gnome-code-assistance/gnome-code-assistance-3.16.1+15+gb9ffc4d-1-x86_64.pkg.tar.xz", # noqa: B950 - "arch": "x86_64", - "repo": "community", - "name": "gnome-code-assistance", "version": "3.16.1+15+gb9ffc4d-1", "length": 2000000, "filename": "gnome-code-assistance-3.16.1+15+gb9ffc4d-1-x86_64.pkg.tar.xz", # noqa: B950 - "last_modified": "2019-08-25T20:55:00", }, { "url": "https://archive.archlinux.org/packages/g/gnome-code-assistance/gnome-code-assistance-3:3.16.1+r14+gaad6437-1-x86_64.pkg.tar.zst", # noqa: B950 - "arch": "x86_64", - "repo": "community", - "name": "gnome-code-assistance", "version": "3:3.16.1+r14+gaad6437-1", "length": 2000000, "filename": "gnome-code-assistance-3:3.16.1+r14+gaad6437-1-x86_64.pkg.tar.zst", # noqa: B950 - "last_modified": "2022-05-18T17:23:00", }, - ] - }, - }, - { - "url": "https://archlinux.org/packages/core/x86_64/gzip", - "visit_type": "arch", - "extra_loader_arguments": { - "artifacts": [ + ], + "arch_metadata": [ { - "url": "https://archive.archlinux.org/packages/g/gzip/gzip-1.10-1-x86_64.pkg.tar.xz", # noqa: B950 "arch": "x86_64", - "repo": "core", - "name": "gzip", - "version": "1.10-1", + "repo": "community", + "name": "gnome-code-assistance", + "version": "1:3.16.1+15+g0fd8b5f-1", + "last_modified": "2019-11-10T20:55:00", + }, + { + "arch": "x86_64", + "repo": "community", + "name": "gnome-code-assistance", + "version": "1:3.16.1+15+g0fd8b5f-2", + "last_modified": "2020-03-28T15:58:00", + }, + { + "arch": "x86_64", + "repo": "community", + "name": "gnome-code-assistance", + "version": "1:3.16.1+15+g0fd8b5f-3", + "last_modified": "2020-07-05T15:28:00", + }, + { + "arch": "x86_64", + "repo": "community", + "name": "gnome-code-assistance", + "version": "1:3.16.1+15+g0fd8b5f-4", + "last_modified": "2020-11-12T17:28:00", + }, + { + "arch": "x86_64", + "repo": "community", + "name": "gnome-code-assistance", + "version": "2:3.16.1+14+gaad6437-1", + "last_modified": "2021-02-24T16:30:00", + }, + { + "arch": "x86_64", + "repo": "community", + "name": "gnome-code-assistance", + "version": "2:3.16.1+14+gaad6437-2", + "last_modified": "2021-12-02T23:36:00", + }, + { + "arch": "x86_64", + "repo": "community", + "name": "gnome-code-assistance", + "version": "3.16.1+14+gaad6437-1", + "last_modified": "2019-03-15T19:23:00", + }, + { + "arch": "x86_64", + "repo": "community", + "name": "gnome-code-assistance", + "version": "3.16.1+14+gaad6437-2", + "last_modified": "2019-08-24T20:05:00", + }, + { + "arch": "x86_64", + "repo": "community", + "name": "gnome-code-assistance", + "version": "3.16.1+15+gb9ffc4d-1", + "last_modified": "2019-08-25T20:55:00", + }, + { + "arch": "x86_64", + "repo": "community", + "name": "gnome-code-assistance", + "version": "3:3.16.1+r14+gaad6437-1", + "last_modified": "2022-05-18T17:23:00", + }, + ], + }, + }, + { + "url": "https://archlinux.org/packages/core/x86_64/gzip", + "visit_type": "arch", + "extra_loader_arguments": { + "artifacts": [ + { + "url": "https://archive.archlinux.org/packages/g/gzip/gzip-1.10-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "1.10-1", "length": 78000, "filename": "gzip-1.10-1-x86_64.pkg.tar.xz", - "last_modified": "2018-12-30T18:38:00", }, { "url": "https://archive.archlinux.org/packages/g/gzip/gzip-1.10-2-x86_64.pkg.tar.xz", # noqa: B950 + "version": "1.10-2", + "length": 78000, + "filename": "gzip-1.10-2-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/g/gzip/gzip-1.10-3-x86_64.pkg.tar.xz", # noqa: B950 + "version": "1.10-3", + "length": 78000, + "filename": "gzip-1.10-3-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/g/gzip/gzip-1.11-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "1.11-1", + "length": 82000, + "filename": "gzip-1.11-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/g/gzip/gzip-1.12-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "1.12-1", + "length": 80000, + "filename": "gzip-1.12-1-x86_64.pkg.tar.zst", + }, + ], + "arch_metadata": [ + { + "arch": "x86_64", + "repo": "core", + "name": "gzip", + "version": "1.10-1", + "last_modified": "2018-12-30T18:38:00", + }, + { "arch": "x86_64", "repo": "core", "name": "gzip", "version": "1.10-2", - "length": 78000, - "filename": "gzip-1.10-2-x86_64.pkg.tar.xz", "last_modified": "2019-10-06T16:02:00", }, { - "url": "https://archive.archlinux.org/packages/g/gzip/gzip-1.10-3-x86_64.pkg.tar.xz", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "gzip", "version": "1.10-3", - "length": 78000, - "filename": "gzip-1.10-3-x86_64.pkg.tar.xz", "last_modified": "2019-11-13T15:55:00", }, { - "url": "https://archive.archlinux.org/packages/g/gzip/gzip-1.11-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "gzip", "version": "1.11-1", - "length": 82000, - "filename": "gzip-1.11-1-x86_64.pkg.tar.zst", "last_modified": "2021-09-04T02:02:00", }, { - "url": "https://archive.archlinux.org/packages/g/gzip/gzip-1.12-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "core", "name": "gzip", "version": "1.12-1", - "length": 80000, - "filename": "gzip-1.12-1-x86_64.pkg.tar.zst", "last_modified": "2022-04-07T17:35:00", }, - ] + ], }, }, { "url": "https://archlinux.org/packages/extra/x86_64/libasyncns", "visit_type": "arch", "extra_loader_arguments": { "artifacts": [ { - "url": "https://archive.archlinux.org/packages/l/libasyncns/libasyncns-0.8+3+g68cd5af-2-x86_64.pkg.tar.xz", # noqa: B950 - "arch": "x86_64", - "repo": "extra", - "name": "libasyncns", - "version": "0.8+3+g68cd5af-2", - "length": 16000, - "filename": "libasyncns-0.8+3+g68cd5af-2-x86_64.pkg.tar.xz", - "last_modified": "2018-11-09T23:39:00", + "url": "https://archive.archlinux.org/packages/l/libasyncns/libasyncns-0.8+3+g68cd5af-2-x86_64.pkg.tar.xz", # noqa: B950 + "version": "0.8+3+g68cd5af-2", + "length": 16000, + "filename": "libasyncns-0.8+3+g68cd5af-2-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/l/libasyncns/libasyncns-0.8+3+g68cd5af-3-x86_64.pkg.tar.zst", # noqa: B950 + "version": "0.8+3+g68cd5af-3", + "length": 17000, + "filename": "libasyncns-0.8+3+g68cd5af-3-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/l/libasyncns/libasyncns-1:0.8+r3+g68cd5af-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "1:0.8+r3+g68cd5af-1", + "length": 17000, + "filename": "libasyncns-1:0.8+r3+g68cd5af-1-x86_64.pkg.tar.zst", # noqa: B950 + }, + ], + "arch_metadata": [ + { + "arch": "x86_64", + "repo": "extra", + "name": "libasyncns", + "version": "0.8+3+g68cd5af-2", + "last_modified": "2018-11-09T23:39:00", + }, + { + "arch": "x86_64", + "repo": "extra", + "name": "libasyncns", + "version": "0.8+3+g68cd5af-3", + "last_modified": "2020-05-19T08:28:00", + }, + { + "arch": "x86_64", + "repo": "extra", + "name": "libasyncns", + "version": "1:0.8+r3+g68cd5af-1", + "last_modified": "2022-05-18T17:23:00", + }, + ], + }, + }, + { + "url": "https://archlinux.org/packages/extra/x86_64/mercurial", + "visit_type": "arch", + "extra_loader_arguments": { + "artifacts": [ + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-4.8.2-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "4.8.2-1", + "length": 4000000, + "filename": "mercurial-4.8.2-1-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-4.9-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "4.9-1", + "length": 4000000, + "filename": "mercurial-4.9-1-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-4.9.1-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "4.9.1-1", + "length": 4000000, + "filename": "mercurial-4.9.1-1-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.0-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "5.0-1", + "length": 4000000, + "filename": "mercurial-5.0-1-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.0.1-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "5.0.1-1", + "length": 4000000, + "filename": "mercurial-5.0.1-1-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.0.2-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "5.0.2-1", + "length": 4000000, + "filename": "mercurial-5.0.2-1-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.1-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "5.1-1", + "length": 4000000, + "filename": "mercurial-5.1-1-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.1.2-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "5.1.2-1", + "length": 4000000, + "filename": "mercurial-5.1.2-1-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.2-1-x86_64.pkg.tar.xz", # noqa: B950 + "version": "5.2-1", + "length": 4000000, + "filename": "mercurial-5.2-1-x86_64.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.2.1-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.2.1-1", + "length": 4000000, + "filename": "mercurial-5.2.1-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.2.2-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.2.2-1", + "length": 5000000, + "filename": "mercurial-5.2.2-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.2.2-2-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.2.2-2", + "length": 4000000, + "filename": "mercurial-5.2.2-2-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.3-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.3-1", + "length": 5000000, + "filename": "mercurial-5.3-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.3.1-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.3.1-1", + "length": 4000000, + "filename": "mercurial-5.3.1-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.3.2-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.3.2-1", + "length": 4000000, + "filename": "mercurial-5.3.2-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.4-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.4-1", + "length": 5000000, + "filename": "mercurial-5.4-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.4-2-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.4-2", + "length": 5000000, + "filename": "mercurial-5.4-2-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.4.1-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.4.1-1", + "length": 5000000, + "filename": "mercurial-5.4.1-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.4.2-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.4.2-1", + "length": 5000000, + "filename": "mercurial-5.4.2-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.5-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.5-1", + "length": 5000000, + "filename": "mercurial-5.5-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.5.1-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.5.1-1", + "length": 5000000, + "filename": "mercurial-5.5.1-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.5.2-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.5.2-1", + "length": 5000000, + "filename": "mercurial-5.5.2-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.6-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.6-1", + "length": 5000000, + "filename": "mercurial-5.6-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.6-2-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.6-2", + "length": 5000000, + "filename": "mercurial-5.6-2-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.6-3-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.6-3", + "length": 5000000, + "filename": "mercurial-5.6-3-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.6.1-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.6.1-1", + "length": 5000000, + "filename": "mercurial-5.6.1-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.7-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.7-1", + "length": 5000000, + "filename": "mercurial-5.7-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.7.1-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.7.1-1", + "length": 5000000, + "filename": "mercurial-5.7.1-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.8-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.8-1", + "length": 5000000, + "filename": "mercurial-5.8-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.8-2-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.8-2", + "length": 5000000, + "filename": "mercurial-5.8-2-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.8.1-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.8.1-1", + "length": 5000000, + "filename": "mercurial-5.8.1-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.9.1-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.9.1-1", + "length": 5000000, + "filename": "mercurial-5.9.1-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.9.1-2-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.9.1-2", + "length": 5000000, + "filename": "mercurial-5.9.1-2-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.9.2-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.9.2-1", + "length": 5000000, + "filename": "mercurial-5.9.2-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.9.3-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "5.9.3-1", + "length": 5000000, + "filename": "mercurial-5.9.3-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-6.0-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "6.0-1", + "length": 5000000, + "filename": "mercurial-6.0-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-6.0-2-x86_64.pkg.tar.zst", # noqa: B950 + "version": "6.0-2", + "length": 5000000, + "filename": "mercurial-6.0-2-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-6.0-3-x86_64.pkg.tar.zst", # noqa: B950 + "version": "6.0-3", + "length": 5000000, + "filename": "mercurial-6.0-3-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-6.0.1-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "6.0.1-1", + "length": 5000000, + "filename": "mercurial-6.0.1-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-6.0.2-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "6.0.2-1", + "length": 5000000, + "filename": "mercurial-6.0.2-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-6.0.3-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "6.0.3-1", + "length": 5000000, + "filename": "mercurial-6.0.3-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-6.1-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "6.1-1", + "length": 5000000, + "filename": "mercurial-6.1-1-x86_64.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-6.1-2-x86_64.pkg.tar.zst", # noqa: B950 + "version": "6.1-2", + "length": 5000000, + "filename": "mercurial-6.1-2-x86_64.pkg.tar.zst", }, { - "url": "https://archive.archlinux.org/packages/l/libasyncns/libasyncns-0.8+3+g68cd5af-3-x86_64.pkg.tar.zst", # noqa: B950 - "arch": "x86_64", - "repo": "extra", - "name": "libasyncns", - "version": "0.8+3+g68cd5af-3", - "length": 17000, - "filename": "libasyncns-0.8+3+g68cd5af-3-x86_64.pkg.tar.zst", - "last_modified": "2020-05-19T08:28:00", + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-6.1.1-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "6.1.1-1", + "length": 5000000, + "filename": "mercurial-6.1.1-1-x86_64.pkg.tar.zst", }, { - "url": "https://archive.archlinux.org/packages/l/libasyncns/libasyncns-1:0.8+r3+g68cd5af-1-x86_64.pkg.tar.zst", # noqa: B950 - "arch": "x86_64", - "repo": "extra", - "name": "libasyncns", - "version": "1:0.8+r3+g68cd5af-1", - "length": 17000, - "filename": "libasyncns-1:0.8+r3+g68cd5af-1-x86_64.pkg.tar.zst", # noqa: B950 - "last_modified": "2022-05-18T17:23:00", + "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-6.1.2-1-x86_64.pkg.tar.zst", # noqa: B950 + "version": "6.1.2-1", + "length": 5000000, + "filename": "mercurial-6.1.2-1-x86_64.pkg.tar.zst", }, - ] - }, - }, - { - "url": "https://archlinux.org/packages/extra/x86_64/mercurial", - "visit_type": "arch", - "extra_loader_arguments": { - "artifacts": [ + ], + "arch_metadata": [ { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-4.8.2-1-x86_64.pkg.tar.xz", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "4.8.2-1", - "length": 4000000, - "filename": "mercurial-4.8.2-1-x86_64.pkg.tar.xz", "last_modified": "2019-01-15T20:31:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-4.9-1-x86_64.pkg.tar.xz", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "4.9-1", - "length": 4000000, - "filename": "mercurial-4.9-1-x86_64.pkg.tar.xz", "last_modified": "2019-02-12T06:15:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-4.9.1-1-x86_64.pkg.tar.xz", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "4.9.1-1", - "length": 4000000, - "filename": "mercurial-4.9.1-1-x86_64.pkg.tar.xz", "last_modified": "2019-03-30T17:40:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.0-1-x86_64.pkg.tar.xz", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.0-1", - "length": 4000000, - "filename": "mercurial-5.0-1-x86_64.pkg.tar.xz", "last_modified": "2019-05-10T08:44:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.0.1-1-x86_64.pkg.tar.xz", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.0.1-1", - "length": 4000000, - "filename": "mercurial-5.0.1-1-x86_64.pkg.tar.xz", "last_modified": "2019-06-10T18:05:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.0.2-1-x86_64.pkg.tar.xz", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.0.2-1", - "length": 4000000, - "filename": "mercurial-5.0.2-1-x86_64.pkg.tar.xz", "last_modified": "2019-07-10T04:58:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.1-1-x86_64.pkg.tar.xz", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.1-1", - "length": 4000000, - "filename": "mercurial-5.1-1-x86_64.pkg.tar.xz", "last_modified": "2019-08-17T19:58:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.1.2-1-x86_64.pkg.tar.xz", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.1.2-1", - "length": 4000000, - "filename": "mercurial-5.1.2-1-x86_64.pkg.tar.xz", "last_modified": "2019-10-08T08:38:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.2-1-x86_64.pkg.tar.xz", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.2-1", - "length": 4000000, - "filename": "mercurial-5.2-1-x86_64.pkg.tar.xz", "last_modified": "2019-11-28T06:41:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.2.1-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.2.1-1", - "length": 4000000, - "filename": "mercurial-5.2.1-1-x86_64.pkg.tar.zst", "last_modified": "2020-01-06T12:35:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.2.2-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.2.2-1", - "length": 5000000, - "filename": "mercurial-5.2.2-1-x86_64.pkg.tar.zst", "last_modified": "2020-01-15T14:07:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.2.2-2-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.2.2-2", - "length": 4000000, - "filename": "mercurial-5.2.2-2-x86_64.pkg.tar.zst", "last_modified": "2020-01-30T20:05:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.3-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.3-1", - "length": 5000000, - "filename": "mercurial-5.3-1-x86_64.pkg.tar.zst", "last_modified": "2020-02-13T21:40:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.3.1-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.3.1-1", - "length": 4000000, - "filename": "mercurial-5.3.1-1-x86_64.pkg.tar.zst", "last_modified": "2020-03-07T23:58:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.3.2-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.3.2-1", - "length": 4000000, - "filename": "mercurial-5.3.2-1-x86_64.pkg.tar.zst", "last_modified": "2020-04-05T17:48:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.4-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.4-1", - "length": 5000000, - "filename": "mercurial-5.4-1-x86_64.pkg.tar.zst", "last_modified": "2020-05-10T17:19:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.4-2-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.4-2", - "length": 5000000, - "filename": "mercurial-5.4-2-x86_64.pkg.tar.zst", "last_modified": "2020-06-04T13:38:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.4.1-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.4.1-1", - "length": 5000000, - "filename": "mercurial-5.4.1-1-x86_64.pkg.tar.zst", "last_modified": "2020-06-06T12:28:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.4.2-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.4.2-1", - "length": 5000000, - "filename": "mercurial-5.4.2-1-x86_64.pkg.tar.zst", "last_modified": "2020-07-02T21:35:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.5-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.5-1", - "length": 5000000, - "filename": "mercurial-5.5-1-x86_64.pkg.tar.zst", "last_modified": "2020-08-05T10:39:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.5.1-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.5.1-1", - "length": 5000000, - "filename": "mercurial-5.5.1-1-x86_64.pkg.tar.zst", "last_modified": "2020-09-03T19:05:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.5.2-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.5.2-1", - "length": 5000000, - "filename": "mercurial-5.5.2-1-x86_64.pkg.tar.zst", "last_modified": "2020-10-07T20:05:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.6-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.6-1", - "length": 5000000, - "filename": "mercurial-5.6-1-x86_64.pkg.tar.zst", "last_modified": "2020-11-03T17:26:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.6-2-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.6-2", - "length": 5000000, - "filename": "mercurial-5.6-2-x86_64.pkg.tar.zst", "last_modified": "2020-11-09T16:54:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.6-3-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.6-3", - "length": 5000000, - "filename": "mercurial-5.6-3-x86_64.pkg.tar.zst", "last_modified": "2020-11-11T15:20:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.6.1-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.6.1-1", - "length": 5000000, - "filename": "mercurial-5.6.1-1-x86_64.pkg.tar.zst", "last_modified": "2020-12-05T12:29:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.7-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.7-1", - "length": 5000000, - "filename": "mercurial-5.7-1-x86_64.pkg.tar.zst", "last_modified": "2021-02-04T08:41:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.7.1-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.7.1-1", - "length": 5000000, - "filename": "mercurial-5.7.1-1-x86_64.pkg.tar.zst", "last_modified": "2021-03-11T07:51:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.8-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.8-1", - "length": 5000000, - "filename": "mercurial-5.8-1-x86_64.pkg.tar.zst", "last_modified": "2021-05-04T17:55:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.8-2-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.8-2", - "length": 5000000, - "filename": "mercurial-5.8-2-x86_64.pkg.tar.zst", "last_modified": "2021-05-08T22:08:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.8.1-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.8.1-1", - "length": 5000000, - "filename": "mercurial-5.8.1-1-x86_64.pkg.tar.zst", "last_modified": "2021-07-13T07:04:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.9.1-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.9.1-1", - "length": 5000000, - "filename": "mercurial-5.9.1-1-x86_64.pkg.tar.zst", "last_modified": "2021-09-01T12:48:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.9.1-2-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.9.1-2", - "length": 5000000, - "filename": "mercurial-5.9.1-2-x86_64.pkg.tar.zst", "last_modified": "2021-09-24T17:39:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.9.2-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.9.2-1", - "length": 5000000, - "filename": "mercurial-5.9.2-1-x86_64.pkg.tar.zst", "last_modified": "2021-10-07T21:52:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-5.9.3-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "5.9.3-1", - "length": 5000000, - "filename": "mercurial-5.9.3-1-x86_64.pkg.tar.zst", "last_modified": "2021-10-27T07:20:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-6.0-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "6.0-1", - "length": 5000000, - "filename": "mercurial-6.0-1-x86_64.pkg.tar.zst", "last_modified": "2021-11-25T17:10:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-6.0-2-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "6.0-2", - "length": 5000000, - "filename": "mercurial-6.0-2-x86_64.pkg.tar.zst", "last_modified": "2021-11-30T20:53:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-6.0-3-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "6.0-3", - "length": 5000000, - "filename": "mercurial-6.0-3-x86_64.pkg.tar.zst", "last_modified": "2021-12-02T12:06:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-6.0.1-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "6.0.1-1", - "length": 5000000, - "filename": "mercurial-6.0.1-1-x86_64.pkg.tar.zst", "last_modified": "2022-01-08T10:07:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-6.0.2-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "6.0.2-1", - "length": 5000000, - "filename": "mercurial-6.0.2-1-x86_64.pkg.tar.zst", "last_modified": "2022-02-03T13:28:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-6.0.3-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "6.0.3-1", - "length": 5000000, - "filename": "mercurial-6.0.3-1-x86_64.pkg.tar.zst", "last_modified": "2022-02-23T20:50:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-6.1-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "6.1-1", - "length": 5000000, - "filename": "mercurial-6.1-1-x86_64.pkg.tar.zst", "last_modified": "2022-03-03T18:06:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-6.1-2-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "6.1-2", - "length": 5000000, - "filename": "mercurial-6.1-2-x86_64.pkg.tar.zst", "last_modified": "2022-03-04T08:37:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-6.1.1-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "6.1.1-1", - "length": 5000000, - "filename": "mercurial-6.1.1-1-x86_64.pkg.tar.zst", "last_modified": "2022-04-07T18:26:00", }, { - "url": "https://archive.archlinux.org/packages/m/mercurial/mercurial-6.1.2-1-x86_64.pkg.tar.zst", # noqa: B950 "arch": "x86_64", "repo": "extra", "name": "mercurial", "version": "6.1.2-1", - "length": 5000000, - "filename": "mercurial-6.1.2-1-x86_64.pkg.tar.zst", "last_modified": "2022-05-07T11:03:00", }, - ] + ], }, }, { "url": "https://archlinux.org/packages/community/any/python-hglib", "visit_type": "arch", "extra_loader_arguments": { "artifacts": [ { "url": "https://archive.archlinux.org/packages/p/python-hglib/python-hglib-2.6.1-3-any.pkg.tar.xz", # noqa: B950 + "version": "2.6.1-3", + "length": 40000, + "filename": "python-hglib-2.6.1-3-any.pkg.tar.xz", + }, + { + "url": "https://archive.archlinux.org/packages/p/python-hglib/python-hglib-2.6.2-1-any.pkg.tar.zst", # noqa: B950 + "version": "2.6.2-1", + "length": 43000, + "filename": "python-hglib-2.6.2-1-any.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/p/python-hglib/python-hglib-2.6.2-2-any.pkg.tar.zst", # noqa: B950 + "version": "2.6.2-2", + "length": 43000, + "filename": "python-hglib-2.6.2-2-any.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/p/python-hglib/python-hglib-2.6.2-3-any.pkg.tar.zst", # noqa: B950 + "version": "2.6.2-3", + "length": 43000, + "filename": "python-hglib-2.6.2-3-any.pkg.tar.zst", + }, + { + "url": "https://archive.archlinux.org/packages/p/python-hglib/python-hglib-2.6.2-4-any.pkg.tar.zst", # noqa: B950 + "version": "2.6.2-4", + "length": 43000, + "filename": "python-hglib-2.6.2-4-any.pkg.tar.zst", + }, + ], + "arch_metadata": [ + { "arch": "any", "repo": "community", "name": "python-hglib", "version": "2.6.1-3", - "length": 40000, - "filename": "python-hglib-2.6.1-3-any.pkg.tar.xz", "last_modified": "2019-11-06T14:08:00", }, { - "url": "https://archive.archlinux.org/packages/p/python-hglib/python-hglib-2.6.2-1-any.pkg.tar.zst", # noqa: B950 "arch": "any", "repo": "community", "name": "python-hglib", "version": "2.6.2-1", - "length": 43000, - "filename": "python-hglib-2.6.2-1-any.pkg.tar.zst", "last_modified": "2020-11-19T22:29:00", }, { - "url": "https://archive.archlinux.org/packages/p/python-hglib/python-hglib-2.6.2-2-any.pkg.tar.zst", # noqa: B950 "arch": "any", "repo": "community", "name": "python-hglib", "version": "2.6.2-2", - "length": 43000, - "filename": "python-hglib-2.6.2-2-any.pkg.tar.zst", "last_modified": "2020-11-19T22:31:00", }, { - "url": "https://archive.archlinux.org/packages/p/python-hglib/python-hglib-2.6.2-3-any.pkg.tar.zst", # noqa: B950 "arch": "any", "repo": "community", "name": "python-hglib", "version": "2.6.2-3", - "length": 43000, - "filename": "python-hglib-2.6.2-3-any.pkg.tar.zst", "last_modified": "2020-11-19T22:35:00", }, { - "url": "https://archive.archlinux.org/packages/p/python-hglib/python-hglib-2.6.2-4-any.pkg.tar.zst", # noqa: B950 "arch": "any", "repo": "community", "name": "python-hglib", "version": "2.6.2-4", - "length": 43000, - "filename": "python-hglib-2.6.2-4-any.pkg.tar.zst", "last_modified": "2021-12-03T00:44:00", }, - ] + ], }, }, { "url": "https://archlinuxarm.org/packages/aarch64/gzip", "visit_type": "arch", "extra_loader_arguments": { "artifacts": [ { "url": "https://uk.mirror.archlinuxarm.org/aarch64/core/gzip-1.12-1-aarch64.pkg.tar.xz", # noqa: B950 + "length": 79640, + "version": "1.12-1", + "filename": "gzip-1.12-1-aarch64.pkg.tar.xz", + } + ], + "arch_metadata": [ + { "arch": "aarch64", "name": "gzip", "repo": "core", - "length": 79640, "version": "1.12-1", - "filename": "gzip-1.12-1-aarch64.pkg.tar.xz", "last_modified": "2022-04-07T21:08:14", } - ] + ], }, }, { "url": "https://archlinuxarm.org/packages/aarch64/mercurial", "visit_type": "arch", "extra_loader_arguments": { "artifacts": [ { "url": "https://uk.mirror.archlinuxarm.org/aarch64/extra/mercurial-6.1.3-1-aarch64.pkg.tar.xz", # noqa: B950 + "length": 4931228, + "version": "6.1.3-1", + "filename": "mercurial-6.1.3-1-aarch64.pkg.tar.xz", + } + ], + "arch_metadata": [ + { "arch": "aarch64", "name": "mercurial", "repo": "extra", - "length": 4931228, "version": "6.1.3-1", - "filename": "mercurial-6.1.3-1-aarch64.pkg.tar.xz", "last_modified": "2022-06-02T22:15:18", } - ] + ], }, }, { "url": "https://archlinuxarm.org/packages/any/python-hglib", "visit_type": "arch", "extra_loader_arguments": { "artifacts": [ { "url": "https://uk.mirror.archlinuxarm.org/any/community/python-hglib-2.6.2-4-any.pkg.tar.xz", # noqa: B950 + "length": 41432, + "version": "2.6.2-4", + "filename": "python-hglib-2.6.2-4-any.pkg.tar.xz", + } + ], + "arch_metadata": [ + { "arch": "any", "name": "python-hglib", "repo": "community", - "length": 41432, "version": "2.6.2-4", - "filename": "python-hglib-2.6.2-4-any.pkg.tar.xz", "last_modified": "2021-12-14T16:22:20", } - ] + ], }, }, { "url": "https://archlinuxarm.org/packages/armv7h/gzip", "visit_type": "arch", "extra_loader_arguments": { "artifacts": [ { "url": "https://uk.mirror.archlinuxarm.org/armv7h/core/gzip-1.12-1-armv7h.pkg.tar.xz", # noqa: B950 + "length": 78468, + "version": "1.12-1", + "filename": "gzip-1.12-1-armv7h.pkg.tar.xz", + } + ], + "arch_metadata": [ + { "arch": "armv7h", "name": "gzip", "repo": "core", - "length": 78468, "version": "1.12-1", - "filename": "gzip-1.12-1-armv7h.pkg.tar.xz", "last_modified": "2022-04-07T21:08:35", } - ] + ], }, }, { "url": "https://archlinuxarm.org/packages/armv7h/mercurial", "visit_type": "arch", "extra_loader_arguments": { "artifacts": [ { "url": "https://uk.mirror.archlinuxarm.org/armv7h/extra/mercurial-6.1.3-1-armv7h.pkg.tar.xz", # noqa: B950 + "length": 4897816, + "version": "6.1.3-1", + "filename": "mercurial-6.1.3-1-armv7h.pkg.tar.xz", + } + ], + "arch_metadata": [ + { "arch": "armv7h", "name": "mercurial", "repo": "extra", - "length": 4897816, "version": "6.1.3-1", - "filename": "mercurial-6.1.3-1-armv7h.pkg.tar.xz", "last_modified": "2022-06-02T22:13:08", } - ] + ], }, }, ] def test_arch_lister(datadir, requests_mock_datadir, swh_scheduler): lister = ArchLister(scheduler=swh_scheduler) res = lister.run() assert res.pages == 9 assert res.origins == 12 expected_origins_sorted = sorted(expected_origins, key=lambda x: x.get("url")) scheduler_origins_sorted = sorted( swh_scheduler.get_listed_origins(lister.lister_obj.id).results, key=lambda x: x.url, ) assert len(scheduler_origins_sorted) == len(expected_origins_sorted) assert [ ( scheduled.visit_type, scheduled.url, scheduled.extra_loader_arguments.get("artifacts"), + scheduled.extra_loader_arguments.get("arch_metadata"), ) for scheduled in scheduler_origins_sorted ] == [ ( "arch", expected.get("url"), expected.get("extra_loader_arguments").get("artifacts"), + expected.get("extra_loader_arguments").get("arch_metadata"), ) for expected in expected_origins_sorted ]