Hello community,

here is the log from the commit of package libsolv for openSUSE:Factory checked 
in at 2013-01-20 07:57:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libsolv (Old)
 and      /work/SRC/openSUSE:Factory/.libsolv.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libsolv", Maintainer is ""

Changes:
--------
--- /work/SRC/openSUSE:Factory/libsolv/libsolv.changes  2012-12-21 
10:15:47.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.libsolv.new/libsolv.changes     2013-01-20 
07:58:01.000000000 +0100
@@ -1,0 +2,8 @@
+Mon Jan 14 16:01:04 CET 2013 - [email protected]
+
+- trivial_installable: check vendor of affected package to see if
+  a patch should be ignored [bnc#736100]
+- fix trivial installable requires handling
+- bump version to 0.2.4
+
+-------------------------------------------------------------------

Old:
----
  libsolv-0.2.3.tar.bz2

New:
----
  libsolv-0.2.4.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libsolv.spec ++++++
--- /var/tmp/diff_new_pack.pLe9Gb/_old  2013-01-20 07:58:03.000000000 +0100
+++ /var/tmp/diff_new_pack.pLe9Gb/_new  2013-01-20 07:58:03.000000000 +0100
@@ -16,7 +16,7 @@
 #
 
 Name:           libsolv
-Version:        0.2.3
+Version:        0.2.4
 Release:        0
 Url:            git://gitorious.org/opensuse/libsolv.git
 Source:         libsolv-%{version}.tar.bz2

++++++ libsolv-0.2.3.tar.bz2 -> libsolv-0.2.4.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.2.3/README new/libsolv-0.2.4/README
--- old/libsolv-0.2.3/README    2012-12-19 15:41:18.000000000 +0100
+++ new/libsolv-0.2.4/README    2013-01-14 16:06:16.000000000 +0100
@@ -1,5 +1,5 @@
 This is libsolv, a free package dependency solver using a satisfiability
-algorihtm.
+algorithm.
 
 This code is based on two major, but independent, blocks:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.2.3/VERSION.cmake 
new/libsolv-0.2.4/VERSION.cmake
--- old/libsolv-0.2.3/VERSION.cmake     2012-12-19 15:41:18.000000000 +0100
+++ new/libsolv-0.2.4/VERSION.cmake     2013-01-14 16:06:16.000000000 +0100
@@ -49,5 +49,5 @@
 
 SET(LIBSOLV_MAJOR "0")
 SET(LIBSOLV_MINOR "2")
-SET(LIBSOLV_PATCH "3")
+SET(LIBSOLV_PATCH "4")
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.2.3/bindings/solv.i 
new/libsolv-0.2.4/bindings/solv.i
--- old/libsolv-0.2.3/bindings/solv.i   2012-12-19 15:41:18.000000000 +0100
+++ new/libsolv-0.2.4/bindings/solv.i   2013-01-14 16:06:16.000000000 +0100
@@ -1329,6 +1329,49 @@
     sel->flags = selection_make($self, &sel->q, name, flags);
     return sel;
   }
+
+  void setpooljobs_helper(Queue jobs) {
+    queue_free(&$self->pooljobs);
+    queue_init_clone(&$self->pooljobs, &jobs);
+  }
+  %typemap(out) Queue getpooljobs Queue2Array(Job *, 2, new_Job(arg1, id, 
idp[1]));
+  %newobject getpooljobs;
+  Queue getpooljobs() {
+    Queue q;
+    queue_init_clone(&q, &$self->pooljobs);
+    return q;
+  }
+
+#if defined(SWIGPYTHON)
+  %pythoncode {
+    def setpooljobs(self, jobs):
+      j = []
+      for job in jobs: j += [job.how, job.what]
+      self.setpooljobs_helper(j)
+  }
+#endif
+#if defined(SWIGPERL)
+  %perlcode {
+    sub solv::Solver::setpooljobs {
+      my ($self, $jobs) = @_;
+      my @j = map {($_->{'how'}, $_->{'what'})} @$jobs;
+      return $self->setpooljobs_helper(\@j);
+    }
+  }
+#endif
+#if defined(SWIGRUBY)
+%init %{
+rb_eval_string(
+    "class Solv::Pool\n"
+    "  def setpooljobs(jobs)\n"
+    "    jl = []\n"
+    "    jobs.each do |j| ; jl << j.how << j.what ; end\n"
+    "    setpooljobs_helper(jl)\n"
+    "  end\n"
+    "end\n"
+  );
+%}
+#endif
 }
 
 %extend Repo {
@@ -2466,6 +2509,7 @@
   static const int SOLVER_RULE_LEARNT = SOLVER_RULE_LEARNT;
 
   static const int SOLVER_SOLUTION_JOB = SOLVER_SOLUTION_JOB;
+  static const int SOLVER_SOLUTION_POOLJOB = SOLVER_SOLUTION_POOLJOB;
   static const int SOLVER_SOLUTION_INFARCH = SOLVER_SOLUTION_INFARCH;
   static const int SOLVER_SOLUTION_DISTUPGRADE = SOLVER_SOLUTION_DISTUPGRADE;
   static const int SOLVER_SOLUTION_BEST = SOLVER_SOLUTION_BEST;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.2.3/examples/solv.c 
new/libsolv-0.2.4/examples/solv.c
--- old/libsolv-0.2.3/examples/solv.c   2012-12-19 15:41:18.000000000 +0100
+++ new/libsolv-0.2.4/examples/solv.c   2013-01-14 16:06:16.000000000 +0100
@@ -2744,7 +2744,7 @@
     }
   queue_free(&repofilter);
 
-  if (!job.count && MODE_PATCH)
+  if (!job.count && mainmode != MODE_PATCH)
     {
       printf("no package matched\n");
       exit(1);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.2.3/ext/CMakeLists.txt 
new/libsolv-0.2.4/ext/CMakeLists.txt
--- old/libsolv-0.2.3/ext/CMakeLists.txt        2012-12-19 15:41:18.000000000 
+0100
+++ new/libsolv-0.2.4/ext/CMakeLists.txt        2013-01-14 16:06:16.000000000 
+0100
@@ -89,7 +89,7 @@
 ADD_LIBRARY (libsolvext STATIC ${libsolvext_SRCS})
 ELSE (DISABLE_SHARED)
 ADD_LIBRARY (libsolvext SHARED ${libsolvext_SRCS})
-TARGET_LINK_LIBRARIES(libsolvext ${SYSTEM_LIBRARIES})
+TARGET_LINK_LIBRARIES(libsolvext libsolv ${SYSTEM_LIBRARIES})
 ENDIF (DISABLE_SHARED)
 
 SET_TARGET_PROPERTIES(libsolvext PROPERTIES OUTPUT_NAME "solvext")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.2.3/ext/pool_fileconflicts.c 
new/libsolv-0.2.4/ext/pool_fileconflicts.c
--- old/libsolv-0.2.3/ext/pool_fileconflicts.c  2012-12-19 15:41:18.000000000 
+0100
+++ new/libsolv-0.2.4/ext/pool_fileconflicts.c  2013-01-14 16:06:16.000000000 
+0100
@@ -152,7 +152,7 @@
     return;
   dhx = strnhash(fn, dp + 1 - fn);
   if (!dhx)
-    dhx = 1 + dp + 1 - fn;
+    dhx = dp + 1 - fn + 1;     /* mirrors the "if (!hx) hx = strlen(fn) + 1" 
in finddirs_cb */
 #if 1
   if (!isindirmap(cbdata, dhx))
     return;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.2.3/ext/repo_rpmdb.c 
new/libsolv-0.2.4/ext/repo_rpmdb.c
--- old/libsolv-0.2.3/ext/repo_rpmdb.c  2012-12-19 15:41:18.000000000 +0100
+++ new/libsolv-0.2.4/ext/repo_rpmdb.c  2013-01-14 16:06:16.000000000 +0100
@@ -720,6 +720,8 @@
   unsigned int *di;
   int bnc, dnc, dic;
   int i;
+  Id lastdid = 0;
+  int lastdii = -1;
 #ifdef USE_FILEFILTER
   int j;
   struct filefilter *ff;
@@ -804,18 +806,22 @@
 #endif
       if (data)
        {
-         Id handle, did;
+         Id did;
          char *b = bn[i];
 
-         handle = s - pool->solvables;
-         did = repodata_str2dir(data, dn[di[i]], 1);
-         if (!did)
+         if (di[i] == lastdii)
+           did = lastdid;
+         else
            {
-             did = repodata_str2dir(data, "/", 1);
-             if (b && b[0] == '/')
-               b++;    /* work around rpm bug */
+             did = repodata_str2dir(data, dn[di[i]], 1);
+             if (!did)
+               did = repodata_str2dir(data, "/", 1);
+             lastdid = did;
+             lastdii = di[i];
            }
-         repodata_add_dirstr(data, handle, SOLVABLE_FILELIST, did, b);
+         if (b && *b == '/')   /* work around rpm bug */
+           b++;
+         repodata_add_dirstr(data, s - pool->solvables, SOLVABLE_FILELIST, 
did, b);
        }
     }
 #if 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.2.3/package/libsolv.changes 
