Nick Coghlan
Hmm, you're right. So maybe it makes sense to declare that rather than be a particular kind of clause, a direct reference is instead an alternative to the entire version specifier system. That way it wouldn't allow composition with other clauses at all.
Another way to look at this is: the purpose of XXX in a requirement
'dist (XXX)' is to identify a specific version of "dist" to operate on. This
can happen in two ways:
* XXX is a direct reference - it identifies the version via URL, and no
matching of any kind is required - that's the version required, plain and
simple. If the resource is obtainable, then it's used, else it leads to an
exception when an attempt to actually use it is made. In this case, the
reason for constraining the form of the URL to a specific versioned
source_url or wheel URL is twofold:
(a) Repeatability (not possible with a generic "latest version" URL).
(b) The ability to get the version represented by the URL, without doing any
downloading, e.g. to see if a compatible version is already installed, or
perhaps to see if it leads to any conflicts.
* XXX is a set of version constraints which is used when querying indexes to
find the most recent version which matches the constraints.
According to this view, distlib does not need to provide specific support for
direct references (beyond what is already provided for secure downloads, wheels
etc.) - a direct reference is treated exactly the same as a single clause
"(==