/*@refcounted@*/
rpmts ts; /*!< Iterator transaction set. */
int tag; /*!< Iterator type. */
- void * keyp; /*!< Iterator key. */
+ const void * keyp; /*!< Iterator key. */
size_t keylen; /*!< Iterator key length. */
int active; /*!< Iterator is active? */
* @return new general iterator
*/
/*@null@*/
-rpmgi rpmgiNew(rpmts ts, int tag, void * keyp, size_t keylen)
+rpmgi rpmgiNew(rpmts ts, int tag, /*@null@*/ const void * keyp, size_t keylen)
/*@globals internalState @*/
/*@modifies ts, internalState @*/;
#include "debug.h"
-static int gitag = RPMDBI_FTSWALK;
+static const char * gitagstr = "packages";
+static const char * gikeystr = NULL;
static int ftsOpts = 0;
static const char * queryFormat = NULL;
{ "rpmgidebug", 'd', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmgi_debug, -1,
N_("debug generalized iterator"), NULL},
- { "rpmdb", '\0', POPT_ARG_VAL, &gitag, RPMDBI_PACKAGES,
- N_("iterate rpmdb"), NULL },
- { "hdlist", '\0', POPT_ARG_VAL, &gitag, RPMDBI_HDLIST,
- N_("iterate hdlist"), NULL },
- { "arglist", '\0', POPT_ARG_VAL, &gitag, RPMDBI_ARGLIST,
- N_("iterate arglist"), NULL },
- { "ftswalk", '\0', POPT_ARG_VAL, &gitag, RPMDBI_FTSWALK,
- N_("iterate fts(3) walk"), NULL },
+ { "tag", '\0', POPT_ARG_STRING|POPT_ARGFLAG_SHOW_DEFAULT, &gitagstr, 0,
+ N_("iterate tag index"), NULL },
+ { "key", '\0', POPT_ARG_STRING|POPT_ARGFLAG_SHOW_DEFAULT, &gikeystr, 0,
+ N_("tag value key"), NULL },
{ "qf", '\0', POPT_ARG_STRING, &queryFormat, 0,
N_("use the following query format"), "QUERYFORMAT" },
rpmts ts = NULL;
rpmVSFlags vsflags;
rpmgi gi = NULL;
+ int gitag = RPMDBI_PACKAGES;
const char ** av;
int ac;
int rc = 0;
if (ftsOpts == 0)
ftsOpts = (FTS_COMFOLLOW | FTS_LOGICAL | FTS_NOSTAT);
+ if (gitagstr != NULL) {
+ gitag = tagValue(gitagstr);
+ if (gitag < 0) {
+ fprintf(stderr, _("unknown --tag argument: %s\n"), gitagstr);
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ /* XXX ftswalk segfault with no args. */
+
ts = rpmtsCreate();
vsflags = rpmExpandNumeric("%{?_vsflags_query}");
if (rpmcliQueryFlags & VERIFY_DIGEST)
(void) rpmtsSetTid(ts, tid);
}
- gi = rpmgiNew(ts, gitag, NULL, 0);
+ gi = rpmgiNew(ts, gitag, gikeystr, 0);
av = poptGetArgs(optCon);
(void) rpmgiSetArgs(gi, av, ftsOpts);