- 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
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;
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++)
;
continue;
}
- if (!(installFlags & RPMINSTALL_TEST))
+ if (!(transFlags & RPMTRANS_FLAG_TEST))
numFailed += rpmInstallSourcePackage(rootdir, fd, NULL,
showProgress, (void *) notifyFlags, NULL);
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;
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;
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);
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;
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 */
files = NULL;
}
- if (flags & RPMINSTALL_TEST) {
+ if (flags & RPMTRANS_FLAG_TEST) {
if (rootdir) {
chroot(".");
chdir(currDir);
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) {
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,
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;
#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)
#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,
#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 **/
int i, j;
struct availableList * al = &ts->addedPackages;
int rc, ourrc = 0;
- int instFlags = 0, rmFlags = 0;
rpmProblem prob;
struct availablePackage * alp;
rpmProblemSet probs;
/* 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);
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))
/* 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++;
}
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) {
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)) {
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]) {
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]);
}
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;
headerFree(h);
rpmMessage(RPMMESS_DEBUG, _("removing database entry\n"));
- if (!(flags & RPMUNINSTALL_TEST))
+ if (!(flags & RPMTRANS_FLAG_TEST))
rpmdbRemove(db, offset, 0);
return 0;
}
#endif
- if (oldPackage && upgrade)
+ if (oldPackage && !upgrade)
argerror(_("--oldpackage may only be used during upgrades"));
if ((ftpProxy || ftpPort) && !(bigMode == MODE_INSTALL ||
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"));
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;
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))
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: