do not ignore disabled/considered flags for src packages
authorMichael Schroeder <mls@suse.de>
Tue, 15 Jan 2013 12:59:31 +0000 (13:59 +0100)
committerMichael Schroeder <mls@suse.de>
Tue, 15 Jan 2013 12:59:31 +0000 (13:59 +0100)
src/pool.c
src/repo.h
src/rules.c
src/selection.c

index d8eb040..67f9d48 100644 (file)
@@ -758,6 +758,8 @@ pool_addrelproviders(Pool *pool, Id d)
                    continue;
                  if (s->arch != evr && s->arch != ARCH_NOSRC)
                    continue;
+                 if (pool_disabled_solvable(pool, s))
+                   continue;
                  if (pool_match_nevr(pool, s, name))
                    queue_push(&plist, p);
                }
index 4f93d1e..a7a56ae 100644 (file)
@@ -84,6 +84,19 @@ static inline Repo *pool_id2repo(Pool *pool, Id repoid)
   return repoid < pool->nrepos ? pool->repos[repoid] : 0;
 }
 
+static inline int pool_disabled_solvable(const Pool *pool, Solvable *s)
+{
+  if (s->repo && s->repo->disabled)
+    return 1;
+  if (pool->considered)
+    { 
+      Id id = s - pool->solvables;
+      if (!MAPTST(pool->considered, id))
+       return 1;
+    }
+  return 0;
+}
+
 static inline int pool_installable(const Pool *pool, Solvable *s)
 {
   if (!s->arch || s->arch == ARCH_SRC || s->arch == ARCH_NOSRC)
index f6facf4..729268d 100644 (file)
@@ -507,13 +507,15 @@ solver_addrpmrulesforsolvable(Solver *solv, Solvable *s, Map *m)
          dontfix = 1;                  /* dont care about broken rpm deps */
         }
 
-      if (!dontfix
-         && s->arch != ARCH_SRC
-         && s->arch != ARCH_NOSRC
-         && !pool_installable(pool, s))
+      if (!dontfix)
        {
-         POOL_DEBUG(SOLV_DEBUG_RULE_CREATION, "package %s [%d] is not installable\n", pool_solvable2str(pool, s), (Id)(s - pool->solvables));
-         addrpmrule(solv, -n, 0, SOLVER_RULE_RPM_NOT_INSTALLABLE, 0);
+         if (s->arch == ARCH_SRC || s->arch == ARCH_NOSRC
+               ? pool_disabled_solvable(pool, s) 
+               : !pool_installable(pool, s))
+           {
+             POOL_DEBUG(SOLV_DEBUG_RULE_CREATION, "package %s [%d] is not installable\n", pool_solvable2str(pool, s), (Id)(s - pool->solvables));
+             addrpmrule(solv, -n, 0, SOLVER_RULE_RPM_NOT_INSTALLABLE, 0);
+           }
        }
 
       /* yet another SUSE hack, sigh */
index 2ef5e1e..8d05448 100644 (file)
@@ -245,7 +245,11 @@ selection_addsrc(Pool *pool, Queue *selection, int flags)
          if (s->name != name)
            continue;
          if (s->arch == ARCH_SRC || s->arch == ARCH_NOSRC)
-           havesrc = 1;
+           {
+             if (pool_disabled_solvable(pool, s))
+               continue;
+             havesrc = 1;
+           }
          else if (s->repo != pool->installed && !pool_installable(pool, s))
            continue;
          queue_push(&q, p);
@@ -316,6 +320,8 @@ selection_depglob(Pool *pool, Queue *selection, const char *name, int flags)
                    {
                      if ((flags & SELECTION_INSTALLED_ONLY) != 0 && s->repo != pool->installed)
                        continue;       /* just in case... src rpms can't be installed */
+                     if (pool_disabled_solvable(pool, s))
+                       continue;
                      if ((flags & SELECTION_SOURCE_ONLY) != 0)
                        id = pool_rel2id(pool, id, ARCH_SRC, REL_ARCH, 1);
                      queue_push2(selection, SOLVER_SOLVABLE_NAME, id);
@@ -377,8 +383,12 @@ selection_depglob(Pool *pool, Queue *selection, const char *name, int flags)
         {
           Solvable *s = pool->solvables + p;
           if (s->repo != pool->installed && !pool_installable(pool, s))
-           if (!(flags & SELECTION_SOURCE_ONLY) || (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC))
-              continue;
+           {
+             if (!(flags & SELECTION_SOURCE_ONLY) || (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC))
+                continue;
+             if (pool_disabled_solvable(pool, s))
+               continue;
+           }
          if ((flags & SELECTION_INSTALLED_ONLY) != 0 && s->repo != pool->installed)
            continue;
           id = s->name;
@@ -476,8 +486,12 @@ selection_filelist(Pool *pool, Queue *selection, const char *name, int flags)
       if (!s->repo)
        continue;
       if (s->repo != pool->installed && !pool_installable(pool, s))
-       if (!(flags & SELECTION_SOURCE_ONLY) || (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC))
-         continue;
+       {
+         if (!(flags & SELECTION_SOURCE_ONLY) || (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC))
+           continue;
+         if (pool_disabled_solvable(pool, s))
+           continue;
+       }
       if ((flags & SELECTION_INSTALLED_ONLY) != 0 && s->repo != pool->installed)
        continue;
       queue_push(&q, di.solvid);