new/libsolv-0.2.4/package/libsolv.changes
--- old/libsolv-0.2.3/package/libsolv.changes   2012-12-19 15:41:18.000000000 
+0100
+++ new/libsolv-0.2.4/package/libsolv.changes   2013-01-14 16:06:16.000000000 
+0100
@@ -1,4 +1,12 @@
 -------------------------------------------------------------------
+Mon Jan 14 16:01:04 CET 2013 - [email protected]
+
+- trivial_installable: check vendor of affected package to see if
+  a patch should be ignored [bnc#736100]
+- fix trivial installable requires handling
+- bump version to 0.2.4
+
+-------------------------------------------------------------------
 Tue Dec 18 19:20:19 CET 2012 - [email protected]
 
 - fix potential access to freed memory
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.2.3/src/pool.c new/libsolv-0.2.4/src/pool.c
--- old/libsolv-0.2.3/src/pool.c        2012-12-19 15:41:18.000000000 +0100
+++ new/libsolv-0.2.4/src/pool.c        2013-01-14 16:06:16.000000000 +0100
@@ -103,6 +103,7 @@
   solv_free(pool->rels);
   pool_setvendorclasses(pool, 0);
   queue_free(&pool->vendormap);
+  queue_free(&pool->pooljobs);
   for (i = 0; i < POOL_TMPSPACEBUF; i++)
     solv_free(pool->tmpspace.buf[i]);
   for (i = 0; i < pool->nlanguages; i++)
@@ -1911,9 +1912,12 @@
                {
                  /* decided and miss */
                  map[p] = 2;
+                 did = 0;
                  break;
                }
-             m |= r;   /* 1 | 9 | 16 | 17 */
+             if (r == 16)
+               break;  /* undecided */
+             m |= r;   /* 1 | 9 | 17 */
            }
          if (req)
            continue;
@@ -1932,6 +1936,7 @@
              if ((providedbyinstalled(pool, map, con, ispatch, noobsoletesmap) 
& 1) != 0)
                {
                  map[p] = 2;
+                 did = 0;
                  break;
                }
              if ((m == 1 || m == 17) && ISRELDEP(con))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.2.3/src/pool.h new/libsolv-0.2.4/src/pool.h
--- old/libsolv-0.2.3/src/pool.h        2012-12-19 15:41:18.000000000 +0100
+++ new/libsolv-0.2.4/src/pool.h        2013-01-14 16:06:16.000000000 +0100
@@ -119,6 +119,8 @@
   /* search position */
   Datapos pos;
 
