diff options
author | 2009-12-21 10:38:58 +0000 | |
---|---|---|
committer | 2009-12-21 10:38:58 +0000 | |
commit | 64412b1b11a38d05818fb37e621ccbf217a33747 (patch) | |
tree | 9650fac7e577f42bd69923b7dcc40b0ec648ebce | |
parent | When using ptrace(), death of the traced process should always send (diff) | |
download | wireguard-openbsd-64412b1b11a38d05818fb37e621ccbf217a33747.tar.xz wireguard-openbsd-64412b1b11a38d05818fb37e621ccbf217a33747.zip |
much simpler SIG{INFO} handling: create a status object in state and
update it when needed. Install a SIG{INFO} handler at start that will do
what's needed.
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/AddDelete.pm | 78 | ||||
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/ProgressMeter.pm | 14 | ||||
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/SharedItems.pm | 6 | ||||
-rw-r--r-- | usr.sbin/pkg_add/pkg_add | 53 | ||||
-rw-r--r-- | usr.sbin/pkg_add/pkg_delete | 21 |
5 files changed, 110 insertions, 62 deletions
diff --git a/usr.sbin/pkg_add/OpenBSD/AddDelete.pm b/usr.sbin/pkg_add/OpenBSD/AddDelete.pm index 7f571fa8f8e..90844010398 100644 --- a/usr.sbin/pkg_add/OpenBSD/AddDelete.pm +++ b/usr.sbin/pkg_add/OpenBSD/AddDelete.pm @@ -1,5 +1,5 @@ # ex:ts=8 sw=4: -# $OpenBSD: AddDelete.pm,v 1.9 2009/12/20 22:38:45 espie Exp $ +# $OpenBSD: AddDelete.pm,v 1.10 2009/12/21 10:38:58 espie Exp $ # # Copyright (c) 2007-2009 Marc Espie <espie@openbsd.org> # @@ -43,7 +43,6 @@ sub handle_options $opt_L = OpenBSD::Paths->localbase unless defined $opt_L; - $state->{recorder} = OpenBSD::SharedItemsRecorder->new; if ($opt_s) { $opt_n = 1; } @@ -218,6 +217,8 @@ sub init $self->{l} = OpenBSD::Log->new; $self->{vstat} = OpenBSD::MyStat->new; $self->{progressmeter} = bless {}, "OpenBSD::StubProgress"; + $self->{status} = OpenBSD::Status->new; + $self->{recorder} = OpenBSD::SharedItemsRecorder->new; $self->{v} = 0; } @@ -228,6 +229,21 @@ sub ntogo return $self->progress->ntogo($self->todo, $offset); } +sub ntogo_string +{ + my ($self, $todo, $offset) = @_; + + $todo //= 0; + $offset //= 0; + $todo += $offset; + + if ($todo > 0) { + return " ($todo to go)"; + } else { + return ""; + } +} + sub verbose { return shift->{v}; @@ -354,6 +370,64 @@ sub confirm return OpenBSD::Interactive::confirm($prompt, $default); } +sub status +{ + my $self = shift; + + return $self->{status}; +} + +# the object that gets displayed during status updates +package OpenBSD::Status; + +sub print +{ + my ($self, $state) = @_; + + my $what = $self->{what}; + $what //= "Processing"; + my $object; + if (defined $self->{object}) { + $object = $self->{object}; + } elsif (defined $self->{set}) { + $object = $self->{set}->print; + } else { + $object = "Parameters"; + } + + $state->say($what." ".$object.$state->ntogo_string($state->todo)); +} + +sub set +{ + my ($self, $set) = @_; + delete $self->{object}; + $self->{set} = $set; + return $self; +} + +sub object +{ + my ($self, $object) = @_; + delete $self->{set}; + $self->{object} = $object; + return $self; +} + +sub what +{ + my ($self, $what) = @_; + $self->{what} = $what; + return $self; +} + +sub new +{ + my $class = shift; + + bless {}, $class; +} + # stub class when no actual progressmeter that still prints out. package OpenBSD::StubProgress; sub clear {} diff --git a/usr.sbin/pkg_add/OpenBSD/ProgressMeter.pm b/usr.sbin/pkg_add/OpenBSD/ProgressMeter.pm index 0614bbe3c40..7b0ac0ec239 100644 --- a/usr.sbin/pkg_add/OpenBSD/ProgressMeter.pm +++ b/usr.sbin/pkg_add/OpenBSD/ProgressMeter.pm @@ -1,5 +1,5 @@ # ex:ts=8 sw=4: -# $OpenBSD: ProgressMeter.pm,v 1.26 2009/12/19 14:21:14 espie Exp $ +# $OpenBSD: ProgressMeter.pm,v 1.27 2009/12/21 10:38:58 espie Exp $ # # Copyright (c) 2004-2007 Marc Espie <espie@openbsd.org> # @@ -161,17 +161,7 @@ sub next sub ntogo { - my ($self, $todo, $offset) = @_; - - $todo //= 0; - $offset //= 0; - $todo += $offset; - - if ($todo > 0) { - return " ($todo to go)"; - } else { - return ""; - } + &OpenBSD::UI::ntogo_string; } 1; diff --git a/usr.sbin/pkg_add/OpenBSD/SharedItems.pm b/usr.sbin/pkg_add/OpenBSD/SharedItems.pm index 010e989c7b0..6827f035e72 100644 --- a/usr.sbin/pkg_add/OpenBSD/SharedItems.pm +++ b/usr.sbin/pkg_add/OpenBSD/SharedItems.pm @@ -1,5 +1,5 @@ # ex:ts=8 sw=4: -# $OpenBSD: SharedItems.pm,v 1.18 2009/12/20 22:38:45 espie Exp $ +# $OpenBSD: SharedItems.pm,v 1.19 2009/12/21 10:38:58 espie Exp $ # # Copyright (c) 2004-2006 Marc Espie <espie@openbsd.org> # @@ -31,7 +31,7 @@ sub find_items_in_installed_packages my $db = OpenBSD::SharedItemsRecorder->new; my @list = installed_packages(); my $total = @list; - local $SIG{INFO} = sub { $state->say("Read shared items"); }; + $state->status->what("Read")->object("Shared items"); $state->progress->set_header("Read shared items"); my $done = 0; for my $e (@list) { @@ -52,7 +52,7 @@ sub cleanup my $remaining = find_items_in_installed_packages($state); $state->progress->clear; - local $SIG{INFO} = sub { $state->say("Clean shared items"); }; + $state->status->what("Clean"); $state->progress->set_header("Clean shared items"); my $h = $recorder->{dirs}; my $u = $recorder->{users}; diff --git a/usr.sbin/pkg_add/pkg_add b/usr.sbin/pkg_add/pkg_add index 070d4d1b247..624c260232e 100644 --- a/usr.sbin/pkg_add/pkg_add +++ b/usr.sbin/pkg_add/pkg_add @@ -1,7 +1,7 @@ #! /usr/bin/perl # ex:ts=8 sw=4: -# $OpenBSD: pkg_add,v 1.431 2009/12/20 22:38:45 espie Exp $ +# $OpenBSD: pkg_add,v 1.432 2009/12/21 10:38:58 espie Exp $ # # Copyright (c) 2003-2009 Marc Espie <espie@openbsd.org> # @@ -95,8 +95,9 @@ sub deptree_header sub set_name_from_handle { - my ($state, $h) = @_; - $state->log->set_context($h->pkgname); + my ($state, $h, $extra) = @_; + $extra //= ''; + $state->log->set_context($extra.$h->pkgname); } sub updater @@ -163,35 +164,6 @@ sub setup_header } } -sub status -{ - my ($set, $state, $handle, $info) = @_; - - my $header = $state->deptree_header($set); - if (defined $handle) { - $header .= $handle->pkgname; - } else { - $header .= $set->print; - } - if (defined $info) { - $header.=" ($info)"; - } - - if (!defined $info) { - $header = "Adding $header"; - } - if (defined $state->{lastheader} && - $header eq $state->{lastheader}) { - return; - } - $state->{lastheader} = $header; - $header .= "(pretending) " if $state->{not}; - if ($state->{do_faked}) { - $header .= " under ".$state->{destdir}; - } - $state->say($header); -} - sub complete { my ($set, $state) = @_; @@ -438,7 +410,7 @@ sub really_add my $errors = 0; for my $handle ($set->newer) { - $state->set_name_from_handle($handle); + $state->set_name_from_handle($handle, '+'); my $plist = $handle->plist; if ($plist->is_signed) { if ($state->{defines}->{nosig}) { @@ -461,8 +433,12 @@ sub really_add } } + if ($state->{not}) { + $state->status->what("Pretending to add"); + } else { + $state->status->what("Adding"); + } $set->setup_header($state); - local $SIG{'INFO'} = sub { $set->status($state); }; # XXX in `combined' updates, some dependencies may remove extra # packages, so we do a double-take on the list of packages we @@ -522,7 +498,7 @@ sub really_add my $o = shift; $set->setup_header($state, $o, "deleting"); my $oldname = $o->pkgname; - $state->set_name_from_handle($o); + $state->set_name_from_handle($o, '-'); require OpenBSD::Delete; try { OpenBSD::Delete::delete_plist($o->plist, $state); @@ -555,7 +531,7 @@ sub really_add my $plist = $handle->plist; $set->setup_header($state, $handle, $replacing ? "installing" : undef); - $state->set_name_from_handle($handle); + $state->set_name_from_handle($handle, '+'); try { OpenBSD::Add::perform_installation($handle, $state); @@ -642,6 +618,7 @@ sub install_set if ($handle->plist->has('arch')) { unless ($handle->plist->{arch}->check($state->{arch})) { + $state->set_name_from_handle($handle); $state->log($handle->pkgname, " is not for the right architecture"); if (!$defines{arch}) { $set->cleanup(OpenBSD::Handle::CANT_INSTALL); @@ -718,6 +695,7 @@ handle_options('aqchruUzl:A:P:Q:', {}, 'pkg_add [-acIinqrUuvxz] [-A arch] [-B pkg-destdir] [-F keywords]', '[-L localbase] [-l file] [-P type] [-Q quick-destdir] pkg-name [...]'); +local $SIG{'INFO'} = sub { $state->status->print($state); }; $state->{do_faked} = 0; $state->{arch} = $opt_A; @@ -890,8 +868,9 @@ sub { $state->tracker->todo(@todo2); # This is the actual very small loop that adds all packages while (my $set = shift @todo2) { - local $SIG{INFO} = sub { $state->say($set->print, "(", $state->todo, ")"); }; $state->progress->set_header("Looking for packages"); + + $state->status->what->set($set); unshift(@todo2, install_set($set, $state)); eval { $state->quirks->tweak_list(\@todo2, $state); diff --git a/usr.sbin/pkg_add/pkg_delete b/usr.sbin/pkg_add/pkg_delete index f7096450c14..8a6ec09bed5 100644 --- a/usr.sbin/pkg_add/pkg_delete +++ b/usr.sbin/pkg_add/pkg_delete @@ -1,6 +1,6 @@ #!/usr/bin/perl # ex:ts=8 sw=4: -# $OpenBSD: pkg_delete,v 1.130 2009/12/20 22:38:45 espie Exp $ +# $OpenBSD: pkg_delete,v 1.131 2009/12/21 10:38:58 espie Exp $ # # Copyright (c) 2003-2007 Marc Espie <espie@openbsd.org> # @@ -44,6 +44,7 @@ our ($opt_d, $opt_p, $opt_i); handle_options('chixDdnqpS:', {}, 'pkg_delete [-cIinqvx] [-B pkg-destdir] [-F keywords] pkg-name [...]'); +local $SIG{'INFO'} = sub { $state->status->print($state); }; $opt_B = $ENV{'PKG_DESTDIR'} unless defined $opt_B; $opt_B = '' unless defined $opt_B; if ($opt_B ne '') { @@ -128,6 +129,11 @@ sub { # and finally, handle the removal do { $removed = 0; + if ($state->{not}) { + $state->status->what("Pretending to delete"); + } else { + $state->status->what("Deleting"); + } DELETE: for my $pkgname (@todo) { $state->{todo} = scalar @todo - scalar keys %done; next if $done{$pkgname}; @@ -152,17 +158,16 @@ sub { } } my $info = sub { - $state->say($state->{not} ? - "Pretending to delete " : - "Deleting ", - $pkgname); }; - local $SIG{'INFO'} = $info; + $state->status->object($pkgname); if (!$state->progress->set_header($pkgname)) { - &$info if $state->verbose; + $state->say($state->{not} ? + "Pretending to delete " : + "Deleting ", + $pkgname) if $state->verbose; } - $state->log->set_context($pkgname); + $state->log->set_context('-'.$pkgname); OpenBSD::Delete::delete_package($pkgname, $state); $done{$pkgname} = 1; $removed++; |