On 5/28/10 10:35, Derek Baum wrote:
This solution seems to work OK.
I've just committed it as the fix for FELIX-2337.
Great, thanks!
-> richard
Derek
On 28 May 2010 12:59, Derek Baum<[email protected]> wrote:
yes.
Currently gogo converts any array result into a list (Closure.java:228):
if (last.result instanceof Object[])
{
return Arrays.asList((Object[]) last.result);
}
If it didn't do this, then
g! headers (bundles)
will work directly with any extra coercion being needed.
We would also need to allow a method to access arrays:
b = (bundles)
b1 = $b 1
(currently this is 'b1 = $b get 1', because b is converted to an array
list).
I'll test this locally, to check it doesn't break the tests or have any
obvious bad side effects.
Derek
On 28 May 2010 00:39, Richard S. Hall<[email protected]> wrote:
Do you have a suggestion for a quick fix before we try to release?
The plan was to cut a release on Sunday...
-> richard
On 5/27/10 7:33 PM, Derek Baum wrote:
Further investigation shows:
g! type bundles
bundles is Bundle[] context:bundles()
true
g! type headers
headers is void felix:headers(Bundle[])
true
// so bundles appears to return the Bundle[] type required by the headers
command
g! b = (bundles)
0|Active | 0|org.apache.felix.framework (2.0.4)
1|Active | 1|org.apache.felix.gogo.command (0.5.0.SNAPSHOT)
2|Active | 1|org.apache.felix.gogo.runtime (0.5.0.SNAPSHOT)
3|Active | 1|org.apache.felix.gogo.shell (0.5.0.SNAPSHOT)
g! set b
ArrayList b [org.apache.felix.framework [0],
org.apache.f...
// but the result is actually converted into an ArrayList
// and the current coercion mechanism is failing to convert the ArrayList
back to the required Array[]
// explicit conversion works, but should not be necessary:
g! ba = $b toarray
0|Active | 0|org.apache.felix.framework (2.0.4)
1|Active | 1|org.apache.felix.gogo.command (0.5.0.SNAPSHOT)
2|Active | 1|org.apache.felix.gogo.runtime (0.5.0.SNAPSHOT)
3|Active | 1|org.apache.felix.gogo.shell (0.5.0.SNAPSHOT)
g! set ba
Bundle[] ba [Lorg.osgi.framework.Bundle;@67d225a7
g! headers $ba
System Bundle (0)
-----------------
Bundle-Description = This bundle is system specific; it implements
various
system services.
// etc
Note: https://issues.apache.org/jira/browse/FELIX-2337 is also related
to
this, as
x = command args
can set x to an array[], while
x = (command args)
will always convert the result to an ArrayList.
ArrayLists are undoubtedly more "useful", but I wonder whether array[]
results should be automatically converted to ArrayLists, rather than just
coerced as needed, like any other type.
Derek
On 28 May 2010 00:12, Richard S. Hall<[email protected]> wrote:
On 5/27/10 7:10 PM, Guillaume Nodet wrote:
It seems the new coercion mechanism is a bit flawed:
g! headers (bundles)
gogo: IllegalArgumentException: Cannot coerce
headers[[org.apache.felix.framework [0],
org.apache.felix.bundlerepository
[1], org.apache.felix.gogo.command [2], org.apache.felix.gogo.runtime
[3],
org.apache.felix.gogo.shell [4]]] to any of [(Bundle[])]
That should work without problems. The coercer needs to be enhacned
with
the
following code:
http://svn.apache.org/repos/asf/felix/trunk/gogo/commands/src/main/java/org/apache/felix/gogo/commands/converter/DefaultConverter.java
Thanks. I will try to look into it tomorrow.
-> richard
On Thu, May 27, 2010 at 20:49, Richard S. Hall<[email protected]>
wrote:
So, we are gearing up to release the 3.0 version of the framework. As
part
of this release, we're going to include Gogo as the default shell in
the
framework binary distribution. Gogo requires Java 5 or later, but
don't
worry, the framework still targets lesser JREs. :-)
I've uploaded a snapshot of the distribution in tar.gz and zip if
anyone
wants to play with it:
https://repository.apache.org/content/groups/snapshots-group/org/apache/felix/org.apache.felix.main.distribution/2.1.0-SNAPSHOT/
Word of warning, the "ps" command has been renamed to "lb" (i.e., list
bundles)...type "help" to see available commands.
-> richard