[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