OpenPKG CVS Repository
  http://cvs.openpkg.org/
  ____________________________________________________________________________

  Server: cvs.openpkg.org                  Name:   Michael van Elst
  Root:   /e/openpkg/cvs                   Email:  [EMAIL PROTECTED]
  Module: openpkg-src openpkg-web          Date:   18-Feb-2003 17:20:36
  Branch: HEAD                             Handle: 2003021816203402

  Modified files:
    openpkg-src/openpkg-tool
                            openpkg-build.pl openpkg-tool.spec openpkg.pod
    openpkg-web             news.txt

  Log:
    allow downgrades using -e, clean up update decision code a bit

  Summary:
    Revision    Changes     Path
    1.56        +40 -14     openpkg-src/openpkg-tool/openpkg-build.pl
    1.38        +2  -2      openpkg-src/openpkg-tool/openpkg-tool.spec
    1.13        +6  -0      openpkg-src/openpkg-tool/openpkg.pod
    1.3349      +1  -0      openpkg-web/news.txt
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: openpkg-src/openpkg-tool/openpkg-build.pl
  ============================================================================
  $ cvs diff -u -r1.55 -r1.56 openpkg-build.pl
  --- openpkg-src/openpkg-tool/openpkg-build.pl 15 Feb 2003 08:53:59 -0000      1.55
  +++ openpkg-src/openpkg-tool/openpkg-build.pl 18 Feb 2003 16:20:36 -0000      1.56
  @@ -33,8 +33,8 @@
       $opt_R $opt_r $opt_f $opt_u $opt_U $opt_a $opt_A
       $opt_z $opt_Z $opt_P $opt_N $opt_E $opt_i $opt_D
       $opt_p $opt_q $opt_s $opt_S $opt_X $opt_M $opt_L
  -    $opt_W $opt_K/;
  -my $getopts = 'R:r:f:uUaAzZP:N:E:iD:p:qsSXMLWK';
  +    $opt_W $opt_K $opt_e/;
  +my $getopts = 'R:r:f:uUaAzZP:N:E:iD:p:qsSXMLWKe';
   getopts($getopts);
   
   ##########################################################################
  @@ -112,7 +112,7 @@
       close(FH);
   }
   
  -die "openpkg:build:USAGE: $0 [-R rpm] [-r repository] [-f index.rdf] 
[-uUzZiqsSXMLWK] [-P priv-cmd] [-N non-priv-cmd] [-p platform] [-Dwith ...] [-Ename 
...] ( [-aA] | patternlist )\n"
  +die "openpkg:build:USAGE: $0 [-R rpm] [-r repository] [-f index.rdf] 
[-uUzZiqsSXMLWKe] [-P priv-cmd] [-N non-priv-cmd] [-p platform] [-Dwith ...] [-Ename 
...] ( [-aA] | patternlist )\n"
       unless $#ARGV >= 0 || ($#ARGV == -1 && ($opt_a || $opt_A));
   
   ##########################################################################
  @@ -1248,16 +1248,41 @@
   }
   
   #
  -# test wether target could be upgraded
  +# determine wether target should be rebuild
   #
  -sub target_newer ($$) {
  -    my($target, $map) = @_;
  +sub target_better ($$$) {
  +    my($env, $target, $map) = @_;
       my($vs) = vs($target);
       my($vmap) = $map->{$target->{name}};
   
  -    return 1 unless $vmap;
  +    #
  +    # rebuild if target isn't installed
  +    #
  +    return 'new' unless $vmap;
  +
  +    #
  +    # always update GOALs
  +    #
  +    if ($target->{GOAL} && !grep { vcmp($vs, $_) <= 0; } keys %$vmap) {
  +        return 'goal';
  +    }
  +    #
  +    # if -e then
  +    # always update if installed version is different from repository
  +    #
  +    if ($env->{exact} && !grep { vcmp($vs, $_) == 0; } keys %$vmap) {
  +        return 'exact';
  +    }
  +    #
  +    # if -U then
  +    # always update if installed version is older than repository
  +    #
  +    if ($env->{upgrade} && !grep { vcmp($vs, $_) <= 0; } keys %$vmap) {
  +        return 'upgrade';
  +    }
   
  -    return !grep { vcmp($vs, $_) <= 0; } keys %$vmap;
  +    # keep installed target
  +    return;
   }
   
   #
  @@ -1366,8 +1391,7 @@
   
       $t = chose_source($env, $name, undef, $r, get_versions($r, $cond));
       if ($t) {
  -        if (!$tdef ||
  -            ($env->{upgrade} && target_newer($t, $env->{installed}))) {
  +        if (!$tdef || target_better($env, $t, $env->{installed})) {
               return ($t, 0);
           }
       }
  @@ -1385,7 +1409,7 @@
   sub make_dep ($$$$$$$) {
       my($who,$target,$depth,$env,$list,$blist,$clist) = @_;
       my($d,$k,%d,%k,$t,$old);
  -    my(@deps,$conflict);
  +    my(@deps,$conflict,$why);
   
       if (target_exists($target, $env->{built})) {
           print "# $target->{name} is already in list\n";
  @@ -1421,9 +1445,9 @@
           } elsif ($env->{zero}) {
               target_setstatus($target,'ZERO',1);
               print "# rebuilding $target->{name} (zero)\n";
  -        } elsif (target_newer($target, $env->{installed})) {
  -            target_setstatus($target,'UPGRADE',3);
  -            print "# rebuilding $target->{name} (upgrade)\n";
  +        } elsif ($why = target_better($env, $target, $env->{installed})) {
  +            target_setstatus($target,'UPDATE',3);
  +            print "# rebuilding $target->{name} ($why)\n";
           } elsif (!target_suitable($t, $env->{with})) {
               target_setstatus($target,'MISMATCH',2);
               print "# rebuilding $target->{name} (parameter mismatch)\n";
  @@ -1623,6 +1647,7 @@
   
           if ($t) {
               warn_about_options($t, $env->{with}, $env->{config});
  +            $t->{GOAL} = 1;
               push(@goals, $t);
           } else {
               if ($env->{status}) {
  @@ -2044,6 +2069,7 @@
       exclude    => \%exclude,
       upgrade    => ($opt_a || $opt_U),
       zero       => ($opt_z || $opt_Z),
  +    exact      => $opt_e,
       quick      => $opt_q,
       status     => ($opt_s || $opt_S),
       fatal      => [],
  @@ .
  patch -p0 <<'@@ .'
  Index: openpkg-src/openpkg-tool/openpkg-tool.spec
  ============================================================================
  $ cvs diff -u -r1.37 -r1.38 openpkg-tool.spec
  --- openpkg-src/openpkg-tool/openpkg-tool.spec        15 Feb 2003 08:54:00 -0000     
 1.37
  +++ openpkg-src/openpkg-tool/openpkg-tool.spec        18 Feb 2003 16:20:36 -0000     
 1.38
  @@ -32,8 +32,8 @@
   Distribution: OpenPKG [PLUS]
   Group:        Bootstrapping
   License:      GPL
  -Version:      20030215
  -Release:      20030215
  +Version:      20030218
  +Release:      20030218
   
   #   list of sources
   Source0:      openpkg.sh
  @@ .
  patch -p0 <<'@@ .'
  Index: openpkg-src/openpkg-tool/openpkg.pod
  ============================================================================
  $ cvs diff -u -r1.12 -r1.13 openpkg.pod
  --- openpkg-src/openpkg-tool/openpkg.pod      24 Jan 2003 09:57:54 -0000      1.12
  +++ openpkg-src/openpkg-tool/openpkg.pod      18 Feb 2003 16:20:36 -0000      1.13
  @@ -64,6 +64,7 @@
   [B<-W>]
   [B<-X>]
   [B<-K>]
  +[B<-e>]
   [B<-P> I<priv-cmd>]
   [B<-N> I<non-priv-cmd>]
   [B<-p> I<platform>]
  @@ -282,6 +283,11 @@
   =item B<-K>
   
   Keep packages that were installed temporarily during the build process.
  +
  +=item B<-e>
  +
  +Rebuild exact version from repository even when you have installed
  +a newer version from another repository.
   
   =item B<-P> I<priv-cmd>
   
  @@ .
  patch -p0 <<'@@ .'
  Index: openpkg-web/news.txt
  ============================================================================
  $ cvs diff -u -r1.3348 -r1.3349 news.txt
  --- openpkg-web/news.txt      18 Feb 2003 15:32:55 -0000      1.3348
  +++ openpkg-web/news.txt      18 Feb 2003 16:20:34 -0000      1.3349
  @@ -1,3 +1,4 @@
  +18-Feb-2003: Upgraded package: P<openpkg-tool-20030218-20030218>
   18-Feb-2003: Upgraded package: P<honeyd-0.5-20030218>
   18-Feb-2003: Upgraded package: P<libevent-0.6-20030218>
   18-Feb-2003: Upgraded package: P<graphviz-1.9-20030218>
  @@ .
______________________________________________________________________
The OpenPKG Project                                    www.openpkg.org
CVS Repository Commit List                     [EMAIL PROTECTED]

Reply via email to