Package Specifiers and Identifiers
Following up the new internal version class and !551 (merged), the package Atom class should also be redesigned.
In addition to internally moving to using a display
method instead of the various pre-generated display components (PN
, P
, PV
, etc., which will remain the stable way of accessing such information in the packaging environment), I think it would be beneficial to distinguish between package specifiers and package identifiers (ideally named more concisely).
Package Identifiers refer to a specific package version and are probably only present in package filenames, to internally refer to the package, and used to populate the P
, PN
, PV
, etc. fields mentioned above. These cannot include operators and always include the package version (and sometimes also the repository).
Package Specifiers refer to one or more package versions, and are used in dependency strings, on the command line, in package.use
and friends, etc. Strictly speaking these should always include the category and an operator if they refer to a version, but for compatibility purposes should be less strict in certain circumstances such as the user's configuration files and on the command line. Wildcards from !551 (merged) and eventually the entire version range format could be included.