Changes 0.12.0 to 0.12.1
------------------------

** Bug
    * [FELIX-4533] - Gogo runtime does not advertise published services


Changes 0.10.0 to 0.12.0
------------------------

** Bug
    * [FELIX-4336] - The use of inheritable thread locals in ThreadIO can cause problems

** Improvement
    * [FELIX-3590] - Add system property resolution to CommandSessionImpl
    * [FELIX-4363] - The CommandSession get/set methods are not thread safe


Changes 0.8.0 to 0.10.0
-----------------------

** Bug
    * [FELIX-2870] - ConcurrentModificationException in gogo runtime
    * [FELIX-2894] - Gogo does not handles options but not parameters
    * [FELIX-2927] - [gogo] coercion mechanism invokes foo(String) instead
      of foo(int) - even with explicit int argument

Changes 0.6.1 to 0.8.0
----------------------

** Bug
    * [FELIX-2723] - When the execution of a closure with pipes is
      interrupted, pipes should be interrupted too

** New Feature
    * [FELIX-2761] - Add a way to listen to execution of command lines
    * [FELIX-2764] - Publish OSGi EventAdmin events when executing a command
      line

Changes 0.6.0 to 0.6.1
----------------------

** Bug
    * [FELIX-1473] - [gogo] The syntax does not provide a way to call
      methods on a string
    * [FELIX-2432] - [gogo] NPE/coercion failure when null first parameter
      to method expecting arry
    * [FELIX-2545] - [gogo] runtime should close all open sessions when it
      is stopped
    * [FELIX-2606] - Gogo isn't decoupled from OSGi anymore

** Improvement
    * [FELIX-2396] - Ability to have callbacks when accessing session variables
    * [FELIX-2433] - [gogo] allow command expansion inside double quotes
    * [FELIX-2607] - Introduce a specific exception when a command is not
      foundGogo Runtime 0.6.1

Gogo Runtime 0.6.0
------------------

** Bug
    * [FELIX-1473] - [gogo] The syntax does not provide a way to call methods
      on a string
    * [FELIX-1474] - [gogo] result of commands is implicitly written to pipe
    * [FELIX-1493] - [gogo] automatic expansion of $args in Closure stops
      direct access to $args list
    * [FELIX-2337] - [gogo] no way to access array[] elements produced by
      assignment
    * [FELIX-2375] - [gogo] when supplied args can't be coerced, the error
      message prints the arg values, rather than their types
    * [FELIX-2380] - [gogo] lock contention in piped writer when reader
      doesn't read all input

** Improvement
    * [FELIX-1487] - Support for commands on multiple lines
    * [FELIX-2328] - [gogo] tidy-up runtime to remove optional code etc
    * [FELIX-2339] - [gogo] add support for running scripts
    * [FELIX-2342] - [gogo] remove old felix command adaptor

** New Feature
    * [FELIX-2363] - [Gogo] Add annotations for creating commands with
      optional and out-of-order arguments

** Task
    * [FELIX-1670] - [gogo] launcher bundle not required
    * [FELIX-1889] - Gogo should depend on the official OSGi jars
    * [FELIX-2334] - [Gogo] Use org.apache.felix as Maven groupId
    * [FELIX-2367] - [Gogo] Use org.apache.felix namespace to avoid any
      perceived legal issues
