[Aptitude-svn-commit] r3672 - in branches/aptitude-0.3/aptitude: . doc/en src

Daniel Burrows dburrows at costa.debian.org
Mon Jul 25 18:00:38 UTC 2005


Author: dburrows
Date: Mon Jul 25 18:00:34 2005
New Revision: 3672

Modified:
   branches/aptitude-0.3/aptitude/ChangeLog
   branches/aptitude-0.3/aptitude/doc/en/aptitude.xml
   branches/aptitude-0.3/aptitude/src/load_grouppolicy.cc
   branches/aptitude-0.3/aptitude/src/pkg_grouppolicy.cc
   branches/aptitude-0.3/aptitude/src/pkg_grouppolicy.h
   branches/aptitude-0.3/aptitude/src/pkg_tree.cc
   branches/aptitude-0.3/aptitude/src/ui.cc
Log:
Remove the filter(missing) that had to appear at the front of all groupings
by folding its function into pkg_tree.

Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog	(original)
+++ branches/aptitude-0.3/aptitude/ChangeLog	Mon Jul 25 18:00:34 2005
@@ -1,5 +1,11 @@
 2005-07-25  Daniel Burrows  <dburrows at debian.org>
 
+	* doc/en/aptitude.xml, src/load_grouppolicy.cc, src/pkg_grouppolicy.cc, src/pkg_grouppolicy.h, src/pkg_tree.cc, src/ui.cc:
+
+	  Do something like the "missing" filter in pkg_tree itself.
+	  Handle patterns in the filter class now, but for backwards
+	  compatibility, interpret the literal string "missing" as a NOP.
+
 	* doc/en/aptitude.xml, src/load_grouppolicy.cc, src/pkg_grouppolicy.cc, src/pkg_grouppolicy.h, src/generic/Makefile.am, src/generic/util.cc, src/generic/util.h:
 
 	  Add a "patterns" grouping policy and start a long-overdue

Modified: branches/aptitude-0.3/aptitude/doc/en/aptitude.xml
==============================================================================
--- branches/aptitude-0.3/aptitude/doc/en/aptitude.xml	(original)
+++ branches/aptitude-0.3/aptitude/doc/en/aptitude.xml	Mon Jul 25 18:00:34 2005
@@ -4261,13 +4261,19 @@
 	    </varlistentry>
 
 	    <varlistentry>
-	      <term><synopsis>filter(missing)</synopsis></term>
+	      <term><synopsis>filter(<replaceable>pattern</replaceable>)</synopsis></term>
 
 	      <listitem>
 		<para>
-		  Discards packages that exist only due to
-		  dependencies: ie, packages that are not installed,
-		  are not provided by any package, and are virtual.
+		  Include only packages for which at least one version
+		  matches <replaceable>pattern</replaceable>.
+		</para>
+
+		<para>
+		  If <replaceable>pattern</replaceable> is
+		  <quote>missing</quote>, no packages are discarded.
+		  This is a backwards compatibility feature and may be
+		  removed in the future.
 		</para>
 	      </listitem>
 	    </varlistentry>

Modified: branches/aptitude-0.3/aptitude/src/load_grouppolicy.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/load_grouppolicy.cc	(original)
+++ branches/aptitude-0.3/aptitude/src/load_grouppolicy.cc	Mon Jul 25 18:00:34 2005
@@ -106,19 +106,21 @@
       return NULL;
     }
 
-  if(!strcasecmp(args[0].c_str(), "missing"))
-    {
-      if(!chain)
-	chain=new pkg_grouppolicy_end_factory;
+  string s=args[0];
+  stripws(s);
+  // Backwards compatibility cruft:
+  if(!strcasecmp(s.c_str(), "missing"))
+    s = "~T";
 
-      return new pkg_grouppolicy_filter_factory(pkg_missing_filter, chain);
-    }
-  else
+  pkg_matcher *m = parse_pattern(s);
+
+  if(m == NULL)
     {
-      _error->Error(_("Bad filter type '%s' (valid types are: 'missing')"),
-		      args[0].c_str());
+      _error->Error(_("Bad pattern in filter policy: %s"), s.c_str());
       return NULL;
     }
+  else
+    return new pkg_grouppolicy_filter_factory(m, chain);
 }
 
 static pkg_grouppolicy_factory *parse_mode_policy(const arglist &args,

Modified: branches/aptitude-0.3/aptitude/src/pkg_grouppolicy.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/pkg_grouppolicy.cc	(original)
+++ branches/aptitude-0.3/aptitude/src/pkg_grouppolicy.cc	Mon Jul 25 18:00:34 2005
@@ -398,11 +398,11 @@
 /*****************************************************************************/
 class pkg_grouppolicy_filter:public pkg_grouppolicy
 {
-  pkg_filter filter;
+  pkg_matcher *filter;
 
   pkg_grouppolicy *chain;
 public:
-  pkg_grouppolicy_filter(pkg_grouppolicy_factory *_chain, pkg_filter _filter,
+  pkg_grouppolicy_filter(pkg_grouppolicy_factory *_chain, pkg_matcher *_filter,
 			 pkg_signal *_sig, desc_signal *_desc_sig)
     :pkg_grouppolicy(_sig, _desc_sig),
      filter(_filter),
@@ -411,7 +411,11 @@
   }
 
   virtual void add_package(const pkgCache::PkgIterator &pkg, pkg_subtree *root)
-  {if(filter(pkg)) chain->add_package(pkg, root);}
+  {
+    for(pkgCache::VerIterator ver = pkg.VersionList(); !ver.end(); ++ver)
+      if(filter->matches(pkg, ver))
+	chain->add_package(pkg, root);
+  }
 
   virtual ~pkg_grouppolicy_filter() {delete chain;}
 };
@@ -422,9 +426,10 @@
   return new pkg_grouppolicy_filter(chain, filter, _sig, _desc_sig);
 }
 
