summaryrefslogtreecommitdiff
path: root/rpmdb.c
diff options
context:
space:
mode:
Diffstat (limited to 'rpmdb.c')
-rw-r--r--rpmdb.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/rpmdb.c b/rpmdb.c
index 25c088da9..b72f0a598 100644
--- a/rpmdb.c
+++ b/rpmdb.c
@@ -12,6 +12,7 @@ enum modes {
MODE_VERIFYDB = (1 << 2),
MODE_EXPORTDB = (1 << 3),
MODE_IMPORTDB = (1 << 4),
+ MODE_SALVAGEDB = (1 << 5),
};
static int mode = 0;
@@ -24,6 +25,8 @@ static struct poptOption dbOptsTable[] = {
NULL},
{ "verifydb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR|POPT_ARGFLAG_DOC_HIDDEN),
&mode, MODE_VERIFYDB, N_("verify database files"), NULL},
+ { "salvagedb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR|POPT_ARGFLAG_DOC_HIDDEN),
+ &mode, MODE_SALVAGEDB, N_("salvage database"), NULL},
{ "exportdb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_EXPORTDB,
N_("export database to stdout header list"),
NULL},
@@ -108,8 +111,11 @@ int main(int argc, char *argv[])
ec = rpmtsInitDB(ts, 0644);
break;
case MODE_REBUILDDB:
+ case MODE_SALVAGEDB:
{ rpmVSFlags vsflags = rpmExpandNumeric("%{_vsflags_rebuilddb}");
rpmVSFlags ovsflags = rpmtsSetVSFlags(ts, vsflags);
+ if (mode == MODE_SALVAGEDB)
+ rpmDefineMacro(NULL, "_rebuilddb_salvage 1", 0);
ec = rpmtsRebuildDB(ts);
rpmtsSetVSFlags(ts, ovsflags);
} break;