Only specific cases of collections need extra ordering
authorPanu Matilainen <pmatilai@redhat.com>
Mon, 25 Oct 2010 09:44:34 +0000 (12:44 +0300)
committerPanu Matilainen <pmatilai@redhat.com>
Mon, 25 Oct 2010 11:19:18 +0000 (14:19 +0300)
- Add a crude flags system to allow selectively enabling the extra
  grouping during ordering: currently only sepolicy collection needs
  this, and its very harmful when applied to more regular collections
  as it creates truly gigantic dependency loops that rpm has no chance
  of sorting out sanely.

lib/order.c
macros.in

index 386233c..e5b1c3e 100644 (file)
@@ -245,15 +245,19 @@ static inline int addRelation(rpmts ts,
 
     addSingleRelation(p, q, dsflags);
 
-    /* If q is a member of any collections, make sure p requires all packages
-     * that are also in those collections */
+    /* If q is a member of any grouped collections, make sure p requires
+     * all packages that are also in those collections */
     for (qcolls = rpmteCollections(q); qcolls && *qcolls; qcolls++) {
-       rpmte *te;
-       rpmte *tes = rpmalAllInCollection(al, *qcolls);
-       for (te = tes; te && *te; te++) {
-           addSingleRelation(p, *te, RPMSENSE_SCRIPT_PRE);
+       char * flags;
+       flags = rstrscat(NULL, "%{__collection_", *qcolls, "_flags}", NULL);
+       if (rpmExpandNumeric(flags) & 0x1) {
+           rpmte *tes = rpmalAllInCollection(al, *qcolls);
+           for (rpmte *te = tes; te && *te; te++) {
+               addSingleRelation(p, *te, RPMSENSE_SCRIPT_PRE);
+           }
+           _free(tes);
        }
-       _free(tes);
+       free(flags);
     }
 
     return 0;
index 63ca234..2d0f98e 100644 (file)
--- a/macros.in
+++ b/macros.in
@@ -1086,6 +1086,7 @@ done \
 %__collection_font     %{__plugindir}/exec.so /usr/bin/fc-cache
 %__collection_java     %{__plugindir}/exec.so /usr/bin/rebuild-gcj-db
 %__collection_sepolicy         %{__plugindir}/sepolicy.so
+%__collection_sepolicy_flags   1
 
 # \endverbatim
 #*/