-bool pkg_missing_filter(const pkgCache::PkgIterator &pkg)
+pkg_grouppolicy_filter_factory::~pkg_grouppolicy_filter_factory()
 {
-  return (!pkg.VersionList().end()) || (!pkg.ProvidesList().end());
+  delete chain;
+  delete filter;
 }
 
 /*****************************************************************************/

Modified: branches/aptitude-0.3/aptitude/src/pkg_grouppolicy.h
==============================================================================
--- branches/aptitude-0.3/aptitude/src/pkg_grouppolicy.h	(original)
+++ branches/aptitude-0.3/aptitude/src/pkg_grouppolicy.h	Mon Jul 25 18:00:34 2005
@@ -61,6 +61,7 @@
 typedef sigc::signal1<void, std::wstring> desc_signal;
 
 class pkg_subtree;
+class pkg_matcher;
 
 class pkg_grouppolicy
 {
@@ -149,23 +150,21 @@
   {delete chain;}
 };
 
-// The following policy can be used as a generic filter.  Packages for which
-// the filter returns false are discarded from the input stream.
-typedef bool (*pkg_filter)(const pkgCache::PkgIterator &pkg);
-
+/** Filter out packages that don't match the given pattern. */
 class pkg_grouppolicy_filter_factory:public pkg_grouppolicy_factory
 {
   pkg_grouppolicy_factory *chain;
 
-  pkg_filter filter;
+  pkg_matcher *filter;
 public:
-  pkg_grouppolicy_filter_factory(pkg_filter _filter, pkg_grouppolicy_factory *_chain):chain(_chain), filter(_filter) {}
+  pkg_grouppolicy_filter_factory(pkg_matcher *_filter,
+				 pkg_grouppolicy_factory *_chain)
+    :chain(_chain), filter(_filter) {}
 
   virtual pkg_grouppolicy *instantiate(pkg_signal *_sig,
 				       desc_signal *_desc_sig);
 
-  virtual ~pkg_grouppolicy_filter_factory()
-  {delete chain;}
+  virtual ~pkg_grouppolicy_filter_factory();
 };
 
 // Filters out missing packages -- packages with no available versions and
@@ -260,8 +259,6 @@
   virtual ~pkg_grouppolicy_task_factory();
 };
 
-class pkg_matcher;
-
 // Groups packages using the given list of matchers/tree names.  Match
 // results can be substituted into tree names using \N notation.
 class pkg_grouppolicy_matchers_factory:public pkg_grouppolicy_factory

Modified: branches/aptitude-0.3/aptitude/src/pkg_tree.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/pkg_tree.cc	(original)
+++ branches/aptitude-0.3/aptitude/src/pkg_tree.cc	Mon Jul 25 18:00:34 2005
@@ -591,6 +591,10 @@
 
 	  progress.OverallProgress(num, total, 1, _("Building view"));
 
+	  // Filter useless packages up-front.
+	  if(i.VersionList().end() && i.ProvidesList().end())
+	    continue;
+
 	  if((!limit) || limit->matches(i, pkg_item::visible_version(i)))
 	    {
 	      empty=false;

Modified: branches/aptitude-0.3/aptitude/src/ui.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/ui.cc	(original)
+++ branches/aptitude-0.3/aptitude/src/ui.cc	Mon Jul 25 18:00:34 2005
@@ -155,7 +155,7 @@
 
 const char *default_pkgstatusdisplay="%d";
 const char *default_pkgheaderdisplay="%N %n #%B %u %o";
-const char *default_grpstr="filter(missing),task,status,section(subdir,passthrough),section(topdir)";
+const char *default_grpstr="task,status,section(subdir,passthrough),section(topdir)";
 
 static fragment *apt_error_fragment()
 {
@@ -574,7 +574,7 @@
       if(!grp)
 	// Eek!  The default grouping failed to parse.  Fall all the
 	// way back.
-	grp=new pkg_grouppolicy_filter_factory(pkg_missing_filter,new pkg_grouppolicy_task_factory(new pkg_grouppolicy_status_factory(new pkg_grouppolicy_section_factory(pkg_grouppolicy_section_factory::split_subdir,true,new pkg_grouppolicy_section_factory(pkg_grouppolicy_section_factory::split_topdir,false,new pkg_grouppolicy_end_factory())))));
+	grp=new pkg_grouppolicy_task_factory(new pkg_grouppolicy_status_factory(new pkg_grouppolicy_section_factory(pkg_grouppolicy_section_factory::split_subdir,true,new pkg_grouppolicy_section_factory(pkg_grouppolicy_section_factory::split_topdir,false,new pkg_grouppolicy_end_factory()))));
     }
 
   pkg_tree *tree=new pkg_tree(grpstr.c_str(), grp);
@@ -602,7 +602,7 @@
   pkg_grouppolicy_factory *grp=NULL;
   std::string grpstr="";
 
-  grpstr="filter(missing),hier";
+  grpstr="hier";
   grp=parse_grouppolicy(grpstr);
 
   pkg_tree *tree=new pkg_tree(grpstr.c_str(), grp);



More information about the Aptitude-svn-commit mailing list