+  Queue pooljobs;              /* fixed jobs, like USERINSTALLED/NOOBSOLETES */
+
 #ifdef LIBSOLV_INTERNAL
   /* flags to tell the library how the installed package manager works */
   int promoteepoch;            /* true: missing epoch is replaced by epoch of 
dependency   */
@@ -263,6 +265,8 @@
 int solvable_trivial_installable_map(Solvable *s, Map *installedmap, Map 
*conflictsmap, Map *noobsoletesmap);
 int solvable_trivial_installable_repo(Solvable *s, struct _Repo *installed, 
Map *noobsoletesmap);
 int solvable_trivial_installable_queue(Solvable *s, Queue *installed, Map 
*noobsoletesmap);
+struct _Solver; /* argh, needed for vendorchange callback FIXME */
+int solvable_is_irrelevant_patch(Solvable *s, Map *installedmap, struct 
_Solver *solv);
 
 void pool_create_state_maps(Pool *pool, Queue *installed, Map *installedmap, 
Map *conflictsmap);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.2.3/src/problems.c 
new/libsolv-0.2.4/src/problems.c
--- old/libsolv-0.2.3/src/problems.c    2012-12-19 15:41:18.000000000 +0100
+++ new/libsolv-0.2.4/src/problems.c    2013-01-14 16:06:16.000000000 +0100
@@ -260,7 +260,7 @@
                nupdate++;
              else
                {
-                 if (!essentialok && (solv->job.elements[-v -1] & 
SOLVER_ESSENTIAL) != 0)
+                 if (!essentialok && (solv->job.elements[-v - 1] & 
SOLVER_ESSENTIAL) != 0)
                    continue;   /* not that one! */
                  njob++;
                }
@@ -382,8 +382,17 @@
   Pool *pool = solv->pool;
   if (why < 0)
     {
-      queue_push(solutionq, 0);
-      queue_push(solutionq, -why);
+      why = -why;
+      if (why < solv->pooljobcnt)
+       {
+         queue_push(solutionq, SOLVER_SOLUTION_POOLJOB);
+         queue_push(solutionq, why);
+       }
+      else
+       {
+         queue_push(solutionq, SOLVER_SOLUTION_JOB);
+         queue_push(solutionq, why - solv->pooljobcnt);
+       }
       return;
     }
   if (why >= solv->infarchrules && why < solv->infarchrules_end)
@@ -775,6 +784,8 @@
  *    -> add (SOLVER_INSTALL|SOLVER_SOLVABLE, rp) to the job
  *    SOLVER_SOLUTION_JOB           jobidx
  *    -> remove job (jobidx - 1, jobidx) from job queue
+ *    SOLVER_SOLUTION_POOLJOB       jobidx
+ *    -> remove job (jobidx - 1, jobidx) from pool job queue
  *    pkgid (> 0)                   0
  *    -> add (SOLVER_ERASE|SOLVER_SOLVABLE, p) to the job
  *    pkgid (> 0)                   pkgid (> 0)
@@ -807,6 +818,12 @@
 {
   int i;
 
+  if (p == SOLVER_SOLUTION_POOLJOB)
+    {
+      solv->pool->pooljobs.elements[rp - 1] = SOLVER_NOOP;
+      solv->pool->pooljobs.elements[rp] = 0;
+      return;
+    }
   if (p == SOLVER_SOLUTION_JOB)
     {
       job->elements[rp - 1] = SOLVER_NOOP;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.2.3/src/problems.h 
new/libsolv-0.2.4/src/problems.h
--- old/libsolv-0.2.3/src/problems.h    2012-12-19 15:41:18.000000000 +0100
+++ new/libsolv-0.2.4/src/problems.h    2013-01-14 16:06:16.000000000 +0100
@@ -24,6 +24,7 @@
 #define SOLVER_SOLUTION_DISTUPGRADE     (-1)
 #define SOLVER_SOLUTION_INFARCH         (-2)
 #define SOLVER_SOLUTION_BEST            (-3)
+#define SOLVER_SOLUTION_POOLJOB         (-4)
 
 void solver_disableproblem(struct _Solver *solv, Id v);
 void solver_enableproblem(struct _Solver *solv, Id v);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.2.3/src/solvable.c 
new/libsolv-0.2.4/src/solvable.c
--- old/libsolv-0.2.3/src/solvable.c    2012-12-19 15:41:18.000000000 +0100
+++ new/libsolv-0.2.4/src/solvable.c    2013-01-14 16:06:16.000000000 +0100
@@ -20,6 +20,8 @@
 #include "pool.h"
 #include "repo.h"
 #include "util.h"
+#include "policy.h"
+#include "poolvendor.h"
 #include "chksum.h"
 
 const char *
@@ -459,7 +461,11 @@
       while ((con = *conp++) != 0)
        {
          if (providedbyinstalled(pool, installedmap, con, ispatch, 
noobsoletesmap))
-           return 0;
+           {
+             if (ispatch && solvable_is_irrelevant_patch(s, installedmap, 0))
+               return -1;
+             return 0;
+           }
          if (!interesting && ISRELDEP(con))
            {
               con = dep2name(pool, con);
@@ -467,6 +473,8 @@
                interesting = 1;
            }
        }
+      if (ispatch && interesting && solvable_is_irrelevant_patch(s, 
installedmap, 0))
+       interesting = 0;
     }
 #if 0
   if (s->repo)
@@ -568,6 +576,76 @@
 }
 
 
