Main Page   Modules   Data Structures   File List   Data Fields   Globals   Related Pages  

lib/poptQV.c

Go to the documentation of this file.
00001 
00006 #include "system.h"
00007 
00008 #include <rpmcli.h>
00009 #include <rpmbuild.h>
00010 
00011 #include "debug.h"
00012 
00013 struct rpmQVArguments_s rpmQVArgs;
00014 int specedit = 0;
00015 
00016 #define POPT_QUERYFORMAT        1000
00017 #define POPT_WHATREQUIRES       1001
00018 #define POPT_WHATPROVIDES       1002
00019 #define POPT_QUERYBYNUMBER      1003
00020 #define POPT_TRIGGEREDBY        1004
00021 #define POPT_DUMP               1005
00022 #define POPT_SPECFILE           1006
00023 
00024 /* ========== Query/Verify source popt args */
00025 static void rpmQVSourceArgCallback( /*@unused@*/ poptContext con,
00026                 /*@unused@*/ enum poptCallbackReason reason,
00027                 const struct poptOption * opt, /*@unused@*/ const char * arg, 
00028                 /*@unused@*/ const void * data)
00029         /*@modifies rpmQVArgs @*/
00030 {
00031     QVA_t qva = &rpmQVArgs;
00032 
00033     switch (opt->val) {
00034     case 'q':
00035     case 'Q':
00036     case 'V':
00037         if (qva->qva_mode == ' ') {
00038             qva->qva_mode = opt->val;
00039             qva->qva_char = ' ';
00040         }
00041         break;
00042     case 'a': qva->qva_source |= RPMQV_ALL; qva->qva_sourceCount++; break;
00043     case 'f': qva->qva_source |= RPMQV_PATH; qva->qva_sourceCount++; break;
00044     case 'g': qva->qva_source |= RPMQV_GROUP; qva->qva_sourceCount++; break;
00045     case 'p': qva->qva_source |= RPMQV_RPM; qva->qva_sourceCount++; break;
00046     case POPT_WHATPROVIDES: qva->qva_source |= RPMQV_WHATPROVIDES; 
00047                               qva->qva_sourceCount++; break;
00048     case POPT_WHATREQUIRES: qva->qva_source |= RPMQV_WHATREQUIRES; 
00049                               qva->qva_sourceCount++; break;
00050     case POPT_TRIGGEREDBY: qva->qva_source |= RPMQV_TRIGGEREDBY;
00051                               qva->qva_sourceCount++; break;
00052 
00053 /* XXX SPECFILE is not verify sources */
00054     case POPT_SPECFILE:
00055         qva->qva_source |= RPMQV_SPECFILE;
00056         qva->qva_sourceCount++;
00057         break;
00058     case POPT_QUERYBYNUMBER:
00059         qva->qva_source |= RPMQV_DBOFFSET; 
00060         qva->qva_sourceCount++;
00061         break;
00062     }
00063 }
00064 
00068 struct poptOption rpmQVSourcePoptTable[] = {
00069  { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA, 
00070         rpmQVSourceArgCallback, 0, NULL, NULL },
00071  { "all", 'a', 0, 0, 'a',
00072         N_("query/verify all packages"), NULL },
00073  { "file", 'f', 0, 0, 'f',
00074         N_("query/verify package(s) owning file"), "FILE" },
00075  { "group", 'g', 0, 0, 'g',
00076         N_("query/verify package(s) in group"), "GROUP" },
00077  { "package", 'p', 0, 0, 'p',
00078         N_("query/verify a package file (i.e. a binary *.rpm file)"), NULL },
00079  { "query", 'q', POPT_ARGFLAG_DOC_HIDDEN, NULL, 'q',
00080         N_("rpm query mode"), NULL },
00081  { "querybynumber", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, 
00082         POPT_QUERYBYNUMBER, NULL, NULL },
00083  { "querytags", '\0', 0, 0, 'Q',
00084         N_("display known query tags"), NULL },
00085  { "specfile", '\0', 0, 0, POPT_SPECFILE,
00086         N_("query a spec file"), N_("<spec>") },
00087  { "triggeredby", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_TRIGGEREDBY, 
00088         N_("query the package(s) triggered by the package"), "PACKAGE" },
00089  { "verify", 'V', POPT_ARGFLAG_DOC_HIDDEN, NULL, 'V',
00090         N_("rpm verify mode"), NULL },
00091  { NULL, 'y',  POPT_ARGFLAG_DOC_HIDDEN, NULL, 'V',
00092         N_("rpm verify mode (legacy)"), NULL },
00093  { "whatrequires", '\0', 0, 0, POPT_WHATREQUIRES, 
00094         N_("query/verify the package(s) which require a dependency"), "CAPABILITY" },
00095  { "whatprovides", '\0', 0, 0, POPT_WHATPROVIDES, 
00096         N_("query/verify the package(s) which provide a dependency"), "CAPABILITY" },
00097    POPT_TABLEEND
00098 };
00099 
00100 /* ========== Query specific popt args */
00101 
00102 static void queryArgCallback(/*@unused@*/poptContext con,
00103                 /*@unused@*/enum poptCallbackReason reason,
00104                 const struct poptOption * opt, const char * arg, 
00105                 /*@unused@*/ const void * data)
00106         /*@modifies rpmQVArgs @*/
00107 {
00108     QVA_t qva = &rpmQVArgs;
00109 
00110     switch (opt->val) {
00111     case 'c': qva->qva_flags |= QUERY_FOR_CONFIG | QUERY_FOR_LIST; break;
00112     case 'd': qva->qva_flags |= QUERY_FOR_DOCS | QUERY_FOR_LIST; break;
00113     case 'l': qva->qva_flags |= QUERY_FOR_LIST; break;
00114     case 's': qva->qva_flags |= QUERY_FOR_STATE | QUERY_FOR_LIST;
00115         break;
00116     case POPT_DUMP: qva->qva_flags |= QUERY_FOR_DUMPFILES | QUERY_FOR_LIST;
00117         break;
00118     case 'v': rpmIncreaseVerbosity();    break;
00119 
00120     case POPT_QUERYFORMAT:
00121         if (arg) {
00122             char * qf = (char *)qva->qva_queryFormat;
00123             if (qf) {
00124                 int len = strlen(qf) + strlen(arg) + 1;
00125                 qf = xrealloc(qf, len);
00126                 strcat(qf, arg);
00127             } else {
00128                 qf = xmalloc(strlen(arg) + 1);
00129                 strcpy(qf, arg);
00130             }
00131             qva->qva_queryFormat = qf;
00132         }
00133         break;
00134     }
00135 }
00136 
00140 struct poptOption rpmQueryPoptTable[] = {
00141  { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA, 
00142         queryArgCallback, 0, NULL, NULL },
00143  { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmQVSourcePoptTable, 0,
00144         NULL, NULL },
00145  { "configfiles", 'c', 0, 0, 'c',
00146         N_("list all configuration files"), NULL },
00147  { "docfiles", 'd', 0, 0, 'd',
00148         N_("list all documentation files"), NULL },
00149  { "dump", '\0', 0, 0, POPT_DUMP,
00150         N_("dump basic file information"), NULL },
00151  { "list", 'l', 0, 0, 'l',
00152         N_("list files in package"), NULL },
00153 
00154  /* Duplicate file attr flags from packages into command line options. */
00155  { "noghost", '\0', POPT_BIT_CLR|POPT_ARGFLAG_DOC_HIDDEN,
00156         &rpmQVArgs.qva_fflags, RPMFILE_GHOST,
00157         N_("skip %%ghost files"), NULL },
00158 #ifdef  NOTEVER         /* XXX there's hardly a need for these */
00159  { "nolicense", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
00160         &rpmQVArgs.qva_fflags, RPMFILE_LICENSE,
00161         N_("skip %%license files"), NULL },
00162  { "noreadme", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
00163         &rpmQVArgs.qva_fflags, RPMFILE_README,
00164         N_("skip %%readme files"), NULL },
00165 #endif
00166 
00167  { "qf", '\0', POPT_ARG_STRING | POPT_ARGFLAG_DOC_HIDDEN, 0, 
00168         POPT_QUERYFORMAT, NULL, NULL },
00169  { "queryformat", '\0', POPT_ARG_STRING, 0, POPT_QUERYFORMAT,
00170         N_("use the following query format"), "QUERYFORMAT" },
00171  { "specedit", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &specedit, -1,
00172         N_("substitute i18n sections into spec file"), NULL },
00173  { "state", 's', 0, 0, 's',
00174         N_("display the states of the listed files"), NULL },
00175  { "verbose", 'v', 0, 0, 'v',
00176         N_("display a verbose file listing"), NULL },
00177    POPT_TABLEEND
00178 };
00179 
00183 struct poptOption rpmVerifyPoptTable[] = {
00184 #ifdef  DYING
00185  { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA, 
00186         verifyArgCallback, 0, NULL, NULL },
00187 #endif  /* DYING */
00188  { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmQVSourcePoptTable, 0,
00189         NULL, NULL },
00190 
00191  /* Duplicate file verify flags from packages into command line options. */
00192  { "nomd5", '\0', POPT_BIT_SET, &rpmQVArgs.qva_flags, VERIFY_MD5,
00193         N_("don't verify MD5 digest of files"), NULL },
00194  { "nosize", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
00195         &rpmQVArgs.qva_flags, VERIFY_SIZE,
00196         N_("don't verify size of files"), NULL },
00197  { "nolinkto", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
00198         &rpmQVArgs.qva_flags, VERIFY_LINKTO,
00199         N_("don't verify symlink path of files"), NULL },
00200  { "nouser", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
00201         &rpmQVArgs.qva_flags, VERIFY_USER,
00202         N_("don't verify owner of files"), NULL },
00203  { "nogroup", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
00204         &rpmQVArgs.qva_flags, VERIFY_GROUP,
00205         N_("don't verify group of files"), NULL },
00206  { "nomtime", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
00207         &rpmQVArgs.qva_flags, VERIFY_MTIME,
00208         N_("don't verify modification time of files"), NULL },
00209  { "nomode", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
00210         &rpmQVArgs.qva_flags, VERIFY_MODE,
00211         N_("don't verify mode of files"), NULL },
00212  { "nordev", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
00213         &rpmQVArgs.qva_flags, VERIFY_RDEV,
00214         N_("don't verify mode of files"), NULL },
00215 
00216  { "nofiles", '\0', POPT_BIT_SET, &rpmQVArgs.qva_flags, VERIFY_FILES,
00217         N_("don't verify files in package"), NULL},
00218  { "nodeps", '\0', POPT_BIT_SET, &rpmQVArgs.qva_flags, VERIFY_DEPS,
00219         N_("don't verify package dependencies"), NULL },
00220  { "noscript", '\0', POPT_BIT_SET,&rpmQVArgs.qva_flags, VERIFY_SCRIPT,
00221         N_("don't execute %verifyscript (if any)"), NULL },
00222  /* XXX legacy had a trailing s on --noscript */
00223  { "noscripts", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
00224         &rpmQVArgs.qva_flags, VERIFY_SCRIPT,
00225         N_("don't execute %verifyscript (if any)"), NULL },
00226  { "nodigest", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
00227         &rpmQVArgs.qva_flags, VERIFY_DIGEST,
00228         N_("don't verify header SHA1 digest"), NULL },
00229 
00230     POPT_TABLEEND
00231 };

Generated at Thu Sep 6 11:25:41 2001 for rpm by doxygen1.2.8.1 written by Dimitri van Heesch, © 1997-2001