On Jun 22, 2006, at 1:42 PM, Phillip J. Eby wrote:

> At 01:05 PM 6/22/2006 -0400, Jim Fulton wrote:
>
>> On Jun 22, 2006, at 12:49 PM, Phillip J. Eby wrote:
>>
>>> At 12:26 PM 6/22/2006 -0400, Jim Fulton wrote:
>>>> On Jun 21, 2006, at 5:11 PM, Phillip J. Eby wrote:
>>>>> """Requirement strings basically consist of a distribution  
>>>>> name, an
>>>>> optional list of "options" (more on this in a moment), and a
>>>>> comma- separated list of zero or more version conditions. Version
>>>>> conditions basically specify ranges of valid versions, using
>>>>> comparison operators. The version conditions you supply are sorted
>>>>> into ascending version order, and then scanned left to right until
>>>>> the package's version falls between a pair of > or >= and < or <=
>>>>> conditions, or exactly matches a == or != condition."""
>>>>
>>>> I don't think this is right. :)
>>>> ...
>>>> When scanning left to right, 1.9 matches !=1.1, so it should match
>>>> and,
>>>> since it is the highest version, it should be returned.  Either  
>>>> your
>>>> description
>>>> of the algorithm is incorrect or I'm misunderstanding it.
>>>
>>> You're missing the "exactly matches" part.  The relevant context
>>> is: "Until the package's version ... exactly matches a == or !=
>>> condition".  Perhaps making that "a == or != condition's version"
>>> would have been clearer, as that's what I meant by that phrase.
>>>
>>> Anyway, "1.9" does not exactly match the "1.1" in "!=1.1".
>>
>> Um, OK.  So I guess the idea is that we scan these things trying to
>> make a decision.
>> The decision is either match or not match.  Is that how I was  
>> supposed
>> to read the above quote?
>
> Um, no.  :)  The specification is:
>
> 1. "The version conditions you supply are sorted into ascending  
> version order"
>
> 2. "and then scanned left to right"  (from low to high version number)
>
> 3. "until the package's version"
>
> 3a. "falls between a pair of > or >= and < or <= conditions"
>
> 3b. "or exactly matches a == or != condition"
>
> In both #3a and #3b, we are saying that the package's version is  
> compared to the condition's version.  If the version is *between*  
> the version of a > or >= condition on the left, and the version of  
> a < or <= condition on the right, then it is accepted.  If the  
> version exactly matches the version of a == or != condition, then  
> it is either accepted (==) or rejected (!=).  If neither #3a nor  
> #3b happens, then we continue "scanning left to right" (per #2).

This is the clearest thing I have seen so far and matches what I was  
trying to say.

> I suspect that you will next come back and ask about this:
>
> >1.0, !=1.2, <2.0
>
> at which point I will remind you that #3a says nothing about the  
> pairs being adjacent.  :)

I'm not sure what you are trying to say.  I'm really trying to make  
sense of this.

I assume you are alluding to what I assume is the case that that  
there is an implicit
 >-infinity and <infinity, so the above example becomes:

   >-infinity, >1.0, !=1.2, <2.0, <infinity

Which isn't all that different from:

   >1.0, >2.0, <5.0, <6.0

so how is a case like this handled?  How should "fals between a pair  
of" be interpreted?
I would tend to expect innermost, otherwise:

   >1.0, <3.0, >5.0, <7.0

is ambiguous too.

I suggest that a more careful specification is needed.

Jim

--
Jim Fulton                      mailto:[EMAIL PROTECTED]                Python 
Powered!
CTO                             (540) 361-1714                  
http://www.python.org
Zope Corporation        http://www.zope.com             http://www.zope.org



_______________________________________________
Distutils-SIG maillist  -  [email protected]
http://mail.python.org/mailman/listinfo/distutils-sig

Reply via email to