int rpmtsAddInstallElement(rpmts ts, Header h, fnpyKey key, int upgrade, rpmRelocation * relocs) { int op = (upgrade == 0) ? RPMTE_INSTALL : RPMTE_UPGRADE; if (rpmtsSetupTransactionPlugins(ts) == RPMRC_FAIL) return 1; return addPackage(ts, h, key, op, relocs); }
int rpmtsAddReinstallElement(rpmts ts, Header h, fnpyKey key) { if (rpmtsSetupTransactionPlugins(ts) == RPMRC_FAIL) return 1; /* TODO: pull relocations from installed package */ /* TODO: should reinstall of non-installed package fail? */ return addPackage(ts, h, key, RPMTE_REINSTALL, NULL); }
int rpmtsAddEraseElement(rpmts ts, Header h, int dboffset) { if (rpmtsSetupTransactionPlugins(ts) == RPMRC_FAIL) return 1; return removePackage(ts, h, NULL); }
int rpmtsAddInstallElement(rpmts ts, Header h, fnpyKey key, int upgrade, rpmRelocation * relocs) { tsMembers tsmem = rpmtsMembers(ts); rpm_color_t tscolor = rpmtsColor(ts); rpmte p = NULL; int isSource = headerIsSource(h); int ec = 0; int oc = tsmem->orderCount; if (rpmtsSetupTransactionPlugins(ts) == RPMRC_FAIL) { ec = 1; goto exit; } /* Check for supported payload format if it's a package */ if (key && headerCheckPayloadFormat(h) != RPMRC_OK) { ec = 1; goto exit; } /* Source packages are never "upgraded" */ if (isSource) upgrade = 0; /* Do lazy (readonly?) open of rpm database for upgrades. */ if (upgrade && rpmtsGetRdb(ts) == NULL && rpmtsGetDBMode(ts) != -1) { if ((ec = rpmtsOpenDB(ts, rpmtsGetDBMode(ts))) != 0) goto exit; } p = rpmteNew(ts, h, TR_ADDED, key, relocs); if (p == NULL) { ec = 1; goto exit; } /* Check binary packages for redundancies in the set */ if (!isSource) { oc = findPos(ts, tscolor, p, upgrade); /* If we're replacing a previously added element, free the old one */ if (oc >= 0 && oc < tsmem->orderCount) { rpmalDel(tsmem->addedPackages, tsmem->order[oc]); tsmem->order[oc] = rpmteFree(tsmem->order[oc]); /* If newer NEVR was already added, we're done */ } else if (oc < 0) { p = rpmteFree(p); goto exit; } } if (oc >= tsmem->orderAlloced) { tsmem->orderAlloced += (oc - tsmem->orderAlloced) + tsmem->delta; tsmem->order = xrealloc(tsmem->order, tsmem->orderAlloced * sizeof(*tsmem->order)); } tsmem->order[oc] = p; if (oc == tsmem->orderCount) { tsmem->orderCount++; } if (tsmem->addedPackages == NULL) { tsmem->addedPackages = rpmalCreate(rpmtsPool(ts), 5, rpmtsFlags(ts), tscolor, rpmtsPrefColor(ts)); } rpmalAdd(tsmem->addedPackages, p); /* Add erasure elements for old versions and obsoletions on upgrades */ /* XXX TODO: If either of these fails, we'd need to undo all additions */ if (upgrade) { addUpgradeErasures(ts, tscolor, p, rpmteColor(p), h); addObsoleteErasures(ts, tscolor, p); } exit: return ec; }