-if ($cmd eq 'install' || $cmd eq 'erase' || $cmd eq 'up' || $cmd eq 'dup' || $cmd eq 'verify') {
- die("no package matched.\n") unless @jobs;
- for my $job (@jobs) {
- if ($cmd eq 'up') {
- if ($job->{'how'} == $solv::Job::SOLVER_SOLVABLE_ALL || grep {$_->isinstalled()} $job->solvables()) {
- $job->{'how'} |= $solv::Job::SOLVER_UPDATE;
- } else {
- $job->{'how'} |= $solv::Job::SOLVER_INSTALL;
- }
- } elsif ($cmd eq 'install') {
- $job->{'how'} |= $solv::Job::SOLVER_INSTALL;
- } elsif ($cmd eq 'erase') {
- $job->{'how'} |= $solv::Job::SOLVER_ERASE;
- } elsif ($cmd eq 'dup') {
- $job->{'how'} |= $solv::Job::SOLVER_DISTUPGRADE;
- } elsif ($cmd eq 'verify') {
- $job->{'how'} |= $solv::Job::SOLVER_VERIFY;
- }
- }
- my $solver;
- while (1) {
- $solver = $pool->Solver();
- $solver->set_flag($solv::Solver::SOLVER_FLAG_SPLITPROVIDES, 1);
- $solver->set_flag($solv::Solver::SOLVER_FLAG_ALLOW_UNINSTALL, 1) if $cmd eq 'erase';
- my @problems = $solver->solve(\@jobs);
- last unless @problems;
- for my $problem (@problems) {
- print "Problem $problem->{'id'}/".@problems.":\n";
- my $r = $problem->findproblemrule();
- my $ri = $r->info();
- print $ri->problemstr()."\n";
- my @solutions = $problem->solutions();
- for my $solution (@solutions) {
- print " Solution $solution->{'id'}:\n";
- for my $element ($solution->elements(1)) {
- print " - ".$element->str()."\n";
- }
- print "\n";
- }
- my $sol;
- while (1) {
- print "Please choose a solution: ";
- $sol = <STDIN>;
- chomp $sol;
- last if $sol eq 's' || $sol eq 'q' || ($sol =~ /^\d+$/ && $sol >= 1 && $sol <= @solutions);
- }
- next if $sol eq 's';
- exit(1) if $sol eq 'q';
- my $solution = $solutions[$sol - 1];
- for my $element ($solution->elements()) {
- my $newjob = $element->Job();
- if ($element->{'type'} == $solv::Solver::SOLVER_SOLUTION_JOB) {
- $jobs[$element->{'jobidx'}] = $newjob;
- } else {
- push @jobs, $newjob if $newjob && !grep {$_ == $newjob} @jobs;
- }
+# up magic, turn into install if nothing matches
+for my $job (@jobs) {
+ $job->{how} ^= $solv::Job::SOLVER_UPDATE ^ $solv::Job::SOLVER_INSTALL if $cmd eq 'up' && $job->isemptyupdate();
+}
+
+my $solver = $pool->Solver();
+$solver->set_flag($solv::Solver::SOLVER_FLAG_SPLITPROVIDES, 1);
+$solver->set_flag($solv::Solver::SOLVER_FLAG_ALLOW_UNINSTALL, 1) if $cmd eq 'erase';
+
+while (1) {
+ my @problems = $solver->solve(\@jobs);
+ last unless @problems;
+ for my $problem (@problems) {
+ print "Problem $problem->{id}/".@problems.":\n";
+ print $problem->str()."\n";
+ my @solutions = $problem->solutions();
+ for my $solution (@solutions) {
+ print " Solution $solution->{id}:\n";
+ for my $element ($solution->elements(1)) {
+ print " - ".$element->str()."\n";