| Message ID | 20260507061845.1460893-3-Qi.Chen@windriver.com |
|---|---|
| State | New |
| Headers | show |
| Series | [bitbake-devel,V2,1/5] fetch2/git.py: add filter_regex parameter to latest_versionstring | expand |
On Thu, 7 May 2026 at 08:19, <Qi.Chen@windriver.com> wrote: > versions = [(0, i["num"], "") for i in json_data["versions"]] > + if filter_regex > + filtered_versions = [] > + for v in versions: > + if re.match(filter_regex, v[1]): > + filtered_versions.append(v) > + versions = filtered_versions This could also use list comprehension: if filter_regex: versions = [v for v in versions if re.match(filter_regex, v[1])] You can even form the list with a single statement by setting the condition like this: ... if not filter_regex or re.match... but doing list comprehension twice is perhaps more clear. Alex
Thanks for the suggestion. I'll use list comprehension to make codes cleaner. Regards, Qi -----Original Message----- From: Alexander Kanavin <alex.kanavin@gmail.com> Sent: Thursday, May 7, 2026 6:52 PM To: Chen, Qi <Qi.Chen@windriver.com> Cc: bitbake-devel@lists.openembedded.org; MacLeod, Randy <Randy.MacLeod@windriver.com> Subject: Re: [bitbake-devel][PATCH V2 3/5] fetch2/crate.py: add filter_regex parameter to latest_versionstring On Thu, 7 May 2026 at 08:19, <Qi.Chen@windriver.com> wrote: > versions = [(0, i["num"], "") for i in json_data["versions"]] > + if filter_regex > + filtered_versions = [] > + for v in versions: > + if re.match(filter_regex, v[1]): > + filtered_versions.append(v) > + versions = filtered_versions This could also use list comprehension: if filter_regex: versions = [v for v in versions if re.match(filter_regex, v[1])] You can even form the list with a single statement by setting the condition like this: ... if not filter_regex or re.match... but doing list comprehension twice is perhaps more clear. Alex
diff --git a/lib/bb/fetch2/crate.py b/lib/bb/fetch2/crate.py index b89817ab9..1127fa802 100644 --- a/lib/bb/fetch2/crate.py +++ b/lib/bb/fetch2/crate.py @@ -14,6 +14,7 @@ import hashlib import json import os import subprocess +import re import bb from bb.fetch2 import logger, subprocess_setup, UnpackError from bb.fetch2.wget import Wget @@ -155,18 +156,26 @@ class Crate(Wget): with open(mdpath, "w") as f: json.dump(metadata, f) - def latest_versionstring(self, ud, d): + def latest_versionstring(self, ud, d, filter_regex=None): """ Return the latest version available when versionsurl is the [name]/versions URL. """ from functools import cmp_to_key json_data = json.loads(self._fetch_index(ud.versionsurl, ud, d)) versions = [(0, i["num"], "") for i in json_data["versions"]] + if filter_regex: + filtered_versions = [] + for v in versions: + if re.match(filter_regex, v[1]): + filtered_versions.append(v) + versions = filtered_versions versions = sorted(versions, key=cmp_to_key(bb.utils.vercmp)) + if versions: + return (versions[-1][1], "") + else: + return ('', '') - return (versions[-1][1], "") - - def latest_versionstring_from_index(self, ud, d): + def latest_versionstring_from_index(self, ud, d, filter_regex=None): """ Return the latest version available when versionsurl is a Cargo index file. @@ -180,5 +189,15 @@ class Crate(Wget): data = json.loads(line) versions.append((0, data["vers"], "")) + if filter_regex: + filtered_versions = [] + for v in versions: + if re.match(filter_regex, v[1]): + filtered_versions.append(v) + versions = filtered_versions + versions = sorted(versions, key=cmp_to_key(bb.utils.vercmp)) - return (versions[-1][1], "") + if versions: + return (versions[-1][1], "") + else: + return ('', '')