moved things to transaction flags from independent install/uninstall flags

CVS patchset: 2799
CVS date: 1999/02/17 03:42:57
This commit is contained in:
ewt 1999-02-17 03:42:57 +00:00
parent a56247c2b2
commit da45cac856
7 changed files with 57 additions and 76 deletions

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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 **/

View File

@ -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++;
}

View File

@ -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;

40
rpm.c
View File

@ -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: