From bb58beecdada9e15c6f270029981d857256532dd Mon Sep 17 00:00:00 2001 From: John McQuah Date: Mon, 25 Sep 2023 17:48:02 +0000 Subject: [PATCH] prt-auf: add support for rmlog_on_uninst --- scripts/prt-auf | 53 +++++++++++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/scripts/prt-auf b/scripts/prt-auf index 23ca34e..9506486 100755 --- a/scripts/prt-auf +++ b/scripts/prt-auf @@ -24,7 +24,7 @@ my %opkg = ( margs=>"", aargs=>"", rargs=>"", run_scripts=>"no", removecommand=>"/usr/bin/pkgrm", addcommand=>"/usr/bin/pkgadd", makecommand=>"/usr/bin/pkgmk", nolock=>0, test=>"no", group=>"no" ); my %olog = ( write => "disabled", mode => "overwrite", rm_on_success => "yes", - file => "/var/log/pkgbuild/%n.log" ); + rm_on_uninst => "no", file => "/var/log/pkgbuild/%n.log" ); my $prtconf = "/etc/prt-get.conf"; ################### Process the given command ######################### @@ -289,6 +289,7 @@ while () { chomp; $olog{write} = $1 if /^writelog\s+(enabled|disabled)/; $olog{mode} = $1 if /^logmode\s+(append|overwrite)/; $olog{rm_on_success} = $1 if /^rmlog_on_success\s+(no|yes)/; + $olog{rm_on_uninst} = $1 if /^rmlog_on_uninst\s+(no|yes)/; $olog{file} = $1 if /^logfile\s+(.*)\s*(#|$)/; $prtcache = $1 if /^cachefile\s+(.*)\s*(#|$)/; } @@ -380,7 +381,7 @@ sub printf_ports { $p = (split /\//, $pp)[-1]; @pstats = get_pkgfile_fields($pp,"all"); $pstats[12] = ($LOCKED{$p}) ? "yes" : "no"; - $pstats[13] = (grep /^$p$/, keys %V_INST) ? "yes" : "no"; + $pstats[13] = ($V_INST{$p}) ? "yes" : "no"; ($pstats[13] eq "no") or ($V_INST{$p} eq $V_REPO{$p}) or $pstats[13] = "diff"; printf STDOUT $outputf, @pstats[@pos]; } @@ -507,17 +508,25 @@ sub uninstall { my @targets = grep { defined $V_INST{$_} } @_; my @rubbish = grep { ! defined $V_INST{$_} } @_; foreach my $r (@rubbish) { print "$r not installed; ignoring.\n"; } - my %removed = map { $_ => 0 } @targets; + my @removed; if (($altroot ne "") and ($opkg{rargs} !~ m/(-r|--root)/)) { $opkg{rargs} .= " -r $altroot"; } foreach my $t (@targets) { ($opkg{test} eq "no") ? system($PKGRM,$opkg{rargs},$t) : print "$PKGRM $opkg{rargs} $t\n"; - $removed{$t}=1 if ($?>>8 == 0); + next if ($?>>8 != 0); + push @removed, $t; if (($LOCKED{$t}) and ($opkg{test} eq "no")) { port_unlock($t); } + if ($olog{rm_on_uninst} eq "yes") { + my $log_t = $olog{file}; + my $rt = $1 if ($V_INST{$t} =~ m/.*-([0-9]+)$/); + my $vt = $V_INST{$t}; $vt =~ s/-$rt//; + my %pvars = ( '%n' => $t, '%v' => $vt, '%r' => $rt ); + $log_t =~ s/(%n|%v|%r)/$pvars{$1}/g; + (! -f $log_t) or unlink $log_t or print "failed to delete $log_t\n"; + } } - my @successes = grep { $removed{$_} == 1 } keys %removed; - return \@successes; + return \@removed; } sub port_lock { @@ -580,7 +589,7 @@ sub list_ports { map { $not_orphans{$_} = 1 } split(/[ ,]+/, $SOFTDEPS{$port}); } } - @found = grep { $not_orphans{$_} eq 0 } keys %V_INST; + @found = grep { $not_orphans{$_} == 0 } keys %V_INST; } elsif (($subset eq "dependent") and ($odepends{recursive}==0)) { @found = grep { " $DEPENDS{$_} " =~ / $sseed / } @searchspace; if ($odepends{soft}==1) { @@ -602,11 +611,11 @@ sub list_ports { our $ind; our %seen; our @lineage; my @fosters=(); my @children=(); $ind = ($V_INST{$seed}) ? "[i]" : "[ ]"; print "$ind $seed\n" if ($odepends{tree}==1); - $seen{$seed} = 1; + $seen{$sseed} = 1; if ($direction eq "rev") { @children = grep { " $DEPENDS{$_} " =~ / $sseed / } @searchspace; - } elsif ($DEPENDS{$sseed}) { - @children = split /[ ,]+/, $DEPENDS{$sseed}; + } elsif ($DEPENDS{$seed}) { + @children = split /[ ,]+/, $DEPENDS{$seed}; } if (($odepends{soft}==1) and ($direction eq "rev")) { @@ -684,7 +693,7 @@ sub port_diff { # find differences between the pkgdb and the repo if ( (! $V_INST{$q}) and (! who_aliased_to($q)) ) { push @outfile, "$q: not installed"; $retval++; } elsif ($V_INST{$q}) { - push @outfile, "$q: version $V_INST{$q}" if ($dtype eq "current"); + push @outfile, "$V_INST{$q}" if ($dtype eq "current"); push @outfile, "$q is installed." if ($dtype eq "isinst"); } else { push @outfile, "$q is provided by package ".who_aliased_to($q) @@ -758,7 +767,7 @@ sub up_inst { # returns scalar references to six arrays my @requested=@_; my @sortedList; my @targets; my %pdirs; my %builtpkg; my %mkcmd; my %addcmd; my $rs_cmd; my %logfile; my %pvars; my $status; my %ok; my @missing; my %not_ok; my %ok_pre; my %ok_post; my @ok_readme=(); - my $PKGMK=$opkg{makecommand}; my $PKGADD=$opkg{addcommand}; + my $ord=0; my $PKGMK=$opkg{makecommand}; my $PKGADD=$opkg{addcommand}; my $SH=$opkg{scriptcommand}; # resolve dependencies unless --nodeps was given, @@ -811,7 +820,7 @@ sub up_inst { # returns scalar references to six arrays if ($opkg{test} eq "yes") { print("*** prt-auf: test mode\n\n"); print "-- Packages changed\n"; } - # build each package, unless already installed + # build each package BUILDLOG: foreach my $t (@targets) { if ( (-f $builtpkg{$t}) and ($opkg{$t} !~ /-f/) and ((-M $builtpkg{$t}) > (-M "$pdirs{$t}/Pkgfile")) ) { @@ -826,28 +835,29 @@ sub up_inst { # returns scalar references to six arrays (! -f "$pdirs{$t}/post-install") or print(" (+post)"); print("\n"); next BUILDLOG; + } else { + $ord += 1; } if (("$opkg{run_scripts} $opkg{pre_install}" =~ /yes/) and (-f "$altroot$pdirs{$t}/pre-install")) { $rs_cmd="$SH $pdirs{$t}/pre-install"; ($altroot eq "") or $rs_cmd = "chroot $altroot $rs_cmd"; - (system("$rs_cmd")==0) ? $ok_pre{$t} = 1 : delete $ok_pre{$t}; + (system("$rs_cmd")==0) ? $ok_pre{$t} = $ord : delete $ok_pre{$t}; } - chdir("$pdirs{$t}") or $not_ok{$t} = 1; + chdir("$pdirs{$t}") or $not_ok{$t} = $ord; if ($not_ok{$t}) { next BUILDLOG; } $status = (system("$mkcmd{$t}")==0); if ($logfile{$t}) { ( ($mkcmd{$t} =~ /skipped build/) or ! log_failure($logfile{$t}) ) ? - $ok{$t} = 1 : $not_ok{$t} = 1; + $ok{$t} = $ord : $not_ok{$t} = $ord; } else { - ($status) ? $ok{$t} = 1 : $not_ok{$t} = 1; + ($status) ? $ok{$t} = $ord : $not_ok{$t} = $ord; } if ($ok{$t}) { $addcmd{$t} =~ s/ -u / / if (! $V_INST{$t}); if (system("$addcmd{$t}")==0) { - $ok{$t} = 1; push (@ok_readme, $t) if (-f "README"); } else { - $not_ok{$t} = 1; delete $ok{$t}; + $not_ok{$t} = $ord; delete $ok{$t}; } unlink($logfile{$t}) if ( ($logfile{$t}) and ($olog{rm_on_success} eq "yes") ); @@ -857,7 +867,7 @@ sub up_inst { # returns scalar references to six arrays if (($ok{$t}) and ("$opkg{run_scripts} $opkg{post_install}" =~ /yes/) and (-f "$altroot$pdirs{$t}/post-install")) { $rs_cmd="$SH post-install"; ($altroot eq "") or $rs_cmd="chroot $altroot $rs_cmd"; - (system("$rs_cmd")==0) ? $ok_post{$t}=1 : delete $ok_post{$t}; + (system("$rs_cmd")==0) ? $ok_post{$t}=$ord : delete $ok_post{$t}; } last if (($opkg{group} eq "yes") and ($not_ok{$t})); } @@ -869,7 +879,8 @@ sub up_inst { # returns scalar references to six arrays close(FH); return $failed; } - my @ok = keys %ok; my @not_ok = keys %not_ok; + my @ok = sort { return ($ok{$a} < $ok{$b}) ? -1 : 1; } keys %ok; + my @not_ok = sort { return ($not_ok{$a} < $not_ok{$b}) ? -1 : 1; } keys %not_ok; return \@ok, \%ok_pre, \%ok_post, \@ok_readme, \@not_ok, \@missing; }