+/* check if this patch is relevant according to the vendor. To bad that patches
+ * don't have a vendor, so we need to do some careful repo testing. */
+int
+solvable_is_irrelevant_patch(Solvable *s, Map *installedmap, Solver *solv)
+{
+  Pool *pool = s->repo->pool;
+  Id con, *conp;
+  int hadpatchpackage = 0;
+
+  if (!s->conflicts)
+    return 0;
+  conp = s->repo->idarraydata + s->conflicts;
+  while ((con = *conp++) != 0)
+    {
+      Reldep *rd;
+      Id p, pp, p2, pp2;
+      if (!ISRELDEP(con))
+       continue;
+      rd = GETRELDEP(pool, con);
+      if (rd->flags != REL_LT)
+       continue;
+      FOR_PROVIDES(p, pp, con)
+       {
+         Solvable *si;
+         if (!MAPTST(installedmap, p))
+           continue;
+         si = pool->solvables + p;
+         if (!pool_match_nevr(pool, si, con))
+           continue;
+         FOR_PROVIDES(p2, pp2, rd->name)
+           {
+             Solvable *s2 = pool->solvables + p2;
+             if (!pool_match_nevr(pool, s2, rd->name))
+               continue;
+             if (pool_match_nevr(pool, s2, con))
+               continue;       /* does not fulfill patch */
+             if (s2->repo == s->repo)
+               {
+                 hadpatchpackage = 1;
+                 /* ok, we have a package from the patch repo that solves the 
conflict. check vendor */
+                 if (si->vendor == s2->vendor)
+                   return 0;
+                 /* FIXME: solv is only needed for the vendorchange callback */
+                 if (solv)
+                   {
+                     if (!policy_illegal_vendorchange(solv, si, s2))
+                       return 0;
+                   }
+                 else
+                   {
+                     Id v1 = si->vendor ? si->vendor : ID_EMPTY;
+                     Id v2 = s2->vendor ? s2->vendor : ID_EMPTY;
+                     if (v1 == v2)
+                       return 0;
+                     v1 = pool_vendor2mask(pool, v1);
+                     v2 = pool_vendor2mask(pool, v2);
+                     if ((v1 & v2) != 0)
+                       return 0;
+                   }
+                 /* vendor change was illegal, ignore conflict */
+               }
+           }
+       }
+    }
+  /* if we didn't find a patchpackage don't claim that the patch is irrelevant 
*/
+  if (!hadpatchpackage)
+    return 0;
+  return 1;
+}
+
 /*****************************************************************************/
 
 /*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.2.3/src/solver.c 
new/libsolv-0.2.4/src/solver.c
--- old/libsolv-0.2.3/src/solver.c      2012-12-19 15:41:18.000000000 +0100
+++ new/libsolv-0.2.4/src/solver.c      2013-01-14 16:06:16.000000000 +0100
@@ -2874,6 +2874,13 @@
   /* remember job */
   queue_free(&solv->job);
   queue_init_clone(&solv->job, job);
+  solv->pooljobcnt = pool->pooljobs.count;
+  if (pool->pooljobs.count)
+    {
+      queue_insertn(&solv->job, 0, pool->pooljobs.count);
+      memcpy(solv->job.elements, pool->pooljobs.elements, pool->pooljobs.count 
* sizeof(Id));
+    }
+  job = &solv->job;
 
   /* free old stuff */
   if (solv->update_targets)
