Merge remote-tracking branch 'upstream/debian/sid' into debian/sid
[apt.git] / apt-private / private-search.cc
index ff4140fa70099d09128445c4b7490402f8e82e78..ecd5d7fadd9492ed11fa91091fbb9b614549d240 100644 (file)
@@ -1,40 +1,30 @@
 // Includes                                                            /*{{{*/
-#include <apt-pkg/error.h>
+#include <config.h>
+
 #include <apt-pkg/cachefile.h>
-#include <apt-pkg/cachefilter.h>
 #include <apt-pkg/cacheset.h>
-#include <apt-pkg/init.h>
-#include <apt-pkg/progress.h>
-#include <apt-pkg/sourcelist.h>
 #include <apt-pkg/cmndline.h>
-#include <apt-pkg/strutl.h>
-#include <apt-pkg/fileutl.h>
 #include <apt-pkg/pkgrecords.h>
-#include <apt-pkg/srcrecords.h>
-#include <apt-pkg/version.h>
 #include <apt-pkg/policy.h>
-#include <apt-pkg/tagfile.h>
-#include <apt-pkg/algorithms.h>
-#include <apt-pkg/sptr.h>
-#include <apt-pkg/pkgsystem.h>
-#include <apt-pkg/indexfile.h>
-#include <apt-pkg/metaindex.h>
+#include <apt-pkg/progress.h>
+#include <apt-pkg/cacheiterators.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
 
-#include <sstream>
-#include <utility>
-#include <cassert>
-#include <locale.h>
+#include <apt-private/private-cacheset.h>
+#include <apt-private/private-output.h>
+#include <apt-private/private-search.h>
+
+#include <string.h>
 #include <iostream>
-#include <unistd.h>
-#include <errno.h>
-#include <regex.h>
-#include <stdio.h>
-#include <iomanip>
-#include <algorithm>
+#include <sstream>
 #include <map>
+#include <string>
+#include <utility>
 
-#include "private-search.h"
-#include "private-cacheset.h"
+#include <apti18n.h>
                                                                        /*}}}*/
 
 bool FullTextSearch(CommandLine &CmdL)                                 /*{{{*/
@@ -53,7 +43,7 @@ bool FullTextSearch(CommandLine &CmdL)                                        /*{{{*/
    std::map<std::string, std::string>::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;