int opt, argn;
struct zpm zpm;
char *dbfile = 0, *pkgstr = 0, *pkgid = 0;
+ int range = 0, wantleast = 0, argismax = 0;
+ char *minpkg = 0, *maxpkg = 0;
char *sql;
sqlite3_str *include;
include = sqlite3_str_new(NULL);
exclude = sqlite3_str_new(NULL);
- while ((opt = getopt(ac, av, "f:s:S:I")) != -1) {
+ while ((opt = getopt(ac, av, "f:s:S:Imrl")) != -1) {
switch (opt) {
case 'f': dbfile = optarg; break;
case 's': sqlite3_str_appendf(include,",%Q", optarg);
break;
case 'I': sqlite3_str_appendall(include,",'installed'");
break;
+ case 'l': wantleast = 1; break;
+ case 'r': range = 1; break;
+ case 'm': argismax = 1; range = 1; break;
default:
usage();
exit(EXIT_FAILURE);
}
argn = optind;
+ if (ac < argn) {
+ usage();
+ exit(EXIT_FAILURE);
+ }
+
+ pkgstr = minpkg = av[argn];
+ if (ac > argn) {
+ maxpkg = av[argn+1];
+ }
+
+ if (maxpkg) {
+ range = 1;
+ }
+
if (!dbfile) {
fprintf(stderr, "must specify db\n");
return 1;
excludes+1);
}
- if (ac >= argn) {
- pkgstr = av[argn];
- }
-
sql = sqlite3_str_value(query);
- pkgid = zpm_findpkg(&zpm, pkgstr, sql);
+ if (range) {
+ if (argismax) {
+ /* swap the sense of the arguments */
+ minpkg = maxpkg;
+ maxpkg = pkgstr;
+ }
+ pkgid = zpm_findpkg_range(&zpm, minpkg, maxpkg, sql, wantleast);
+ } else {
+ pkgid = zpm_findpkg(&zpm, pkgstr, sql);
+ }
sqlite3_free(sql);
if (pkgid) {