X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/e910e489479bc1b854bc89d293c6f3011e494f11..291a386f1e65c40a1acb01a9a5614ad00efc509d:/apt-private/private-search.cc?ds=sidebyside diff --git a/apt-private/private-search.cc b/apt-private/private-search.cc index ff4140fa7..ecd5d7fad 100644 --- a/apt-private/private-search.cc +++ b/apt-private/private-search.cc @@ -1,40 +1,30 @@ // Includes /*{{{*/ -#include +#include + #include -#include #include -#include -#include -#include #include -#include -#include #include -#include -#include #include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include -#include -#include -#include -#include +#include +#include +#include + +#include #include -#include -#include -#include -#include -#include -#include +#include #include +#include +#include -#include "private-search.h" -#include "private-cacheset.h" +#include /*}}}*/ bool FullTextSearch(CommandLine &CmdL) /*{{{*/ @@ -53,7 +43,7 @@ bool FullTextSearch(CommandLine &CmdL) /*{{{*/ std::map::const_iterator K; LocalitySortedVersionSet bag; - OpTextProgress progress; + OpTextProgress progress(*_config); progress.OverallProgress(0, 100, 50, _("Sorting")); GetLocalitySortedVersionSet(CacheFile, bag, progress); LocalitySortedVersionSet::iterator V = bag.begin(); @@ -61,25 +51,29 @@ bool FullTextSearch(CommandLine &CmdL) /*{{{*/ progress.OverallProgress(50, 100, 50, _("Full Text Search")); progress.SubProgress(bag.size()); int Done = 0; - for ( ;V != bag.end(); V++) + for ( ;V != bag.end(); ++V) { if (Done%500 == 0) progress.Progress(Done); - Done++; + ++Done; int i; pkgCache::DescIterator Desc = V.TranslatedDescription(); pkgRecords::Parser &parser = records.Lookup(Desc.FileList()); bool all_found = true; - for(i=0; patterns[i] != NULL; i++) + for(i=0; patterns[i] != NULL; ++i) { // FIXME: use regexp instead of simple find() const char *pattern = patterns[i]; all_found &= ( strstr(V.ParentPkg().Name(), pattern) != NULL || - parser.ShortDesc().find(pattern) != std::string::npos || - parser.LongDesc().find(pattern) != std::string::npos); + strcasestr(parser.ShortDesc().c_str(), pattern) != NULL || + strcasestr(parser.LongDesc().c_str(), pattern) != NULL); + // search patterns are AND by default so we can skip looking further + // on the first mismatch + if(all_found == false) + break; } if (all_found) { @@ -93,7 +87,7 @@ bool FullTextSearch(CommandLine &CmdL) /*{{{*/ // FIXME: SORT! and make sorting flexible (alphabetic, by pkg status) // output the sorted map - for (K = output_map.begin(); K != output_map.end(); K++) + for (K = output_map.begin(); K != output_map.end(); ++K) std::cout << (*K).second << std::endl; return true;