This solution seems to work OK. I've just committed it as the fix for FELIX-2337.
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 >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>> >>>> >>> >>> >> >
