summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorjoden <devnull@localhost>2004-05-03 17:29:16 +0000
committerjoden <devnull@localhost>2004-05-03 17:29:16 +0000
commited47ca65b121a14efefa4718074402fb69fb173c (patch)
tree4e892ae5eb85f1b6a41b2ffac0bebb878594075a /lib
parentf748bc43d91694a8ea7d4d4546bab2a635e1d79d (diff)
downloadlibrpm-tizen-ed47ca65b121a14efefa4718074402fb69fb173c.tar.gz
librpm-tizen-ed47ca65b121a14efefa4718074402fb69fb173c.tar.bz2
librpm-tizen-ed47ca65b121a14efefa4718074402fb69fb173c.zip
Minor tweaks to comments in autorollback code, made removal of re-packaged
package print to standard out in arb and rb code. ...james CVS patchset: 7245 CVS date: 2004/05/03 17:29:16
Diffstat (limited to 'lib')
-rw-r--r--lib/psm.c4
-rw-r--r--lib/rpminstall.c7
-rw-r--r--lib/rpmts.c12
-rw-r--r--lib/transaction.c54
4 files changed, 56 insertions, 21 deletions
diff --git a/lib/psm.c b/lib/psm.c
index c521d1185..31c72a34c 100644
--- a/lib/psm.c
+++ b/lib/psm.c
@@ -1150,7 +1150,7 @@ static rpmRC runTriggers(rpmpsm psm)
if (psm->te) /* XXX can't happen */
N = rpmteN(psm->te);
-/* ADJUST */
+/* XXX: Might need to adjust instance counts four autorollback. */
if (N) /* XXX can't happen */
numPackage = rpmdbCountPackages(rpmtsGetRdb(ts), N)
+ psm->countCorrection;
@@ -2126,7 +2126,7 @@ assert(psm->mi == NULL);
*/
rpmMessage(RPMMESS_DEBUG,
_("Attempting to mark %s as installed in score board(%p).\n"),
- rpmteN(psm->te), score);
+ rpmteN(psm->te), (unsigned) score);
se = rpmtsScoreGetEntry(score, rpmteN(psm->te));
if (se != NULL) se->installed = 1;
}
diff --git a/lib/rpminstall.c b/lib/rpminstall.c
index 523771a6d..0e85efb7b 100644
--- a/lib/rpminstall.c
+++ b/lib/rpminstall.c
@@ -1281,13 +1281,16 @@ int rpmRollback(rpmts ts, struct rpmInstallArguments_s * ia, const char ** argv)
/* Clean up after successful rollback. */
if (rtids && !rpmIsDebug()) {
int i;
+ rpmMessage(RPMMESS_NORMAL, _("Cleaning up repackaged packages:\n"));
if (rtids->idt)
for (i = 0; i < rtids->nidt; i++) {
IDT rrp = rtids->idt + i;
if (rrp->val.u32 != thistid)
/*@innercontinue@*/ continue;
- if (rrp->key) /* XXX can't happen */
- (void) unlink(rrp->key);
+ if (rrp->key) { /* XXX can't happen */
+ rpmMessage(RPMMESS_NORMAL, _("\tRemoving %s:\n"), rrp->key);
+ (void) unlink(rrp->key); /* XXX: Should check rc??? */
+ }
}
}
diff --git a/lib/rpmts.c b/lib/rpmts.c
index b973304a3..2f96df54c 100644
--- a/lib/rpmts.c
+++ b/lib/rpmts.c
@@ -874,7 +874,7 @@ rpmVSFlags rpmtsSetVSFlags(rpmts ts, rpmVSFlags vsflags)
* RPM_TRANS_AUTOROLLBACK
*
* ROLLBACK and AUTOROLLBACK transactions should always be ran as
- * a best effort. In particular this important to the autorollback
+ * a best effort. In particular this is important to the autorollback
* feature to avoid rolling back a rollback (otherwise known as
* dueling rollbacks (-;). AUTOROLLBACK's additionally need instance
* counts passed to scriptlets to be altered.
@@ -1454,7 +1454,7 @@ rpmts rpmtsCreate(void)
ts = xcalloc(1, sizeof(*ts));
memset(&ts->ops, 0, sizeof(ts->ops));
(void) rpmswEnter(rpmtsOp(ts, RPMTS_OP_TOTAL), -1);
- ts->type = RPMTRANS_TYPE_NORMAL;
+ ts->type = RPMTRANS_TYPE_NORMAL;
ts->goal = TSM_UNKNOWN;
ts->filesystemCount = 0;
ts->filesystems = NULL;
@@ -1506,8 +1506,8 @@ rpmts rpmtsCreate(void)
ts->dig = NULL;
/*
- We only use the score in an autorollback. So set this to
- NULL by default.
+ * We only use the score in an autorollback. So set this to
+ * NULL by default.
*/
ts->score = NULL;
@@ -1656,7 +1656,7 @@ rpmtsScore rpmtsScoreFree(rpmtsScore score)
/*
* XXX: Do not get the score and then store it aside for later use.
- * we will delete it out from under you. There is not rpmtsScoreLink()
+ * we will delete it out from under you. There is no rpmtsScoreLink()
* as this may be a very temporary fix for autorollbacks.
*/
rpmtsScore rpmtsGetScore(rpmts ts)
@@ -1667,7 +1667,7 @@ rpmtsScore rpmtsGetScore(rpmts ts)
/*
* XXX: Do not get the score entry and then store it aside for later use.
- * we will delete it out from under you. There is not an
+ * we will delete it out from under you. There is no
* rpmtsScoreEntryLink() as this may be a very temporary fix
* for autorollbacks.
* XXX: The scores are not sorted. This should be fixed at earliest
diff --git a/lib/transaction.c b/lib/transaction.c
index 4cb2ac8f5..836e67473 100644
--- a/lib/transaction.c
+++ b/lib/transaction.c
@@ -35,7 +35,7 @@
/*
* This is needed for the IDTX definitions. I think probably those need
* to be moved into a different source file (idtx.{c,h}), but that is up
- * Jeff Johnson.
+ * to Jeff Johnson.
*/
#include "rpmcli.h"
@@ -1045,6 +1045,33 @@ static rpmRC _rpmtsRollback(rpmts rollbackTransaction)
if (rc > 0 && rpmpsNumProblems(ps) > 0)
rpmpsPrint(stderr, ps);
ps = rpmpsFree(ps);
+
+ /*
+ * After we have ran through the transaction we need to
+ * remove any repackaged packages we just installed/upgraded
+ * from the rp repository.
+ */
+ tsi = rpmtsiInit(rollbackTransaction);
+ while((te = rpmtsiNext(tsi, 0)) != NULL) {
+ rpmMessage(RPMMESS_NORMAL, _("Cleaning up repackaged packages:\n"));
+ switch (rpmteType(te)) {
+ /* The install elements are repackaged packages */
+ case TR_ADDED:
+ /* Make sure the filename is still there. XXX: Can't happen */
+ if(te->key) {
+ rpmMessage(RPMMESS_NORMAL, _("\tRemoving %s:\n"), te->key);
+ (void) unlink(te->key); /* XXX: Should check for an error? */
+ }
+ /*@switchbreak@*/ break;
+
+ /* Ignore erase elements...nothing to do */
+ default:
+ /*@switchbreak@*/ break;
+ }
+ }
+ tsi = rpmtsiFree(tsi);
+
+ /* Free the rollback transaction */
rollbackTransaction = rpmtsFree(rollbackTransaction);
return rc;
@@ -1148,7 +1175,7 @@ static rpmRC getRepackageHeaderFromTE(rpmts ts, rpmte te,
* the next one. Perhaps I should return an error at this
* point, but if this was not the correct one, at least the correct one
* would be found.
- * XXX: Should I be matching name and arch?
+ * XXX: Should Match NAC!
*/
rpmMessage(RPMMESS_DEBUG, _("\tREMOVETID matched INSTALLTID.\n"));
if (headerGetEntry(rpIDT->h, RPMTAG_NAME, NULL, (void **) &rpname, NULL)) {
@@ -1194,7 +1221,7 @@ exit:
/**
* This is not a generalized function to be called from outside
* librpm. It is called internally by rpmtsRun() to add elements
- * to its rollback transaction.
+ * to its autorollback transaction.
* @param rollbackTransaction rollback transaction
* @param runningTransaction running transaction (the one you want to rollback)
* @param te Transaction element.
@@ -1252,6 +1279,8 @@ static rpmRC _rpmtsAddRollbackElement(rpmts rollbackTransaction,
/* Add the install element, as we had a repackaged package */
rpmMessage(RPMMESS_DEBUG,
_("\tAdded repackaged package header: %s.\n"), rpn);
+ rpmMessage(RPMMESS_DEBUG,
+ _("\tAdded from install element %s.\n"), rpmteNEVRA(te));
rc = rpmtsAddInstallElement(rollbackTransaction, headerLink(rph),
(fnpyKey) rpn, 1, te->relocs);
/*@innerbreak@*/ break;
@@ -1261,6 +1290,8 @@ static rpmRC _rpmtsAddRollbackElement(rpmts rollbackTransaction,
* have a repackaged package
*/
rpmMessage(RPMMESS_DEBUG, _("\tAdded erase element.\n"));
+ rpmMessage(RPMMESS_DEBUG,
+ _("\tAdded from install element %s.\n"), rpmteNEVRA(te));
rc = rpmtsAddEraseElement(rollbackTransaction, h, db_instance);
/*@innerbreak@*/ break;
@@ -1275,25 +1306,23 @@ static rpmRC _rpmtsAddRollbackElement(rpmts rollbackTransaction,
case TR_REMOVED:
rpmMessage(RPMMESS_DEBUG,
_("Add erase element to auto-rollback transaction.\n"));
-
- /* See if this element has already been added as an upgrade.
- * If so we want to do nothing.
+ /* See if this element has already been added.
+ * If so we want to do nothing. Compare N's for match.
+ * XXX: Really should compare NAC's.
*/
pi = rpmtsiInit(rollbackTransaction);
- while ((p = rpmtsiNext(pi, TR_ADDED)) != NULL) {
- if (rpmteType(p) == TR_ADDED) continue;
+ while ((p = rpmtsiNext(pi, 0)) != NULL) {
if (!strcmp(rpmteN(p), rpmteN(te))) {
rpmMessage(RPMMESS_DEBUG, _("\tFound existing upgrade element.\n"));
rpmMessage(RPMMESS_DEBUG, _("\tNot adding erase element for %s.\n"),
rpmteN(te));
rc = RPMRC_OK;
pi = rpmtsiFree(pi);
- /*@loopbreak@*/ break;
+ goto cleanup;
}
}
pi = rpmtsiFree(pi);
-
/* Get the repackage header from the current transaction
* element.
*/
@@ -1303,6 +1332,8 @@ static rpmRC _rpmtsAddRollbackElement(rpmts rollbackTransaction,
/* Add the install element */
rpmMessage(RPMMESS_DEBUG,
_("\tAdded repackaged package %s.\n"), rpn);
+ rpmMessage(RPMMESS_DEBUG,
+ _("\tAdded from erase element %s.\n"), rpmteNEVRA(te));
rc = rpmtsAddInstallElement(rollbackTransaction, rph,
(fnpyKey) rpn, 1, te->relocs);
if (rc != RPMRC_OK)
@@ -1337,6 +1368,7 @@ static rpmRC _rpmtsAddRollbackElement(rpmts rollbackTransaction,
* free(rpn);
*/
+cleanup:
/* Clean up */
if (h != NULL)
h = headerFree(h);
@@ -1344,6 +1376,7 @@ static rpmRC _rpmtsAddRollbackElement(rpmts rollbackTransaction,
rph = headerFree(rph);
return rc;
}
+
#define NOTIFY(_ts, _al) /*@i@*/ if ((_ts)->notify) (void) (_ts)->notify _al
int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
@@ -1369,7 +1402,6 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
void * lock = NULL;
int xx;
-
/* XXX programmer error segfault avoidance. */
if (rpmtsNElements(ts) <= 0)
return -1;