From 1b6b9fb133b7f0e16b725a199a81003100cd65a0 Mon Sep 17 00:00:00 2001 From: Francois Pons Date: Sun, 3 Sep 2000 17:18:35 +0000 Subject: *** empty log message *** --- rpmtools.pm | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'rpmtools.pm') diff --git a/rpmtools.pm b/rpmtools.pm index 6ccb303..280e899 100644 --- a/rpmtools.pm +++ b/rpmtools.pm @@ -251,9 +251,8 @@ sub relocate_depslist { #- is multiply defined and this should be fixed. #- first correct info hash, then a second pass on depslist #- is required to relocate its entries. - my $cmp_version = compare_version($_->{version}, $params->{info}{$_->{name}}); - if ($cmp_version > 0 || $cmp_version == 0 && - compare_version($_->{release}, $params->{info}{$_->{name}}) > 0) { + my $cmp_version = version_compare($_->{version}, $params->{info}{$_->{name}}); + if ($cmp_version > 0 || $cmp_version == 0 && version_compare($_->{release}, $params->{info}{$_->{name}}) > 0) { $params->{info}{$_->{name}} = $_; ++$relocated_entries; } @@ -261,8 +260,7 @@ sub relocate_depslist { } if ($relocated_entries) { - my $n = scalar(@{$params->{depslist}}) - 1; - for (0..$n) { + for (0 .. scalar(@{$params->{depslist}}) - 1) { my $pkg = $params->{depslist}[$_]; $params->{depslist}[$_] = $params->{info}{$pkg->{name}}; } @@ -388,4 +386,15 @@ sub write_compss { 1; } +#- compare a version string. +sub version_compare { + my ($a, $b) = @_; + local $_; + + while ($a || $b) { + my ($sb, $sa) = map { $1 if $a =~ /^\W*\d/ ? s/^\W*0*(\d+)// : s/^\W*(\D+)// } ($b, $a); + $_ = length($sa) cmp length($sb) || $sa cmp $sb and return $_; + } +} + 1; -- cgit v1.2.1