@@ -3177,6 +3184,8 @@
     {
       oldnrules = solv->nrules;
 
+      if (i && i == solv->pooljobcnt)
+        POOL_DEBUG(SOLV_DEBUG_JOB, "end of pool jobs\n");
       how = job->elements[i];
       what = job->elements[i + 1];
       weak = how & SOLVER_WEAK;
@@ -3346,10 +3355,10 @@
        {
          int j;
          if (solv->nrules == oldnrules)
-           POOL_DEBUG(SOLV_DEBUG_JOB, " - no rule created\n");
+           POOL_DEBUG(SOLV_DEBUG_JOB, "  - no rule created\n");
          for (j = oldnrules; j < solv->nrules; j++)
            {
-             POOL_DEBUG(SOLV_DEBUG_JOB, " - job ");
+             POOL_DEBUG(SOLV_DEBUG_JOB, "  - job ");
              solver_printrule(solv, SOLV_DEBUG_JOB, solv->rules + j);
            }
        }
@@ -3736,9 +3745,18 @@
 void
 solver_trivial_installable(Solver *solv, Queue *pkgs, Queue *res)
 {
+  Pool *pool = solv->pool;
   Map installedmap;
-  pool_create_state_maps(solv->pool,  &solv->decisionq, &installedmap, 0);
-  pool_trivial_installable_noobsoletesmap(solv->pool, &installedmap, pkgs, 
res, solv->noobsoletes.size ? &solv->noobsoletes : 0);
+  int i;
+  pool_create_state_maps(pool,  &solv->decisionq, &installedmap, 0);
+  pool_trivial_installable_noobsoletesmap(pool, &installedmap, pkgs, res, 
solv->noobsoletes.size ? &solv->noobsoletes : 0);
+  for (i = 0; i < res->count; i++)
+    if (res->elements[i] != -1)
+      {
+       Solvable *s = pool->solvables + pkgs->elements[i];
+       if (!strncmp("patch:", pool_id2str(pool, s->name), 6) && 
solvable_is_irrelevant_patch(s, &installedmap, solv))
+         res->elements[i] = -1;
+      }
   map_free(&installedmap);
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.2.3/src/solver.h 
new/libsolv-0.2.4/src/solver.h
--- old/libsolv-0.2.3/src/solver.h      2012-12-19 15:41:18.000000000 +0100
+++ new/libsolv-0.2.4/src/solver.h      2013-01-14 16:06:16.000000000 +0100
@@ -82,6 +82,8 @@
    */
   UpdateCandidateCb   updateCandidateCb;
 
+  int pooljobcnt;              /* number of pooljob entries in job queue */
+
 #ifdef LIBSOLV_INTERNAL
   Repo *installed;                     /* copy of pool->installed */
   
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.2.3/src/solverdebug.c 
new/libsolv-0.2.4/src/solverdebug.c
--- old/libsolv-0.2.3/src/solverdebug.c 2012-12-19 15:41:18.000000000 +0100
+++ new/libsolv-0.2.4/src/solverdebug.c 2013-01-14 16:06:16.000000000 +0100
@@ -656,9 +656,11 @@
   element = 0;
   while ((element = solver_next_solutionelement(solv, problem, solution, 
element, &p, &rp)) != 0)
     {
-      if (p == SOLVER_SOLUTION_JOB)
+      if (p == SOLVER_SOLUTION_JOB || p == SOLVER_SOLUTION_POOLJOB)
        {
          /* job, rp is index into job queue */
+         if (p == SOLVER_SOLUTION_JOB)
+           rp += solv->pooljobcnt;
          how = solv->job.elements[rp - 1];
          what = solv->job.elements[rp];
          select = how & SOLVER_SELECTMASK;
@@ -1042,10 +1044,13 @@
 solver_solutionelement2str(Solver *solv, Id p, Id rp)
 {
   Pool *pool = solv->pool;
-  if (p == SOLVER_SOLUTION_JOB)
+  if (p == SOLVER_SOLUTION_JOB || p == SOLVER_SOLUTION_POOLJOB)
     {
-      Id how = solv->job.elements[rp - 1];
-      Id what = solv->job.elements[rp];
+      Id how, what;
+      if (p == SOLVER_SOLUTION_JOB)
+       rp += solv->pooljobcnt;
+      how = solv->job.elements[rp - 1];
+      what = solv->job.elements[rp];
       return pool_tmpjoin(pool, "do not ask to ", pool_job2str(pool, how, 
what, 0), 0);
     }
   else if (p == SOLVER_SOLUTION_INFARCH)

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to