rpmRC rpmpsmRun(rpmts ts, rpmte te, pkgGoal goal) { rpmpsm psm = NULL; rpmRC rc = RPMRC_FAIL; /* Psm can't fail in test mode, just return early */ if (rpmtsFlags(ts) & RPMTRANS_FLAG_TEST) return RPMRC_OK; psm = rpmpsmNew(ts, te); if (rpmChrootIn() == 0) { rpmtsOpX op; psm->goal = goal; psm->goalName = pkgGoalString(goal); switch (goal) { case PKG_INSTALL: case PKG_ERASE: /* Run pre transaction element hook for all plugins */ if (rpmpluginsCallPsmPre(ts->plugins, te) != RPMRC_FAIL) { op = (goal == PKG_INSTALL) ? RPMTS_OP_INSTALL : RPMTS_OP_ERASE; rpmswEnter(rpmtsOp(psm->ts, op), 0); rc = rpmpsmNext(psm, PSM_INIT); if (!rc) rc = rpmpsmNext(psm, PSM_PRE); if (!rc) rc = rpmpsmNext(psm, PSM_PROCESS); if (!rc) rc = rpmpsmNext(psm, PSM_POST); (void) rpmpsmNext(psm, PSM_FINI); rpmswExit(rpmtsOp(psm->ts, op), 0); } /* Run post transaction element hook for all plugins */ rpmpluginsCallPsmPost(ts->plugins, te, rc); break; case PKG_PRETRANS: case PKG_POSTTRANS: case PKG_VERIFY: psm->scriptTag = goal; rc = rpmpsmStage(psm, PSM_SCRIPT); break; default: break; } /* XXX an error here would require a full abort */ (void) rpmChrootOut(); } rpmpsmFree(psm); return rc; }
rpmRC rpmpsmRun(rpmts ts, rpmte te, pkgGoal goal) { rpmpsm psm = NULL; rpmRC rc = RPMRC_FAIL; /* Psm can't fail in test mode, just return early */ if (rpmtsFlags(ts) & RPMTRANS_FLAG_TEST) return RPMRC_OK; psm = rpmpsmNew(ts, te, goal); if (rpmChrootIn() == 0) { /* Run pre transaction element hook for all plugins */ rc = rpmpluginsCallPsmPre(rpmtsPlugins(ts), te); if (!rc) { switch (goal) { case PKG_INSTALL: rc = rpmPackageInstall(ts, psm); break; case PKG_ERASE: rc = rpmPackageErase(ts, psm); break; case PKG_PRETRANS: case PKG_POSTTRANS: case PKG_VERIFY: rc = runInstScript(psm, goal); break; case PKG_TRANSFILETRIGGERIN: rc = runImmedFileTriggers(ts, te, RPMSENSE_TRIGGERIN, RPMSCRIPT_TRANSFILETRIGGER, 0); break; case PKG_TRANSFILETRIGGERUN: rc = runImmedFileTriggers(ts, te, RPMSENSE_TRIGGERUN, RPMSCRIPT_TRANSFILETRIGGER, 0); break; default: break; } } /* Run post transaction element hook for all plugins */ rpmpluginsCallPsmPost(rpmtsPlugins(ts), te, rc); /* XXX an error here would require a full abort */ (void) rpmChrootOut(); } rpmpsmFree(psm); return rc; }