public inbox for gentoo-dev@lists.gentoo.org
 help / color / mirror / Atom feed
From: Martin Schlemmer <azarah@gentoo.org>
To: Gentoo-Dev <gentoo-dev@gentoo.org>
Subject: Re: [gentoo-dev] Possible portage 1.7.7 bug??
Date: 16 Dec 2001 13:19:47 +0200	[thread overview]
Message-ID: <1008501591.28704.7.camel@nosferatu.lan> (raw)
In-Reply-To: <20011215015245.A55484@enteract.com>


[-- Attachment #1.1: Type: text/plain, Size: 1115 bytes --]

On Sat, 2001-12-15 at 09:52, Terry Chan wrote:
> Hi,
> 
> When using portage 1.7.7 try this to test for a possible bug
> in deciding latest versions of package names again:
> 
> emerge net-misc/openssh
> 
> Portage chooses openssh-3.0_p1-r6, but there are at least two other
> ebuilds that are greater than this, namely openssh-3.0.1_p1 and
> openssh-3.0.2_p1
> 
> openssh is not in package.mask, so I don't think that is part of this
> problem.
> 
> Is this a real bug?  Am I interpreting the ebuild names incorrectly?
> 

Hi

It is a small bug in portage (been there some time now),
but since portage2 is in the works, Daniel decided not to
hack broken code with even uglier hacks.

The openssh thing we fixed with removing the old ebuilds
(emerge --clean rsync sould update it).

Otherwise you could try this *cough* unsupported *cough*
patch which I made some time ago.  Please note that portage2
will fix this, and with cool regexp will be much faster and
saner.


Greetings,
-- 

Martin Schlemmer
Gentoo Linux Developer, Desktop Team Developer
Cape Town, South Africa


[-- Attachment #1.2: portage-ebuild-version.patch --]
[-- Type: text/plain, Size: 3603 bytes --]

--- 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)<len(val2):
+			myrange=len(val1)
+		else:
+			myrange=len(val2)
+		for x in range(myrange):
+				mynewval=string.split(val1[x],"_")
+				if len(mynewval)==2:
+					changed1=1
+					val1[x]="."+mynewval[0]+".0_"+mynewval[1]
+				
+				mynewval=string.split(val2[x],"_")
+				if len(mynewval)==2:
+					changed2=1
+					val2[x]="."+mynewval[0]+".0_"+mynewval[1]
+	
+	# the previous function split each 'digit', so add these
+	# to the main version string (sorda, dont know how to explain)
+	if changed1==1:
+		val1=string.join(val1)
+		val1=string.split(val1,'.')
+		for x in val1[1:]:
+			x="."+x
+	if changed2==1:
+		val2=string.join(val2)
+		val2=string.split(val2,'.')
+		for x in val2[1:]:
+			x="."+x
+
 	if len(val2)<len(val1):
 		for x in range(0,len(val1)-len(val2)):
 			val2.append("0")
 	elif len(val1)<len(val2):
 		for x in range(0,len(val2)-len(val1)):
 			val1.append("0")
+
+	# somewhere spaces gets added, so remove these
+	for x in range(0,len(val1)):
+		val1[x]=string.strip(val1[x])
+	for x in range(0,len(val2)):
+		val2[x]=string.strip(val2[x])
+
 	#The above code will extend version numbers out so they
 	#have the same number of digits.
 	myval1=[]

[-- Attachment #2: Type: application/pgp-signature, Size: 232 bytes --]

      reply	other threads:[~2001-12-16 11:21 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-12-15  7:52 [gentoo-dev] Possible portage 1.7.7 bug?? Terry Chan
2001-12-16 11:19 ` Martin Schlemmer [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1008501591.28704.7.camel@nosferatu.lan \
    --to=azarah@gentoo.org \
    --cc=gentoo-dev@gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox