reuse solver in examples
authorMichael Schroeder <mls@suse.de>
Mon, 4 Feb 2013 16:41:31 +0000 (17:41 +0100)
committerMichael Schroeder <mls@suse.de>
Mon, 4 Feb 2013 16:41:31 +0000 (17:41 +0100)
examples/p5solv
examples/pysolv
examples/rbsolv
examples/solv.c

index e02d6da..324d30d 100755 (executable)
@@ -617,11 +617,11 @@ for my $job (@jobs) {
   $job->{'how'} ^= $solv::Job::SOLVER_UPDATE ^ $solv::Job::SOLVER_INSTALL if $cmd eq 'up' && $job->isemptyupdate();
 }
 
-my $solver;
+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) {
-  $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) {
index d7fc9bd..18327d7 100755 (executable)
@@ -689,7 +689,7 @@ for arg in args:
         jobs.append(pool.Job(Job.SOLVER_SOLVABLE, cmdlinerepo['packages'][arg]))
     else:
         flags = Selection.SELECTION_NAME|Selection.SELECTION_PROVIDES|Selection.SELECTION_GLOB
-       flags |= Selection.SELECTION_CANON|Selection.SELECTION_DOTARCH|Selection.SELECTION_REL
+        flags |= Selection.SELECTION_CANON|Selection.SELECTION_DOTARCH|Selection.SELECTION_REL
         if len(arg) and arg[0] == '/':
             flags |= Selection.SELECTION_FILELIST
             if cmd == 'erase':
@@ -752,12 +752,12 @@ for job in jobs:
         job.how |= Job.SOLVER_CLEANDEPS
 
 #pool.set_debuglevel(2)
-solver = None
+solver = pool.Solver()
+solver.set_flag(Solver.SOLVER_FLAG_SPLITPROVIDES, 1);
+if cmd == 'erase':
+    solver.set_flag(Solver.SOLVER_FLAG_ALLOW_UNINSTALL, 1);
+
 while True:
-    solver = pool.Solver()
-    solver.set_flag(Solver.SOLVER_FLAG_SPLITPROVIDES, 1);
-    if cmd == 'erase':
-        solver.set_flag(Solver.SOLVER_FLAG_ALLOW_UNINSTALL, 1);
     problems = solver.solve(jobs)
     if not problems:
         break
index b91bbae..3c87d3d 100755 (executable)
@@ -629,12 +629,12 @@ for job in jobs
   job.how ^= Solv::Job::SOLVER_UPDATE ^ Solv::Job::SOLVER_INSTALL if cmd == 'up' and job.isemptyupdate?
 end
 
-solver = nil
+solver = pool.Solver
+solver.set_flag(Solv::Solver::SOLVER_FLAG_SPLITPROVIDES, 1)
+solver.set_flag(Solv::Solver::SOLVER_FLAG_ALLOW_UNINSTALL, 1) if cmd == 'erase'
 #pool.set_debuglevel(1)
+
 while true
-  solver = pool.Solver
-  solver.set_flag(Solv::Solver::SOLVER_FLAG_SPLITPROVIDES, 1)
-  solver.set_flag(Solv::Solver::SOLVER_FLAG_ALLOW_UNINSTALL, 1) if cmd == 'erase'
   problems = solver.solve(jobs)
   break if problems.empty?
   for problem in problems
index 0ef5daa..4daa572 100644 (file)
@@ -2833,17 +2833,17 @@ main(int argc, char **argv)
 #if defined(ENABLE_RPMDB) && (defined(SUSE) || defined(FEDORA))
 rerunsolver:
 #endif
+  solv = solver_create(pool);
+  solver_set_flag(solv, SOLVER_FLAG_SPLITPROVIDES, 1);
+  if (mainmode == MODE_ERASE)
+    solver_set_flag(solv, SOLVER_FLAG_ALLOW_UNINSTALL, 1);     /* don't nag */
+  solver_set_flag(solv, SOLVER_FLAG_BEST_OBEY_POLICY, 1);
+
   for (;;)
     {
       Id problem, solution;
       int pcnt, scnt;
 
-      solv = solver_create(pool);
-      solver_set_flag(solv, SOLVER_FLAG_SPLITPROVIDES, 1);
-      if (mainmode == MODE_ERASE)
-        solver_set_flag(solv, SOLVER_FLAG_ALLOW_UNINSTALL, 1); /* don't nag */
-      solver_set_flag(solv, SOLVER_FLAG_BEST_OBEY_POLICY, 1);
-
       if (!solver_solve(solv, &job))
        break;
       pcnt = solver_problem_count(solv);
@@ -2894,8 +2894,6 @@ rerunsolver:
            continue;
          solver_take_solution(solv, problem, take, &job);
        }
-      solver_free(solv);
-      solv = 0;
     }
 
   trans = solver_create_transaction(solv);
@@ -3149,8 +3147,8 @@ rerunsolver:
                  fclose(newpkgsfps[i]);
              newpkgsfps = solv_free(newpkgsfps);
              solver_free(solv);
+             solv = 0;
              pool_add_fileconflicts_deps(pool, &conflicts);
-             pool_createwhatprovides(pool);    /* Hmm... */
              goto rerunsolver;
            }
        }