diff options
author | Panu Matilainen <pmatilai@redhat.com> | 2018-08-16 16:25:02 +0300 |
---|---|---|
committer | Panu Matilainen <pmatilai@redhat.com> | 2018-08-21 13:32:34 +0300 |
commit | 1f3bb36c1f90d6e7c2387b470fdd16993a273d32 (patch) | |
tree | 3977d08826e90b8d220fe15f129a4992d1ccdf63 | |
parent | 286084f255cc377972503ffd7e0997f098879018 (diff) | |
download | rpm-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.c | 16 | ||||
-rw-r--r-- | tests/rpmorder.at | 46 |
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 |