summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorespie <espie@openbsd.org>2009-12-21 10:38:58 +0000
committerespie <espie@openbsd.org>2009-12-21 10:38:58 +0000
commit64412b1b11a38d05818fb37e621ccbf217a33747 (patch)
tree9650fac7e577f42bd69923b7dcc40b0ec648ebce
parentWhen using ptrace(), death of the traced process should always send (diff)
downloadwireguard-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.pm78
-rw-r--r--usr.sbin/pkg_add/OpenBSD/ProgressMeter.pm14
-rw-r--r--usr.sbin/pkg_add/OpenBSD/SharedItems.pm6
-rw-r--r--usr.sbin/pkg_add/pkg_add53
-rw-r--r--usr.sbin/pkg_add/pkg_delete21
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++;