Add prerelease filter support in verify

This commit is contained in:
taoky 2024-08-06 18:23:07 +08:00
parent 33e9746a46
commit 6751bc93cb
2 changed files with 12 additions and 7 deletions

View File

@ -82,7 +82,7 @@ Verify command could be used if you believe that something is wrong (inconsisten
2. remove packages NOT in remote (with consideration of `--exclude`) 2. remove packages NOT in remote (with consideration of `--exclude`)
3. make sure all local indexes are valid, and (if --sync-packages) have valid local package files 3. make sure all local indexes are valid, and (if --sync-packages) have valid local package files
(`--prerelease-exclude` would be ignored) (`--prerelease-exclude` would used only for packages that requires updating)
4. delete unreferenced files in `packages` folder 4. delete unreferenced files in `packages` folder
```shell ```shell

View File

@ -249,6 +249,7 @@ class PyPI:
self.session = create_requests_session() self.session = create_requests_session()
def list_packages_with_serial(self) -> dict[str, int]: def list_packages_with_serial(self) -> dict[str, int]:
logger.info("Calling list_packages_with_serial() RPC, this requires some time...")
return self.xmlrpc_client.list_packages_with_serial() # type: ignore return self.xmlrpc_client.list_packages_with_serial() # type: ignore
def get_package_metadata(self, package_name: str) -> dict: def get_package_metadata(self, package_name: str) -> dict:
@ -444,7 +445,9 @@ class SyncBase:
def fetch_remote_versions(self) -> dict[str, int]: def fetch_remote_versions(self) -> dict[str, int]:
raise NotImplementedError raise NotImplementedError
def check_and_update(self, package_names: list[str]) -> None: def check_and_update(
self, package_names: list[str], prerelease_excludes: list[re.Pattern[str]]
) -> None:
to_update = [] to_update = []
for package_name in tqdm(package_names, desc="Checking consistency"): for package_name in tqdm(package_names, desc="Checking consistency"):
package_jsonmeta_path = self.jsonmeta_dir / package_name package_jsonmeta_path = self.jsonmeta_dir / package_name
@ -481,7 +484,7 @@ class SyncBase:
if should_update: if should_update:
logger.info("add %s as it's missing packages", package_name) logger.info("add %s as it's missing packages", package_name)
to_update.append(package_name) to_update.append(package_name)
self.parallel_update(to_update, []) self.parallel_update(to_update, prerelease_excludes)
def parallel_update( def parallel_update(
self, package_names: list, prerelease_excludes: list[re.Pattern[str]] self, package_names: list, prerelease_excludes: list[re.Pattern[str]]
@ -613,9 +616,11 @@ def download(
return True, resp return True, resp
def filter_release_from_meta(meta: dict, patterns: list[re.Pattern[str]]) -> None: def filter_release_from_meta(
meta: dict, patterns: list[re.Pattern[str]] | tuple[re.Pattern[str], ...]
) -> None:
for release in list(meta["releases"].keys()): for release in list(meta["releases"].keys()):
if match_patterns(release, PRERELEASE_PATTERNS): if match_patterns(release, patterns):
del meta["releases"][release] del meta["releases"][release]
@ -966,7 +971,7 @@ def verify(
basedir: Path = ctx.obj["basedir"] basedir: Path = ctx.obj["basedir"]
local_db: LocalVersionKV = ctx.obj["local_db"] local_db: LocalVersionKV = ctx.obj["local_db"]
excludes = exclude_to_excludes(exclude) excludes = exclude_to_excludes(exclude)
# prerelease_excludes = exclude_to_excludes(prerelease_exclude) prerelease_excludes = exclude_to_excludes(prerelease_exclude)
syncer = get_syncer(basedir, local_db, sync_packages, shadowmire_upstream) syncer = get_syncer(basedir, local_db, sync_packages, shadowmire_upstream)
logger.info("remove packages NOT in local db") logger.info("remove packages NOT in local db")
@ -985,7 +990,7 @@ def verify(
logger.info( logger.info(
"make sure all local indexes are valid, and (if --sync-packages) have valid local package files" "make sure all local indexes are valid, and (if --sync-packages) have valid local package files"
) )
syncer.check_and_update(list(local_names)) syncer.check_and_update(list(local_names), prerelease_excludes)
syncer.finalize() syncer.finalize()
logger.info("delete unreferenced files in `packages` folder") logger.info("delete unreferenced files in `packages` folder")