More specifically:

add an indirection to solving dependencies for pure pkg_delete, so that
we don't end up constructing full UpdateSets for no reason

Index: AddCreateDelete.pm
===================================================================
RCS file: /cvs/src/usr.sbin/pkg_add/OpenBSD/AddCreateDelete.pm,v
retrieving revision 1.43
diff -u -p -r1.43 AddCreateDelete.pm
--- AddCreateDelete.pm  27 Feb 2018 22:46:53 -0000      1.43
+++ AddCreateDelete.pm  10 Sep 2019 09:45:36 -0000
@@ -171,6 +171,13 @@ sub ntogo_string
            $self->f("");
 }
 
+sub solve_dependency
+{
+       my ($self, $solver, $dep, $package) = @_;
+       # full dependency solving with everything
+       return $solver->really_solve_dependency($self, $dep, $package);
+}
+
 package OpenBSD::AddCreateDelete;
 use OpenBSD::Error;
 
Index: PkgDelete.pm
===================================================================
RCS file: /cvs/src/usr.sbin/pkg_add/OpenBSD/PkgDelete.pm,v
retrieving revision 1.45
diff -u -p -r1.45 PkgDelete.pm
--- PkgDelete.pm        10 Jul 2018 10:37:59 -0000      1.45
+++ PkgDelete.pm        10 Sep 2019 09:45:36 -0000
@@ -131,6 +131,13 @@ sub deleteset_from_location
        return 
$self->deleteset->add_older(OpenBSD::Handle->from_location($location));
 }
 
+sub solve_dependency
+{
+       my ($self, $solver, $dep, $package) = @_;
+       # simpler dependency solving
+       return $solver->find_dep_in_installed($self, $dep);
+}
+
 package OpenBSD::DeleteSet;
 sub setup_header
 {
Index: Dependencies/SolverBase.pm
===================================================================
RCS file: /cvs/src/usr.sbin/pkg_add/OpenBSD/Dependencies/SolverBase.pm,v
retrieving revision 1.10
diff -u -p -r1.10 SolverBase.pm
--- Dependencies/SolverBase.pm  7 Jul 2018 06:25:53 -0000       1.10
+++ Dependencies/SolverBase.pm  10 Sep 2019 09:45:36 -0000
@@ -326,7 +326,8 @@ sub solve_dependency
                $state->say("No cache hit on #1", $dep->{pattern});
        }
 
-       $self->really_solve_dependency($state, $dep, $package);
+       # we need an indirection because deleting is simpler
+       $state->solve_dependency($self, $dep, $package);
 }
 
 sub solve_depends

Reply via email to