[Distutils] Requirent specifiers specified? :)

Phillip J. Eby pje at telecommunity.com
Thu Jun 22 22:52:27 CEST 2006


At 04:12 PM 6/22/2006 -0400, Jim Fulton wrote:
>I also think that the complete algorithm, including the state machine
>needs to be documented clearly.  Your original paragraph really
>isn't adequate.

Only if you try to use it to interpret requirements that contain redundant 
information.


>Maybe, you should document simple cases and refer to the full
>complex model for non-trivial cases.

If by non-trivial you mean cases that contain redundant information, sure.

For example "<1,<2" is redundant, since "<1" implies "<2".  Only the "<1" 
is needed, and my assumption was that a person will not write "<1, <2" 
unless there is also a ">" or ">=" somewhere between the "<1" and the "<2" 
(in ascending version order).  Similarly, the only time multiple conditions 
for one version make sense is to have "<1,>1", but this is the same as 
"<>1" or "!=1".

If you simply write the shortest possible requirement that expresses the 
version range(s) and exceptions that you do or don't want, you will find 
that the 1-paragraph explanation will provide you with an easy and 
unambiguous interpretation: scanning left to right, see if the actual 
version is in one of the allowed ranges, or matches a point condition.

Translating this specification into an algorithm is tedious, but 
essentially a mechanical matter.  All of your questions, on the other hand, 
have been assuming that there is a simple algorithm that translates into 
something not necessarily simple to explain.  But it's the explanation 
that's simple, not the algorithm.  Version specifications are just ranges 
and exceptions.

Admittedly, it would have been better if Requirement had been designed to 
reject redundant input -- if only because it would've kept you from then 
asking what various redundant things *mean*.  ;-)  For the most part 
though, the implementation just ignores anything redundant.



More information about the Distutils-SIG mailing list