summary refs log tree commit diff
path: root/pkgs/build-support/vm/rpm
diff options
context:
space:
mode:
authorRob Vermaas <rob.vermaas@gmail.com>2011-12-27 12:56:07 +0000
committerRob Vermaas <rob.vermaas@gmail.com>2011-12-27 12:56:07 +0000
commita8785e7b7237c8a9789f40c21ae262622d56d075 (patch)
tree76c61e688e733b7e800aa52474faab81af2bdc69 /pkgs/build-support/vm/rpm
parent2ae07a853fbd2664b260f9353621983140a40886 (diff)
downloadnixlib-a8785e7b7237c8a9789f40c21ae262622d56d075.tar
nixlib-a8785e7b7237c8a9789f40c21ae262622d56d075.tar.gz
nixlib-a8785e7b7237c8a9789f40c21ae262622d56d075.tar.bz2
nixlib-a8785e7b7237c8a9789f40c21ae262622d56d075.tar.lz
nixlib-a8785e7b7237c8a9789f40c21ae262622d56d075.tar.xz
nixlib-a8785e7b7237c8a9789f40c21ae262622d56d075.tar.zst
nixlib-a8785e7b7237c8a9789f40c21ae262622d56d075.zip
use simple version compare in stead of timestamps to determine newer package
svn path=/nixpkgs/trunk/; revision=31108
Diffstat (limited to 'pkgs/build-support/vm/rpm')
-rw-r--r--pkgs/build-support/vm/rpm/rpm-closure.pl42
1 files changed, 41 insertions, 1 deletions
diff --git a/pkgs/build-support/vm/rpm/rpm-closure.pl b/pkgs/build-support/vm/rpm/rpm-closure.pl
index 5efc162784ac..2ef59dcbdef3 100644
--- a/pkgs/build-support/vm/rpm/rpm-closure.pl
+++ b/pkgs/build-support/vm/rpm/rpm-closure.pl
@@ -1,5 +1,6 @@
 use strict;
 use XML::Simple;
+use List::Util qw(min);
 
 my @packagesFiles = ();
 my @urlPrefixes = ();
@@ -13,6 +14,44 @@ while(-f $ARGV[0]) {
     push(@urlPrefixes, $urlPrefix);
 }
 
+
+sub rpmvercmp {
+    my ($version1, $version2) = @_;
+    my @vercmps1 = split /\./, $version1;
+    my @vercmps2 = split /\./, $version2;
+    my $l1 = scalar(@vercmps1);
+    my $l2 = scalar(@vercmps2);
+    my $l = min($l1, $l2);
+
+    for(my $i=0; $i<$l; $i++) {
+        my $v1 = $vercmps1[$i];
+        my $v2 = $vercmps2[$i];
+
+        if($v1 =~ /^[0-9]*$/ && $v2 =~ /^[0-9]*$/) {
+	    if ( int($v1) > int($v2) ) {
+		return 1;
+	    }
+	    elsif ( int($v1) < int($v2) ) {
+		return -1;
+	    }
+	} else {
+	    if ( $v1 gt $v2 ) {
+		return 1;
+	    }
+	    elsif ( $v1 lt $v2 ) {
+		return -1;
+	    }
+	}
+    }
+    if($l1 == $l2) {
+        return 0;
+    } elsif ($l1 > $l2) {
+        return 1;
+    } elsif ($l1 < $l2) {
+        return -1;
+    }
+}
+
 my @toplevelPkgs = @ARGV;
 
 my @archs = split ' ', ($ENV{'archs'} or "");
@@ -36,7 +75,8 @@ for (my $i = 0; $i < scalar(@packagesFiles); $i++) {
         if (defined $pkgs{$pkg->{name}}) {
             my $earlierPkg = $pkgs{$pkg->{name}};
             print STDERR "WARNING: duplicate occurrence of package $pkg->{name}\n";
-            if ($earlierPkg->{'time'}->{file} <= $pkg->{'time'}->{file}) {
+            #   <version epoch="0" ver="1.28.0" rel="2.el6"/>
+            if (rpmvercmp($pkg->{'version'}->{ver}, $earlierPkg->{'version'}->{ver}) >= 0) {
                 print STDERR "WARNING: replaced package $pkg->{name} with newer one\n";
                 $pkg->{urlPrefix} = $urlPrefixes[$i];
                 $pkgs{$pkg->{name}} = $pkg;