Use-case: some people want to branch automated installs based on whether pkg_add -u (or some other variation) actually did something.
As usual we ignore quirks. This adds a flag (-DSYSPATCH_LIKE) which governs the behavior. Code is fairly self-explanatory. I had no better idea for the flag name so far, suggestions welcome. Index: OpenBSD/PkgAdd.pm =================================================================== RCS file: /cvs/src/usr.sbin/pkg_add/OpenBSD/PkgAdd.pm,v retrieving revision 1.142 diff -u -p -r1.142 PkgAdd.pm --- OpenBSD/PkgAdd.pm 27 Jun 2023 11:11:46 -0000 1.142 +++ OpenBSD/PkgAdd.pm 2 Jul 2023 13:49:03 -0000 @@ -861,6 +861,9 @@ sub really_add($set, $state) if ($state->{received}) { die "interrupted"; } + if (!$set->{quirks}) { + $state->{did_something} = 1; + } } sub newer_has_errors($set, $state) @@ -1163,6 +1166,8 @@ sub process_parameters($self, $state) { my $add_hints = $state->{fuzzy} ? "add_hints" : "add_hints2"; + $state->{did_something} = 0; + # match against a list if ($state->{pkglist}) { open my $f, '<', $state->{pkglist} or @@ -1178,7 +1183,6 @@ sub process_parameters($self, $state) # update existing stuff if ($state->{update}) { - if (@ARGV == 0) { @ARGV = sort(installed_packages()); } @@ -1239,6 +1243,16 @@ sub main($self, $state) $self->process_setlist($state); } +sub exit_code($self, $state) +{ + my $rc = $self->SUPER::exit_code($state); + if ($rc == 0 && $state->defines("SYSPATCH_LIKE")) { + if (!$state->{did_something}) { + $rc = 2; + } + } + return $rc; +} sub new_state($self, $cmd) {