OpenPKG CVS Repository
http://cvs.openpkg.org/
____________________________________________________________________________
Server: cvs.openpkg.org Name: Michael van Elst
Root: /e/openpkg/cvs Email: [EMAIL PROTECTED]
Module: openpkg-re Date: 13-Nov-2002 12:05:00
Branch: HEAD Handle: 2002111311050000
Modified files:
openpkg-re openpkg-build
Log:
filter out non-upgrades
Summary:
Revision Changes Path
1.11 +51 -14 openpkg-re/openpkg-build
____________________________________________________________________________
Index: openpkg-re/openpkg-build
============================================================
$ cvs diff -u -r1.10 -r1.11 openpkg-build
--- openpkg-re/openpkg-build 13 Nov 2002 10:10:04 -0000 1.10
+++ openpkg-re/openpkg-build 13 Nov 2002 11:05:00 -0000 1.11
@@ -38,7 +38,7 @@
if (open(FH, "< $ENV{'HOME'}/.openpkg-build.rc")) {
while (<FH>) {
- if (my($opt,$val) = /^\-([Rfru])\s*(.*?)\s*$/) {
+ if (my($opt,$val) = /^\-([RfruU])\s*(.*?)\s*$/) {
$val = 1 unless defined $val;
eval "\$opt_$opt = '$val';";
} else {
@@ -442,8 +442,8 @@
#
# there can be multiple sources for a target release
#
-sub chose_source ($@) {
- my($name, $vmap, @vers) = @_;
+sub chose_source ($$@) {
+ my($env, $name, $vmap, @vers) = @_;
my($version,$recs,$rec);
return unless @vers;
@@ -461,7 +461,11 @@
}
die "ERROR: ambigous dependency\n";
} else {
- $rec = $recs->[0];
+ if ($env->{upgrade}) {
+ $rec = $recs->[-1];
+ } else {
+ $rec = $recs->[0];
+ }
print "# source for $name is ".vsn($rec)."\n";
}
@@ -516,6 +520,19 @@
}
#
+# test wether target could be upgraded
+#
+sub target_newer ($$) {
+ my($target, $map) = @_;
+ my($vs) = vs($target);
+ my($vmap) = $map->{$target->{name}};
+
+ return 1 unless $vmap;
+
+ return !grep { vcmp($vs, $_) <= 0; } keys %$vmap;
+}
+
+#
# check wether installed package matches
# build options
#
@@ -598,7 +615,7 @@
return ($b->{$vers[0]}->[0], 1);
}
- return (chose_source($name, $r, get_versions($r, $cond)), 0);
+ return (chose_source($env, $name, $r, get_versions($r, $cond)), 0);
}
@@ -613,12 +630,11 @@
if (target_exists($target, $env->{installed})) {
if (target_suitable($target, $env->{with})) {
- if (!$env->{upgrade}) {
+ unless ($env->{upgrade} && target_newer($target, $env->{installed})) {
print "# $target->{name} is already installed\n";
return;
- } else {
- print "# forced upgrading $target->{name}\n";
}
+ print "# forced upgrading $target->{name}\n";
} else {
print "# rebuilding $target->{name}\n";
}
@@ -678,7 +694,7 @@
sub build_list ($$) {
my($pattern, $env) = @_;
my(@goals,@targets,@keeps,$bonly,$t);
- my($name,$r,@vers);
+ my($name,$r,$i,@vers);
my(@todo);
if ($pattern eq 'REFRESH') {
@@ -698,14 +714,35 @@
#
- # chose maximum releases for goals
+ # chose sources for goals from repository
#
foreach $name (@todo) {
- $r = $env->{repository}->{$name};
- @vers = get_versions($r, sub { 1; });
- next unless @vers;
- $t = chose_source($name, $r, @vers);
+ $t = undef;
+
+ #
+ # keeping installed packages for goals is ugly
+ # -> we currently do not support installed source RPMs
+ # -> source RPMs might already have expired from repository
+ #
+ # consequence:
+ # -> goals are always upgraded to repository versions
+ #
+ #unless ($env->{upgrade}) {
+ # $i = $env->{installed}->{$name};
+ # if (@vers = get_versions($i, sub { 1; })) {
+ # $t = chose_source($env, $name, $i, @vers);
+ # }
+ #}
+
+ unless ($t) {
+ $r = $env->{repository}->{$name};
+ if (@vers = get_versions($r, sub { 1; })) {
+ $t = chose_source($env, $name, $r, @vers);
+ }
+ }
+
die "FATAL: no known source found for '$name'\n" unless $t;
+
warn_about_options($t, $env->{with});
push(@goals, $t);
}
______________________________________________________________________
The OpenPKG Project www.openpkg.org
CVS Repository Commit List [EMAIL PROTECTED]