Handler for debugfilter set
| 785 | |
| 786 | //! Handler for debugfilter set |
| 787 | static command_result setFilter(color_ostream& out, |
| 788 | std::vector<std::string>& parameters) |
| 789 | { |
| 790 | bool persist = false; |
| 791 | size_t pos = 1u; |
| 792 | if (pos < parameters.size() && |
| 793 | parameters[pos] == persistent) { |
| 794 | pos++; |
| 795 | persist = true; |
| 796 | } |
| 797 | if (pos >= parameters.size()) { |
| 798 | ERR(command,out).print("set requires at least the level parameter\n"); |
| 799 | return CR_WRONG_USAGE; |
| 800 | } |
| 801 | const std::string& level = parameters[pos]; |
| 802 | auto iter = std::find_if(levelNames.begin(), levelNames.end(), |
| 803 | [&level](const LevelName& v) -> bool { |
| 804 | return v.match(level); |
| 805 | }); |
| 806 | if (iter == levelNames.end()) { |
| 807 | ERR(command,out).print("level ('{}') parameter must be one of " |
| 808 | "trace, debug, info, warning, error.\n", |
| 809 | parameters[pos]); |
| 810 | return CR_WRONG_USAGE; |
| 811 | } |
| 812 | |
| 813 | DebugCategory::level filterLevel = static_cast<DebugCategory::level>( |
| 814 | iter - levelNames.begin()); |
| 815 | |
| 816 | unsigned line = 0; |
| 817 | Filter* newFilter = nullptr; |
| 818 | return applyCategoryFilters(out, parameters, pos + 1, |
| 819 | // After parameters parsing |
| 820 | [¶meters, pos, filterLevel,persist,&newFilter](DebugManager&, const std::regex& catRegex, const std::regex& pluginRegex) |
| 821 | { |
| 822 | auto& filMan = FilterManager::getInstance(); |
| 823 | newFilter = &filMan.emplaceNew(filterLevel, |
| 824 | pos+1 < parameters.size()?parameters[pos+1]:".", |
| 825 | catRegex, |
| 826 | pos+2 < parameters.size()?parameters[pos+2]:".", |
| 827 | pluginRegex, |
| 828 | persist).first->second; |
| 829 | return filMan.blockSlot(); |
| 830 | }, |
| 831 | // Per item |
| 832 | [filterLevel, &line, &out, &newFilter](DebugCategory& cat) { |
| 833 | auto old = cat.allowed(); |
| 834 | cat.allowed(filterLevel); |
| 835 | newFilter->addMatch(); |
| 836 | printCategoryListEntry(out, line, cat, old); |
| 837 | }, |
| 838 | // After list |
| 839 | [&out,&persist]() { |
| 840 | if (persist) |
| 841 | return FilterManager::getInstance().saveConfig(out); |
| 842 | return CR_OK; |
| 843 | }); |
| 844 | } |
nothing calls this directly
no test coverage detected