summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPanu Matilainen <pmatilai@redhat.com>2018-08-16 16:25:02 +0300
committerPanu Matilainen <pmatilai@redhat.com>2018-08-21 13:32:34 +0300
commit1f3bb36c1f90d6e7c2387b470fdd16993a273d32 (patch)
tree3977d08826e90b8d220fe15f129a4992d1ccdf63
parent286084f255cc377972503ffd7e0997f098879018 (diff)
downloadrpm-1f3bb36c1f90d6e7c2387b470fdd16993a273d32.tar.gz
Actually remember weak dependencies in transaction elements (RhBug:1593185)
Ordering by weak dependencies can't work very well when the weak dependencies are not present in the calculated data at all... Add a test-case duplicating the requires-order with recommends-order to proove that it actually works now. (cherry picked from commit b7ab1d1d6f2f1adc6ddfae51773d70b9ba08b883)
-rw-r--r--lib/rpmte.c16
-rw-r--r--tests/rpmorder.at46
2 files changed, 62 insertions, 0 deletions
diff --git a/lib/rpmte.c b/lib/rpmte.c
index 66194dc3b..d980a37a4 100644
--- a/lib/rpmte.c
+++ b/lib/rpmte.c
@@ -51,6 +51,10 @@ struct rpmte_s {
rpmds conflicts; /*!< Conflicts: dependencies. */
rpmds obsoletes; /*!< Obsoletes: dependencies. */
rpmds order; /*!< Order: dependencies. */
+ rpmds recommends; /*!< Recommends: dependencies. */
+ rpmds suggests; /*!< Suggests: dependencies. */
+ rpmds supplements; /*!< Supplements: dependencies. */
+ rpmds enhances; /*!< Enhances: dependencies. */
rpmfiles files; /*!< File information. */
rpmfi fi; /*!< File iterator (backwards compat) */
rpmps probs; /*!< Problems (relocations) */
@@ -85,6 +89,10 @@ void rpmteCleanDS(rpmte te)
te->requires = rpmdsFree(te->requires);
te->conflicts = rpmdsFree(te->conflicts);
te->obsoletes = rpmdsFree(te->obsoletes);
+ te->recommends = rpmdsFree(te->recommends);
+ te->suggests = rpmdsFree(te->suggests);
+ te->supplements = rpmdsFree(te->supplements);
+ te->enhances = rpmdsFree(te->enhances);
te->order = rpmdsFree(te->order);
}
@@ -164,6 +172,10 @@ static int addTE(rpmte p, Header h, fnpyKey key, rpmRelocation * relocs)
p->conflicts = rpmdsNewPool(tspool, h, RPMTAG_CONFLICTNAME, 0);
p->obsoletes = rpmdsNewPool(tspool, h, RPMTAG_OBSOLETENAME, 0);
p->order = rpmdsNewPool(tspool, h, RPMTAG_ORDERNAME, 0);
+ p->recommends = rpmdsNewPool(tspool, h, RPMTAG_RECOMMENDNAME, 0);
+ p->suggests = rpmdsNewPool(tspool, h, RPMTAG_SUGGESTNAME, 0);
+ p->supplements = rpmdsNewPool(tspool, h, RPMTAG_SUPPLEMENTNAME, 0);
+ p->enhances = rpmdsNewPool(tspool, h, RPMTAG_ENHANCENAME, 0);
/* Relocation needs to know file count before rpmfiNew() */
headerGet(h, RPMTAG_BASENAMES, &bnames, HEADERGET_MINMEM);
@@ -421,6 +433,10 @@ rpmds rpmteDS(rpmte te, rpmTagVal tag)
case RPMTAG_CONFLICTNAME: return te->conflicts;
case RPMTAG_OBSOLETENAME: return te->obsoletes;
case RPMTAG_ORDERNAME: return te->order;
+ case RPMTAG_RECOMMENDNAME: return te->recommends;
+ case RPMTAG_SUGGESTNAME: return te->suggests;
+ case RPMTAG_SUPPLEMENTNAME: return te->supplements;
+ case RPMTAG_ENHANCENAME: return te->enhances;
default: break;
}
return NULL;
diff --git a/tests/rpmorder.at b/tests/rpmorder.at
index 3762e09be..46482336b 100644
--- a/tests/rpmorder.at
+++ b/tests/rpmorder.at
@@ -44,3 +44,49 @@ deptest-three-1.0-1.noarch
],
[])
AT_CLEANUP
+
+# same as above but with recommends instead of requires
+AT_SETUP([basic install/erase order 2])
+AT_KEYWORDS([install erase order])
+AT_CHECK([
+RPMDB_CLEAR
+RPMDB_INIT
+
+runroot rpmbuild --quiet -bb \
+ --define "pkg one" \
+ --define "recs deptest-two" \
+ /data/SPECS/deptest.spec
+runroot rpmbuild --quiet -bb \
+ --define "pkg two" \
+ --define "recs deptest-three" \
+ /data/SPECS/deptest.spec
+runroot rpmbuild --quiet -bb \
+ --define "pkg three" \
+ /data/SPECS/deptest.spec
+
+echo INSTALL:
+runroot rpm -Uv --justdb \
+ /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm \
+ /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
+echo ERASE:
+runroot rpm -ev --justdb \
+ deptest-three \
+ deptest-one \
+ deptest-two
+],
+[0],
+[INSTALL:
+Verifying packages...
+Preparing packages...
+deptest-three-1.0-1.noarch
+deptest-two-1.0-1.noarch
+deptest-one-1.0-1.noarch
+ERASE:
+Preparing packages...
+deptest-one-1.0-1.noarch
+deptest-two-1.0-1.noarch
+deptest-three-1.0-1.noarch
+],
+[])
+AT_CLEANUP