[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [p2-dev] Executing a P2 traverse query

On 2010-12-09 23:21, David Orme wrote:
Hi all,

I'm trying to execute a P2 query that can chase down all IUs resulting from starting with several features and traversing the tree of IUs and included features until all dependencies are satisfied.

I found the example of how to construct such a query at wiki.eclipse.org/Query_Language_for_p2, but can't work out how to run it against a set of inputs.

It seems that I need an IQueryable to execute against and some way to specify the set of Features to use as roots.

I've got an IQueryable, (and can successfully createIUAnyQuery() against it), but haven't been able to work out how to extend this to query for the subset that is reachable from a set of Features that are being treated as roots and are available via the IQueryable.

Any pointers to code snippets or anything else would be welcome.

The simplest query from the wiki looks like this:

$0.traverse(parent | parent.requirements.collect(rc | select(iu | iu ~= rc)).flatten())

It expects a collection (i.e. your set of roots) as it's first argument. You then apply it to your IQueryable.

In the _expression_, 'parent' is the variable holding each item from the roots. The _expression_ compares all iu's from your IQueryable with the requirements of the 'parent' and this results in new instances that will become 'parent' as the query traverses recursively.

Thomas Hallgren