On Mon, 09 Jul 2018 18:37:04 -0400, Eli Schwartz wrote:
On 07/09/2018 01:32 PM, Luke Shumaker wrote:
AFAICT, with expac there's no way to do a query like:
dbquery core x86_64 \ "(pkg.base or pkg.name) == '$pkgbase'" \ ...
Well, it's not as complex as you think. No matter what tool is used, we'd need to manually reassemble the repository layout vs. pacman's system DBPath. (Whether by doing database loading by hand with low-level APIs or by providing a custom pacman.conf). But:
Checking a specific arch is as simple as using setarch first.
The part I'm concerned about is being able to do is filtering by pkgbase rather than pkgname; setting up repository layout is simple enough either way (it just comes down to setting DBpath (and RootDir?) to a temporary directory and setting `$repo.Server=file://$FTP_BASE/$repo/os/$arch`).
Current versions of makepkg set the pkgbase regardless of whether the pkgname is different (with the rationale that there's no reason not to, and it makes parsing package metadata easier), so we can add this to the long list of other reasons we want to do a complete rebuild of every package (cf. reproducible builds, PIE, and more).
Ok, but even if/when all packages have pkgbase, expac still doesn't have the ability to search based on pkgbase instead of pkgname, does it?
And expac supports "repo/package" -- or printing the repo and filtering that while parsing the filename or what-have-you. That being said, I've discussed on our development IRC channel, having expac's -Ss mode to support 'repo/.*' filtering which might be useful too...
I guess we could have it print all packages for the repo, include pkgbase in the output, then filter that with grep... -- Happy hacking, ~ Luke Shumaker