From da45cac856377c490ef25006c4dfaba3afa8c3b3 Mon Sep 17 00:00:00 2001 From: ewt Date: Wed, 17 Feb 1999 03:42:57 +0000 Subject: [PATCH] moved things to transaction flags from independent install/uninstall flags CVS patchset: 2799 CVS date: 1999/02/17 03:42:57 --- CHANGES | 2 ++ install.c | 18 +++++------------- lib/install.c | 18 +++++++++--------- lib/rpmlib.h | 21 +++++++-------------- lib/transaction.c | 10 ++-------- lib/uninstall.c | 24 ++++++++++++------------ rpm.c | 40 ++++++++++++++++++++-------------------- 7 files changed, 57 insertions(+), 76 deletions(-) diff --git a/CHANGES b/CHANGES index 850841a..43c9726 100644 --- a/CHANGES +++ b/CHANGES @@ -10,6 +10,8 @@ - fixed config file problems during chroot upgrades - fixed %attr brokenness for directories - augment linux provides/requires for glibc 2.1 backward compatibility. + - fixed --noscript, --notriggers, --excludedocs, and a bunch + of other install/remove flags 2.5.x -> 2.90 - added --excludepath diff --git a/install.c b/install.c index 0266133..a26f81c 100644 --- a/install.c +++ b/install.c @@ -78,7 +78,7 @@ static void * showProgress(const Header h, const rpmCallbackType what, return rc; } -int doInstall(const char * rootdir, const char ** argv, int installFlags, +int doInstall(const char * rootdir, const char ** argv, int transFlags, int interfaceFlags, int probFilter, rpmRelocation * relocations) { rpmdb db = NULL; @@ -98,19 +98,15 @@ int doInstall(const char * rootdir, const char ** argv, int installFlags, int stopInstall = 0; size_t nb; int notifyFlags = interfaceFlags | (rpmIsVerbose() ? INSTALL_LABEL : 0 ); - int transFlags = 0; rpmProblemSet probs, finalProbs; int dbIsOpen = 0; const char ** sourcePackages; - if (installFlags & RPMINSTALL_TEST) + if (transFlags & RPMTRANS_FLAG_TEST) mode = O_RDONLY; else mode = O_RDWR | O_CREAT; - if (installFlags & RPMINSTALL_TEST) - transFlags |= RPMTRANS_FLAG_TEST; - rpmMessage(RPMMESS_DEBUG, _("counting packages to install\n")); for (filename = argv, numPackages = 0; *filename; filename++, numPackages++) ; @@ -289,7 +285,7 @@ int doInstall(const char * rootdir, const char ** argv, int installFlags, continue; } - if (!(installFlags & RPMINSTALL_TEST)) + if (!(transFlags & RPMTRANS_FLAG_TEST)) numFailed += rpmInstallSourcePackage(rootdir, fd, NULL, showProgress, (void *) notifyFlags, NULL); @@ -309,7 +305,7 @@ int doInstall(const char * rootdir, const char ** argv, int installFlags, return numFailed; } -int doUninstall(const char * rootdir, const char ** argv, int uninstallFlags, +int doUninstall(const char * rootdir, const char ** argv, int transFlags, int interfaceFlags) { rpmdb db; dbiIndexSet matches; @@ -323,14 +319,10 @@ int doUninstall(const char * rootdir, const char ** argv, int uninstallFlags, struct rpmDependencyConflict * conflicts; int numConflicts; int stopUninstall = 0; - int transFlags = 0; int numPackages = 0; rpmProblemSet probs; - if (uninstallFlags & RPMUNINSTALL_TEST) - transFlags |= RPMTRANS_FLAG_TEST; - - if (uninstallFlags & RPMUNINSTALL_TEST) + if (transFlags & RPMTRANS_FLAG_TEST) mode = O_RDONLY; else mode = O_RDWR | O_EXCL; diff --git a/lib/install.c b/lib/install.c index a12f42a..eb70430 100644 --- a/lib/install.c +++ b/lib/install.c @@ -283,8 +283,8 @@ int installBinaryPackage(const char * rootdir, rpmdb db, FD_t fd, Header h, int freeFileMem = 0; char * currDir = NULL, * tmpptr; - if (flags & RPMINSTALL_JUSTDB) - flags |= RPMINSTALL_NOSCRIPTS; + if (flags & RPMTRANS_FLAG_JUSTDB) + flags |= RPMTRANS_FLAG_NOSCRIPTS; headerGetEntry(h, RPMTAG_NAME, &type, (void **) &name, &fileCount); headerGetEntry(h, RPMTAG_VERSION, &type, (void **) &version, &fileCount); @@ -292,7 +292,7 @@ int installBinaryPackage(const char * rootdir, rpmdb db, FD_t fd, Header h, rpmMessage(RPMMESS_DEBUG, _("package: %s-%s-%s files test = %d\n"), - name, version, release, flags & RPMINSTALL_TEST); + name, version, release, flags & RPMTRANS_FLAG_TEST); rc = rpmdbFindPackage(db, name, &matches); if (rc == -1) return 2; @@ -317,7 +317,7 @@ int installBinaryPackage(const char * rootdir, rpmdb db, FD_t fd, Header h, chroot(rootdir); } - if (!(flags & RPMINSTALL_JUSTDB) && headerIsEntry(h, RPMTAG_FILENAMES)) { + if (!(flags & RPMTRANS_FLAG_JUSTDB) && headerIsEntry(h, RPMTAG_FILENAMES)) { /* old format relocateable packages need the entire default prefix stripped to form the cpio list, while all other packages need the leading / stripped */ @@ -342,7 +342,7 @@ int installBinaryPackage(const char * rootdir, rpmdb db, FD_t fd, Header h, files = NULL; } - if (flags & RPMINSTALL_TEST) { + if (flags & RPMTRANS_FLAG_TEST) { if (rootdir) { chroot("."); chdir(currDir); @@ -355,7 +355,7 @@ int installBinaryPackage(const char * rootdir, rpmdb db, FD_t fd, Header h, rpmMessage(RPMMESS_DEBUG, _("running preinstall script (if any)\n")); if (runInstScript("/", h, RPMTAG_PREIN, RPMTAG_PREINPROG, scriptArg, - flags & RPMINSTALL_NOSCRIPTS, scriptFd)) { + flags & RPMTRANS_FLAG_NOSCRIPTS, scriptFd)) { if (freeFileMem) freeFileMemory(fileMem); if (rootdir) { @@ -472,7 +472,7 @@ int installBinaryPackage(const char * rootdir, rpmdb db, FD_t fd, Header h, free(fileStates); if (freeFileMem) freeFileMemory(fileMem); - } else if (flags & RPMINSTALL_JUSTDB) { + } else if (flags & RPMTRANS_FLAG_JUSTDB) { char ** fileNames; if (headerGetEntry(h, RPMTAG_FILENAMES, NULL, (void **) &fileNames, @@ -509,11 +509,11 @@ int installBinaryPackage(const char * rootdir, rpmdb db, FD_t fd, Header h, rpmMessage(RPMMESS_DEBUG, _("running postinstall script (if any)\n")); if (runInstScript(rootdir, h, RPMTAG_POSTIN, RPMTAG_POSTINPROG, scriptArg, - flags & RPMINSTALL_NOSCRIPTS, scriptFd)) { + flags & RPMTRANS_FLAG_NOSCRIPTS, scriptFd)) { return 2; } - if (!(flags & RPMINSTALL_NOTRIGGERS)) { + if (!(flags & RPMTRANS_FLAG_NOTRIGGERS)) { /* Run triggers this package sets off */ if (runTriggers(rootdir, db, RPMSENSE_TRIGGERIN, h, 0, scriptFd)) { return 2; diff --git a/lib/rpmlib.h b/lib/rpmlib.h index 1e33aa6..4b3e625 100644 --- a/lib/rpmlib.h +++ b/lib/rpmlib.h @@ -150,20 +150,6 @@ extern const struct headerSprintfExtension rpmHeaderFormats[]; #define RPMFILE_LICENSE (1 << 7) #define RPMFILE_README (1 << 8) -#define RPMINSTALL_TEST (1 << 2) -#define RPMINSTALL_UPGRADETOOLD (1 << 4) -#define RPMINSTALL_NODOCS (1 << 5) -#define RPMINSTALL_NOSCRIPTS (1 << 6) -#define RPMINSTALL_ALLFILES (1 << 9) -#define RPMINSTALL_JUSTDB (1 << 10) -#define RPMINSTALL_KEEPOBSOLETE (1 << 11) -#define RPMINSTALL_NOTRIGGERS (1 << 13) - -#define RPMUNINSTALL_TEST (1 << 0) -#define RPMUNINSTALL_NOSCRIPTS (1 << 1) -#define RPMUNINSTALL_JUSTDB (1 << 2) -#define RPMUNINSTALL_NOTRIGGERS (1 << 3) - #define RPMVERIFY_NONE 0 #define RPMVERIFY_MD5 (1 << 0) #define RPMVERIFY_FILESIZE (1 << 1) @@ -381,6 +367,12 @@ void rpmdepFreeConflicts(struct rpmDependencyConflict * conflicts, int #define RPMTRANS_FLAG_TEST (1 << 0) #define RPMTRANS_FLAG_BUILD_PROBS (1 << 1) +#define RPMTRANS_FLAG_NOSCRIPTS (1 << 2) +#define RPMTRANS_FLAG_JUSTDB (1 << 3) +#define RPMTRANS_FLAG_NOTRIGGERS (1 << 4) +#define RPMTRANS_FLAG_NODOCS (1 << 5) +#define RPMTRANS_FLAG_ALLFILES (1 << 6) +#define RPMTRANS_FLAG_KEEPOBSOLETE (1 << 7) typedef enum rpmProblemType_e { RPMPROB_BADARCH, RPMPROB_BADOS, @@ -419,6 +411,7 @@ int rpmRunTransactions(rpmTransactionSet ts, rpmCallbackFunction notify, #define RPMPROB_FILTER_FORCERELOCATE (1 << 3) #define RPMPROB_FILTER_REPLACENEWFILES (1 << 4) #define RPMPROB_FILTER_REPLACEOLDFILES (1 << 5) +#define RPMPROB_FILTER_UPGRADETOOLD (1 << 6) /** messages.c **/ diff --git a/lib/transaction.c b/lib/transaction.c index e50bf86..b56291a 100644 --- a/lib/transaction.c +++ b/lib/transaction.c @@ -68,7 +68,6 @@ int rpmRunTransactions(rpmTransactionSet ts, rpmCallbackFunction notify, int i, j; struct availableList * al = &ts->addedPackages; int rc, ourrc = 0; - int instFlags = 0, rmFlags = 0; rpmProblem prob; struct availablePackage * alp; rpmProblemSet probs; @@ -90,11 +89,6 @@ int rpmRunTransactions(rpmTransactionSet ts, rpmCallbackFunction notify, /* FIXME: we completely ignore net shared paths here! */ - if (flags & RPMTRANS_FLAG_TEST) { - instFlags |= RPMINSTALL_TEST; - rmFlags |= RPMUNINSTALL_TEST; - } - probs = psCreate(); *newProbs = probs; hdrs = alloca(sizeof(*hdrs) * al->size); @@ -320,7 +314,7 @@ int rpmRunTransactions(rpmTransactionSet ts, rpmCallbackFunction notify, if (fd) { if (installBinaryPackage(ts->root, ts->db, fd, - hdrs[alp - al->list], instFlags, notify, + hdrs[alp - al->list], flags, notify, notifyData, alp->key, fi->actions, fi->fc ? fi->replaced : NULL, ts->scriptFd)) @@ -342,7 +336,7 @@ int rpmRunTransactions(rpmTransactionSet ts, rpmCallbackFunction notify, /* fi is left at the first package which is to be removed */ for (i = 0; i < ts->numRemovedPackages; i++, fi++) { if (removeBinaryPackage(ts->root, ts->db, ts->removedPackages[i], - rmFlags, fi->actions, ts->scriptFd)) + flags, fi->actions, ts->scriptFd)) ourrc++; } diff --git a/lib/uninstall.c b/lib/uninstall.c index adaf752..35fbc8e 100644 --- a/lib/uninstall.c +++ b/lib/uninstall.c @@ -32,8 +32,8 @@ int removeBinaryPackage(char * prefix, rpmdb db, unsigned int offset, int_16 * fileModesList; int scriptArg; - if (flags & RPMUNINSTALL_JUSTDB) - flags |= RPMUNINSTALL_NOSCRIPTS; + if (flags & RPMTRANS_FLAG_JUSTDB) + flags |= RPMTRANS_FLAG_NOSCRIPTS; h = rpmdbGetRecord(db, offset); if (h == NULL) { @@ -56,7 +56,7 @@ int removeBinaryPackage(char * prefix, rpmdb db, unsigned int offset, scriptArg = dbiIndexSetCount(matches) - 1; dbiFreeIndexRecord(matches); - if (!(flags & RPMUNINSTALL_NOTRIGGERS)) { + if (!(flags & RPMTRANS_FLAG_NOTRIGGERS)) { /* run triggers from this package which are keyed on installed packages */ if (runImmedTriggers(prefix, db, RPMSENSE_TRIGGERUN, h, -1, scriptFd)) { @@ -68,17 +68,17 @@ int removeBinaryPackage(char * prefix, rpmdb db, unsigned int offset, return 1; } - if (!(flags & RPMUNINSTALL_TEST)) { + if (!(flags & RPMTRANS_FLAG_TEST)) { if (runInstScript(prefix, h, RPMTAG_PREUN, RPMTAG_PREUNPROG, scriptArg, - flags & RPMUNINSTALL_NOSCRIPTS, scriptFd)) { + flags & RPMTRANS_FLAG_NOSCRIPTS, scriptFd)) { headerFree(h); return 1; } } rpmMessage(RPMMESS_DEBUG, _("will remove files test = %d\n"), - flags & RPMUNINSTALL_TEST); - if (!(flags & RPMUNINSTALL_JUSTDB) && + flags & RPMTRANS_FLAG_TEST); + if (!(flags & RPMTRANS_FLAG_JUSTDB) && headerGetEntry(h, RPMTAG_FILENAMES, &type, (void **) &fileList, &fileCount)) { if (prefix[0]) { @@ -111,7 +111,7 @@ int removeBinaryPackage(char * prefix, rpmdb db, unsigned int offset, rpmMessage(RPMMESS_DEBUG, _(" file: %s action: %s\n"), fnbuffer, fileActionString(actions[i])); - if (!(flags & RPMUNINSTALL_TEST)) + if (!(flags & RPMTRANS_FLAG_TEST)) removeFile(fnbuffer, fileFlagsList[i], fileModesList[i], actions[i]); } @@ -120,13 +120,13 @@ int removeBinaryPackage(char * prefix, rpmdb db, unsigned int offset, free(fileMd5List); } - if (!(flags & RPMUNINSTALL_TEST)) { + if (!(flags & RPMTRANS_FLAG_TEST)) { rpmMessage(RPMMESS_DEBUG, _("running postuninstall script (if any)\n")); runInstScript(prefix, h, RPMTAG_POSTUN, RPMTAG_POSTUNPROG, scriptArg, - flags & RPMUNINSTALL_NOSCRIPTS, scriptFd); + flags & RPMTRANS_FLAG_NOSCRIPTS, scriptFd); } - if (!(flags & RPMUNINSTALL_NOTRIGGERS)) { + if (!(flags & RPMTRANS_FLAG_NOTRIGGERS)) { /* Run postun triggers which are set off by this package's removal */ if (runTriggers(prefix, db, RPMSENSE_TRIGGERPOSTUN, h, 0, scriptFd)) { return 2; @@ -136,7 +136,7 @@ int removeBinaryPackage(char * prefix, rpmdb db, unsigned int offset, headerFree(h); rpmMessage(RPMMESS_DEBUG, _("removing database entry\n")); - if (!(flags & RPMUNINSTALL_TEST)) + if (!(flags & RPMTRANS_FLAG_TEST)) rpmdbRemove(db, offset, 0); return 0; diff --git a/rpm.c b/rpm.c index bff389c..32fed3b 100755 --- a/rpm.c +++ b/rpm.c @@ -1046,7 +1046,7 @@ int main(int argc, char ** argv) { } #endif - if (oldPackage && upgrade) + if (oldPackage && !upgrade) argerror(_("--oldpackage may only be used during upgrades")); if ((ftpProxy || ftpPort) && !(bigMode == MODE_INSTALL || @@ -1061,9 +1061,6 @@ int main(int argc, char ** argv) { argerror(_("http options can only be used during package queries, " "installs, and upgrades")); - if (oldPackage || (force && upgrade)) - installFlags |= RPMINSTALL_UPGRADETOOLD; - if (noPgp && bigMode != MODE_CHECKSIG) argerror(_("--nopgp may only be used during signature checking")); @@ -1267,34 +1264,37 @@ int main(int argc, char ** argv) { if (!poptPeekArg(optCon)) argerror(_("no packages given for uninstall")); - if (noScripts) uninstallFlags |= RPMUNINSTALL_NOSCRIPTS; - if (noTriggers) uninstallFlags |= RPMUNINSTALL_NOTRIGGERS; - if (test) uninstallFlags |= RPMUNINSTALL_TEST; - if (justdb) uninstallFlags |= RPMUNINSTALL_JUSTDB; + if (noScripts) uninstallFlags |= RPMTRANS_FLAG_NOSCRIPTS; + if (noTriggers) uninstallFlags |= RPMTRANS_FLAG_NOTRIGGERS; + if (test) uninstallFlags |= RPMTRANS_FLAG_TEST; + if (justdb) uninstallFlags |= RPMTRANS_FLAG_JUSTDB; if (noDeps) interfaceFlags |= UNINSTALL_NODEPS; if (allMatches) interfaceFlags |= UNINSTALL_ALLMATCHES; - ec = doUninstall(rootdir, (const char **)poptGetArgs(optCon), uninstallFlags, - interfaceFlags); + ec = doUninstall(rootdir, (const char **)poptGetArgs(optCon), + uninstallFlags, interfaceFlags); break; case MODE_INSTALL: if (force) { probFilter |= RPMPROB_FILTER_REPLACEPKG | RPMPROB_FILTER_REPLACEOLDFILES | - RPMPROB_FILTER_REPLACENEWFILES; + RPMPROB_FILTER_REPLACENEWFILES | + RPMPROB_FILTER_UPGRADETOOLD; } if (replaceFiles) probFilter |= RPMPROB_FILTER_REPLACEOLDFILES | RPMPROB_FILTER_REPLACENEWFILES; if (badReloc) probFilter |= RPMPROB_FILTER_FORCERELOCATE; if (replacePackages) probFilter |= RPMPROB_FILTER_REPLACEPKG; - if (test) installFlags |= RPMINSTALL_TEST; - if (noScripts) installFlags |= RPMINSTALL_NOSCRIPTS; - if (noTriggers) installFlags |= RPMINSTALL_NOTRIGGERS; + if (oldPackage) probFilter |= RPMPROB_FILTER_UPGRADETOOLD; if (ignoreArch) probFilter |= RPMPROB_FILTER_IGNOREARCH; if (ignoreOs) probFilter |= RPMPROB_FILTER_IGNOREOS; - if (allFiles) installFlags |= RPMINSTALL_ALLFILES; - if (justdb) installFlags |= RPMINSTALL_JUSTDB; + + if (allFiles) installFlags |= RPMTRANS_FLAG_ALLFILES; + if (justdb) installFlags |= RPMTRANS_FLAG_JUSTDB; + if (test) installFlags |= RPMTRANS_FLAG_TEST; + if (noScripts) installFlags |= RPMTRANS_FLAG_NOSCRIPTS; + if (noTriggers) installFlags |= RPMTRANS_FLAG_NOTRIGGERS; if (showPercents) interfaceFlags |= INSTALL_PERCENT; if (showHash) interfaceFlags |= INSTALL_HASH; @@ -1304,9 +1304,9 @@ int main(int argc, char ** argv) { if (!incldocs) { if (excldocs) - installFlags |= RPMINSTALL_NODOCS; + installFlags |= RPMTRANS_FLAG_NODOCS; else if (rpmGetBooleanVar(RPMVAR_EXCLUDEDOCS)) - installFlags |= RPMINSTALL_NODOCS; + installFlags |= RPMTRANS_FLAG_NODOCS; } if (!poptPeekArg(optCon)) @@ -1325,8 +1325,8 @@ int main(int argc, char ** argv) { relocations[numRelocations].newPath = NULL; } - ec += doInstall(rootdir, (const char **)poptGetArgs(optCon), installFlags, - interfaceFlags, probFilter, relocations); + ec += doInstall(rootdir, (const char **)poptGetArgs(optCon), + installFlags, interfaceFlags, probFilter, relocations); break; case MODE_QUERY: -- 2.7.4