summaryrefslogtreecommitdiff
path: root/src/cmdline/cmdline_util.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmdline/cmdline_util.cc')
-rw-r--r--src/cmdline/cmdline_util.cc43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/cmdline/cmdline_util.cc b/src/cmdline/cmdline_util.cc
index bb0eb2fb..d7b1dcb4 100644
--- a/src/cmdline/cmdline_util.cc
+++ b/src/cmdline/cmdline_util.cc
@@ -732,6 +732,49 @@ namespace aptitude
return rval;
}
+
+ bool read_user_tag_applications(std::vector<tag_application> &user_tags,
+ const char *config_item,
+ const bool is_add, const bool implicit)
+ {
+ const Configuration::Item *tree = aptcfg->Tree(config_item);
+ if(tree == NULL)
+ return true;
+
+ for(Configuration::Item *item = tree->Child;
+ item != NULL;
+ item = item->Next)
+ {
+ if(implicit)
+ user_tags.push_back(tag_application(is_add, item->Value, NULL));
+ else
+ {
+ const std::string arg(item->Value);
+ const std::string::size_type splitloc = arg.find(',');
+ if(splitloc == arg.npos)
+ return _error->Error(_("No comma following tag name \"%s\""),
+ arg.c_str());
+ else
+ {
+ const std::string patternstr(arg, splitloc + 1);
+ const std::vector<const char *> terminators;
+ cwidget::util::ref_ptr<aptitude::matching::pattern> p =
+ aptitude::matching::parse(patternstr,
+ terminators,
+ true,
+ false);
+ if(p.valid() == false)
+ return false;
+
+ const std::string tag(arg, 0, splitloc);
+ user_tags.push_back(tag_application(is_add, tag, p));
+ }
+ }
+ }
+
+ return true;
+ }
+
void apply_user_tags(const std::vector<tag_application> &user_tags)
{
using namespace matching;