--- portage.py.orig Sun Nov 18 13:36:52 2001 +++ portage.py Mon Nov 19 21:45:05 2001 @@ -226,6 +226,8 @@ # valid end of version components; integers specify offset from release version # pre=prerelease, p=patchlevel (should always be followed by an int), rc=release candidate # all but _p (where it is required) can be followed by an optional trailing integer +# +# NOTE: remember to update myendversion in relparse() if you update this endversion={"pre":-2,"p":0,"alpha":-4,"beta":-3,"rc":-1} @@ -766,6 +768,12 @@ def relparse(myver): "converts last version part into three components" + + # the .keys() function parses "p" before "pre", so check without "p" + # first, then check for "p" afterwards + # + # NOTE: do NOT add "p" to myendversion! + myendversion={"pre":-2,"alpha":-4,"beta":-3,"rc":-1} number=0 p1=0 p2=0 @@ -774,25 +782,36 @@ #an endversion number=string.atof(mynewver[0]) match=0 - for x in endversion.keys(): + for x in myendversion.keys(): elen=len(x) if mynewver[1][:elen] == x: match=1 - p1=endversion[x] + p1=myendversion[x] try: p2=string.atof(mynewver[1][elen:]) except: p2=0 break - if not match: - #normal number or number with letter at end - divider=len(myver)-1 - if myver[divider:] not in "1234567890": - #letter at end - p1=ord(myver[divider:]) - number=string.atof(myver[0:divider]) - else: - number=string.atof(myver) + if not match: + #look for _p? + matchp=0 + elen=1 + if mynewver[1][:elen] == "p": + matchp=1 + p1=0 + try: + p2=string.atof(mynewver[1][elen:]) + except: + p2=0 + if not matchp: + #normal number or number with letter at end + divider=len(myver)-1 + if myver[divider:] not in "1234567890": + #letter at end + p1=ord(myver[divider:]) + number=string.atof(myver[0:divider]) + else: + number=string.atof(myver) else: #normal number or number with letter at end divider=len(myver)-1 @@ -978,12 +997,55 @@ val2=string.split(val2[0],'.') for x in val2[1:]: x="."+x + + changed1=0 + changed2=0 + + # the '_' should be in the same 'digit', else comparing + # digit for diget fails and returns the wrong version as + # being the latest + if not len(val1)==len(val2): + if len(val1)