Oops, dumb copy-paste error causing --verifydb to --rebuilddb instead
[platform/upstream/rpm.git] / rpmdb.c
1 #include "system.h"
2
3 #include <popt.h>
4 #include <rpm/rpmcli.h>
5 #include "cliutils.h"
6 #include "debug.h"
7
8 #if !defined(__GLIBC__) && !defined(__APPLE__)
9 char ** environ = NULL;
10 #endif
11
12 enum modes {
13     MODE_INITDB         = (1 << 0),
14     MODE_REBUILDDB      = (1 << 1),
15     MODE_VERIFYDB       = (1 << 2),
16 };
17
18 static int mode = 0;
19
20 static struct poptOption optionsTable[] = {
21     { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmcliAllPoptTable, 0,
22         N_("Common options for all rpm modes and executables:"), NULL },
23     { "initdb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_INITDB,
24         N_("initialize database"), NULL},
25     { "rebuilddb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_REBUILDDB,
26         N_("rebuild database inverted lists from installed package headers"),
27         NULL},
28     { "verifydb", '\0', (POPT_ARG_VAL|POPT_ARGFLAG_OR), &mode, MODE_VERIFYDB,
29         N_("verify database files"), NULL},
30
31     POPT_AUTOALIAS
32     POPT_AUTOHELP
33     POPT_TABLEEND
34 };
35
36 int main(int argc, char *argv[])
37 {
38     int ec = EXIT_FAILURE;
39     poptContext optCon = rpmcliInit(argc, argv, optionsTable);
40     rpmts ts = NULL;
41     
42     if (argc < 2 || poptPeekArg(optCon)) {
43         printUsage(optCon, stderr, 0);
44         goto exit;
45     }
46
47     ts = rpmtsCreate();
48     rpmtsSetRootDir(ts, rpmcliRootDir);
49
50     switch (mode) {
51     case MODE_INITDB:
52         ec = rpmtsInitDB(ts, 0644);
53         break;
54     case MODE_REBUILDDB:
55     {   rpmVSFlags vsflags = rpmExpandNumeric("%{_vsflags_rebuilddb}");
56         rpmVSFlags ovsflags = rpmtsSetVSFlags(ts, vsflags);
57         ec = rpmtsRebuildDB(ts);
58         vsflags = rpmtsSetVSFlags(ts, ovsflags);
59     }   break;
60     case MODE_VERIFYDB:
61         ec = rpmtsVerifyDB(ts);
62         break;
63     default:
64         argerror(_("only one major mode may be specified"));
65     }
66
67 exit:
68     rpmtsFree(ts);
69     rpmcliFini(optCon);
70     return ec;
71 }