From owner-freebsd-ports Wed Mar 28 13:20:21 2001 Delivered-To: freebsd-ports@freebsd.org Received: from heechee.tobez.org (254.adsl0.ryv.worldonline.dk [213.237.10.254]) by hub.freebsd.org (Postfix) with ESMTP id 34D8B37B71A; Wed, 28 Mar 2001 13:20:12 -0800 (PST) (envelope-from tobez@tobez.org) Received: by heechee.tobez.org (Postfix, from userid 1001) id 0F4E6550E; Wed, 28 Mar 2001 23:19:57 +0200 (CEST) Date: Wed, 28 Mar 2001 23:19:56 +0200 From: Anton Berezin To: "Bruce A. Mah" Cc: freebsd-ports@freebsd.org, knu@freebsd.org Subject: Re: pkg_version comparison routine Message-ID: <20010328231956.B34676@heechee.tobez.org> Mail-Followup-To: Anton Berezin , "Bruce A. Mah" , freebsd-ports@freebsd.org, knu@freebsd.org References: <200103280237.f2S2bUP02277@bmah-freebsd-0.cisco.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: <200103280237.f2S2bUP02277@bmah-freebsd-0.cisco.com>; from bmah@freebsd.org on Tue, Mar 27, 2001 at 06:37:30PM -0800 Sender: owner-freebsd-ports@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org On Tue, Mar 27, 2001 at 06:37:30PM -0800, Bruce A. Mah wrote: > I'm going to revisit an issue long overdue...the fact that the > algorithm used by pkg_version(1) for comparing versions doesn't work > in all the cases specified by the Porter's Handbook. knu tried to get > my attention on this issue a number of months ago, even going so far > as to submit some patches to fix this problem. Unfortunately I > dropped the ball on this, and I'm sure he's understandably annoyed at > me. We not just steal a little snippet from devel/p5-Sort-Versions? I believe it handles most insane possibilities. sub versions { my(@A) = ($::a =~ /(\.|\d+|[^\.\d]+)/g); my(@B) = ($::b =~ /(\.|\d+|[^\.\d]+)/g); my($A,$B); while(@A and @B) { $A=shift @A; $B=shift @B; if($A eq "." and $B eq ".") { next; } elsif( $A eq "." ) { return -1; } elsif( $B eq "." ) { return 1; } elsif($A =~ /^\d+$/ and $B =~ /^\d+$/) { return $A <=> $B if $A <=> $B; } else { $A = uc $A; $B = uc $B; return $A cmp $B if $A cmp $B; } } @A <=> @B; } Cheers, +Anton. -- May the tuna salad be with you. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-ports" in the body of the message