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]

Reply via email to