summaryrefslogtreecommitdiff
path: root/tools/EptCacheOptions.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/EptCacheOptions.h')
-rw-r--r--tools/EptCacheOptions.h293
1 files changed, 293 insertions, 0 deletions
diff --git a/tools/EptCacheOptions.h b/tools/EptCacheOptions.h
new file mode 100644
index 0000000..f666e12
--- /dev/null
+++ b/tools/EptCacheOptions.h
@@ -0,0 +1,293 @@
+#ifndef EPTCACHE_OPTIONS_H
+#define EPTCACHE_OPTIONS_H
+
+/*
+ * Commandline parser for tagcoll
+ *
+ * Copyright (C) 2003,2004,2005,2006 Enrico Zini
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <ept/config.h>
+#include <wibble/commandline/parser.h>
+
+namespace wibble {
+namespace commandline {
+
+struct EptCacheOptions : public StandardParserWithMandatoryCommand
+{
+public:
+ BoolOption* out_quiet;
+ BoolOption* out_verbose;
+
+ BoolOption* out_debug;
+ BoolOption* out_names;
+ BoolOption* out_short;
+ BoolOption* out_full;
+ BoolOption* out_tagcoll;
+ IntOption* out_limit;
+ IntOption* out_cutoff;
+ StringOption* out_sort;
+
+ StringOption* filter_tagexpr;
+ StringOption* filter_type;
+
+#if 0
+ BoolOption* out_facets;
+ BoolOption* match_invert;
+
+ BoolOption* misc_local;
+ BoolOption* misc_reindex;
+ IntOption* misc_distance;
+ StringOption* misc_vocfile;
+
+ BoolOption* smse_reltags;
+ BoolOption* smse_disctags;
+
+#endif
+ Engine* show;
+ Engine* search;
+ Engine* dumpavail;
+ Engine* reindex;
+ Engine* info;
+ Engine* related;
+#if 0
+ Engine* update;
+ Engine* selfcheck;
+ Engine* check;
+ Engine* tagcat;
+ Engine* tagshow;
+ Engine* tagsearch;
+ Engine* cat;
+ Engine* grep;
+ Engine* install;
+ Engine* diff;
+ Engine* maintainers;
+ Engine* tag;
+ Engine* submit;
+ Engine* todo;
+ Engine* score;
+ Engine* stats;
+ Engine* todoreport;
+ Engine* smartsearch;
+ Engine* vocfilter;
+#endif
+
+ EptCacheOptions()
+ : StandardParserWithMandatoryCommand("ept-cache", VERSION, 1, "enrico@enricozini.org")
+ {
+ usage = "<command> [options and arguments]";
+ description = "High-level tool to access package information";
+
+ // Output options
+ out_verbose = add<BoolOption>("verbose", 'v', "verbose", "",
+ "enable verbose output");
+ out_debug = add<BoolOption>("debug", 0, "debug", "",
+ "enable debugging output (including verbose output)");
+
+ // Create the package output group
+ OptionGroup* pkgOutputOpts = createGroup("Output options");
+ out_names = pkgOutputOpts->add<BoolOption>("names", 0, "names", "",
+ "output only the names of the packages");
+ out_quiet = pkgOutputOpts->add<BoolOption>("quiet", 'q', "quiet", "",
+ "do not write anything to standard output");
+ out_short = pkgOutputOpts->add<BoolOption>("short", 0, "short", "",
+ "output the names of the packages, plus a short description");
+ out_full = pkgOutputOpts->add<BoolOption>("full", 0, "full", "",
+ "output the full record of package data");
+ out_tagcoll = pkgOutputOpts->add<BoolOption>("tagcoll", 0, "tagcoll", "",
+ "tagcoll-style output");
+ out_limit = pkgOutputOpts->add<IntOption>("limit", 0, "limit", "count",
+ "maximum number of packages to show");
+ out_cutoff = pkgOutputOpts->add<IntOption>("cutoff", 0, "cutoff", "percent",
+ "do not show results that are this percent worse than the top result");
+ out_sort = pkgOutputOpts->add<StringOption>("sort", 's', "sort", "method",
+ "sort order (use 'list' for a list of supported options)");
+
+ OptionGroup* filterOpts = createGroup("Filter options");
+ filter_tagexpr = filterOpts->add<StringOption>("ftags", 0, "ftags", "tagexpr",
+ "only print packages matching this tag expression");
+ filter_type = filterOpts->add<StringOption>("type", 't', "type", "name",
+ "only print packages of a given type (use 'list' for a list of supported types)");
+
+#if 0
+ // Create the collection output group
+ OptionGroup* collOutputOpts = createGroup("Options controlling transformations of tag data on output");
+ out_facets = collOutputOpts->add<BoolOption>("facets", 0, "facets", "",
+ "output only the names of the facets (mainly used for computing statistics)");
+
+ // Create the matching options group
+ OptionGroup* matchOpts = createGroup("Options controlling matching of packages");
+ match_invert = matchOpts->add<BoolOption>("invert", 'i', "invert", "",
+ "invert the match, selecting non-matching items");
+
+ selfcheck = addEngine("selfcheck", "",
+ "perform a series of internal self checks using the current tag data");
+
+ check = addEngine("check", "<file>",
+ "check that all the tags in the given tagged collection are present "
+ "in the tag vocabulary. Checks the main database if no file is "
+ "specified");
+
+ tagcat = addEngine("tagcat", "", "output the tag vocabulary");
+
+ tagshow = addEngine("tagshow", "",
+ "show the vocabulary informations about a tag");
+
+ tagsearch = addEngine("tagsearch", "<string [string [string ...]]>",
+ "show a summary of all tags whose data contains the given strings");
+
+ related = addEngine("related", "<pkg1[,pkg2[,pkg3...]]>",
+ "show packages related to the given one(s)",
+ "Output a list of the packages that are related to the given package or list of packages. "
+ "If more than one package are to be specified, separate them with commas.\n"
+ "The --distance option can be used to control how closely related the output "
+ "packages should be from the package(s) specified.");
+ related->examples = "debtags related mutt,mozilla-browser";
+ misc_distance = related->add<IntOption>("distance", 'd', "distance",
+ "set the maximum distance to use for the \"related\" command (defaults to 0)");
+
+ cat = addEngine("cat", "", "output the full package tag database");
+ cat->add(matchOpts);
+ cat->add(collOutputOpts);
+#endif
+
+ show = addEngine("show", "<pkg>",
+ "show informations about a package, like apt-cache show does, but "
+ "adds new fields with all available extra metadata");
+ show->add(pkgOutputOpts);
+
+ search = addEngine("search", "[keywords]",
+ "output the names and descriptions of the packages that match"
+ " the given tag expression");
+ search->add(pkgOutputOpts);
+ search->add(filterOpts);
+
+ dumpavail = addEngine("dumpavail", "[keywords]",
+ "output the full package database, with all extra metadata");
+ dumpavail->add(pkgOutputOpts);
+ dumpavail->add(filterOpts);
+
+ reindex = addEngine("reindex", "",
+ "updates the various indexes managed by libept (requires root).\n"
+ "It needs to be run as root");
+ reindex->add(out_quiet);
+
+ info = addEngine("info", "",
+ "show information about the data providers.\n");
+
+ related = addEngine("related", "[pkgnames]",
+ "show packages similar to the given ones",
+ "Show packages similar to the given ones. Package similarity is "
+ " computed by how many common elements there are in their"
+ " descriptions and their tags");
+ related->add(pkgOutputOpts);
+ related->add(filterOpts);
+
+#if 0
+ update = addEngine("update", "",
+ "updates the package tag database (requires root)",
+ "Collect package tag data from the sources listed in "
+ "/etc/debtags/sources.list, then regenerate the debtags "
+ "tag database and main index.\n"
+ "It needs to be run as root");
+ misc_local = update->add<BoolOption>("local", 0, "local",
+ "do not download files when performing an update");
+ misc_reindex = update->add<BoolOption>("reindex", 0, "reindex",
+ "do not download any file, just do reindexing if needed");
+#endif
+
+#if 0
+ grep = addEngine("grep", "<tag expression>",
+ "output the lines of the full package tag database that match"
+ " the given tag expression");
+ grep->add(matchOpts);
+ grep->add(collOutputOpts);
+
+ install = addEngine("install", "<tag expression>",
+ "apt-get install the packages that match the given tag expression",
+ "Invokes apt-get install with the names of the packages matched "
+ "by the given tag expression. If you want to see what packages "
+ "would be installed you can use debtags search, as "
+ "debtags install just calls apt-get install on all "
+ "the results of an equivalent debtags search. Please note "
+ "that debtags install is just a prototype feature useful "
+ "for experimenting in some environments like Custom Debian "
+ "Distributions. For this reason it is suggested that you "
+ "use debtags just as a way to find packages, and "
+ "proper package managers as the way to install them");
+ install->add(matchOpts);
+
+ diff = addEngine("diff", "[filename]",
+ "create a tag patch between the current tag database and the tag"
+ "collection [filename]. Standard input is used if filename is not specified");
+ diff->aliases.push_back("mkpatch");
+
+ maintainers = addEngine("maintainers", "",
+ "create a tagged collection of maintainers and the tags of the"
+ "packages they maintain");
+ maintainers->add(collOutputOpts);
+
+ tag = addEngine("tag", "{add|rm|ls} <package> [tags...]",
+ "view and edit the tags for a package",
+ "General manipulation of tags, useful for automation in scripts.\n"
+ "It can be used in three ways:\n"
+ "tag add <package> <tags...> will add the tags to the given package\n"
+ "tag rm <package> <tags...> will remove the tags from the given package\n"
+ "tag ls <package> will output the names of the tags of the given package");
+
+ submit = addEngine("submit", "[patch]",
+ "mail the given patch file to the central tag repository."
+ "If [patch] is omitted, mail the local tag modifications.");
+
+ todo = addEngine("todo", "",
+ "print a list of the installed packages that are not yet tagged");
+ todo->add(pkgOutputOpts);
+
+ score = addEngine("score", "",
+ "score uninstalled packages according to how often their tags "
+ "appear in the packages that are installed already");
+
+ stats = addEngine("stats", "",
+ "print statistics about Debtags");
+
+ todoreport = addEngine("todoreport", "",
+ "print a report of packages needing work");
+
+ smartsearch = addEngine("smartsearch", "<word [word1 [+tag [-tag1 ...]]]>",
+ "Perform a keyword search integrated with related packages.\n"
+ "A + prefix indicates a wanted tag. A - prefix indicates "
+ "an unwanted tag. Other words indicate keywords to search.\n"
+ "Remember to use '--' before unwanted tags to avoid to have "
+ "them interpreted as commandline switches.\n");
+ smse_reltags = smartsearch->add<BoolOption>("relevant", 0, "relevant",
+ "only print the tag names sorted by increasing relevance");
+ smse_disctags = smartsearch->add<BoolOption>("discriminant", 0, "discriminant",
+ "only print the tag names sorted by increasing discriminance");
+
+ vocfilter = addEngine("vocfilter", "tagfile",
+ "filter out the tags that are not found in the given vocabulary file");
+ misc_vocfile = vocfilter->add<StringOption>("vocabulary", 0, "vocabulary",
+ "vocabulary file to use instead of the current debtags vocabulary");
+#endif
+ }
+};
+
+}
+}
+
+// vim:set ts=4 sw=4:
+#endif