"; &open_execute_command(PKGGET, "$pkg_get -i $flag ".quotemeta($update), 2); while() { if (!/\s*\d+\%\s+\[/) { # Output everything except download lines print &html_escape($_); } if (/Installation of <(.*)> was successful/i) { push(@rv, $1); } elsif (/Installation of <(.*)> failed/i) { $failed = 1; } elsif (/dependency\s+(\S+)\s+.*not up to date/i) { # Needs a dependency .. so we will need to re-run! local $dep = $1; $update = join(" ", &unique( $dep, split(/\s+/, $update))); $retry = 1; } elsif (/you already have version/i) { $failed = 2; } } close(PKGGET); print "
\n"; } } while ($retry); # Cleanup fullout file ©_source_dest("/var/pkg-get/admin-old", "/var/pkg-get/admin"); if ($failed == 1) { print "$text{'csw_failed'}
\n"; return ( ); } elsif ($failed == 2) { print "$text{'csw_already'}
\n"; return ( ); } else { print "$text{'csw_ok'}
\n"; if (!@rv) { # If nothing failed, assume that everything worked @rv = split(/\s+/, $update); } return @rv; } } # update_system_available() # Returns a list of all available CSW packages sub update_system_available { local @rv; open(PKG, "$pkg_get -a |"); while() { s/\r|\n//g; s/#.*$//; next if (/^\s*WARNING:/); if (/^\s*(\S+)\s+(\S+)\s+(\d\S+)\s+([0-9\.]+)\s+(KB|MB|GB|B)/i) { # New pkgutil format push(@rv, { 'name' => $1, 'version' => $3, 'select' => "$1-$3" }); } elsif (/^\s*(\S+)\s+(\S+)/) { # Old pkg-get format push(@rv, { 'name' => $1, 'version' => $2, 'select' => "$1-$2" }); } } close(PKG); return sort { lc($a->{'name'}) cmp lc($b->{'name'}) } @rv; } 1;