So good news: Claude Brisson fixed all the blockers and they will be
part of Velocity 2.1. As a bonus we even got configuration flags to
allow back dash in variables names and to put back old behavior
regarding variable name when passed as parameter so I deleted my
crappy #setVariable directive.

I think we should still wait for 11.0 before doing the upgrade but it
will be much smoother than I previous anticipated.
On Fri, Jun 15, 2018 at 11:19 AM Thomas Mortagne
<[email protected]> wrote:
>
> Hi devs,
>
> Some of you may know that I started working on upgrading our scripting
> engine to Velocity 2.0.
>
> The corresponding Jira issue is https://jira.xwiki.org/browse/XCOMMONS-1296.
>
> Those of you who want to take a look at breakages with standard
> Velocity 2.0 upgrade (if you directly use Velocity API) can take a
> look at http://velocity.apache.org/engine/2.0/upgrading.html.
>
> The following details are about XWiki Velocity "engine":
>
> = The code
>
> You can see the current state of the upgrade on the following branches:
>
> * https://github.com/xwiki/xwiki-commons/tree/feature-velocity2
> * https://github.com/xwiki/xwiki-rendering/tree/feature-velocity2
> * https://github.com/xwiki/xwiki-platform/tree/feature-velocity2
>
> = Bad news
>
> == Definitive (probably) breakages
>
> * it was not easy in Velocity 1.7 but it's now impossible in Velocity
> 2.0 to use the hack we currently use to make macro "return" something.
> I mitigated this a bit by working on a #setVariable directive (the
> name of the helper we currently have in macros.vm) but it's not yet
> working in all situations and any code that was not going trough
> #setVariable will be broken anyway
> * the hypen ( - ) cannot be used in variable names anymore
>
> Those changes make impossible to upgrade to Velocity 2.0 in 10.x
> branch IMO, to big to be done in the middle of a cycle.
>
> == Temporary (hopefully) breakages
>
> * impossible to have $ or # at the end of a " based string literal (we
> have that a lot in various regex for example). This looks like an
> unplanned regression (since it's not documented) so I'm waiting for
> some kind reaction in the issues I reported
> (https://issues.apache.org/jira/browse/VELOCITY-897 and
> https://issues.apache.org/jira/browse/VELOCITY-896)
>
> == Not too impacting (hopefully) breakages
>
> The Velocity API changed quite a lot, fortunately not in classes we
> expose publicly (basically all we expose is VelocityContext). Also
> reminder: directly manipulating even XWiki Velocity API is considered
> legacy things (better use templates or wiki content and
> ScriptContext).
>
> = Good news
>
> == Macros handling
>
> The way to manage namespaces and macros has been completely changed
> (it does mean that lots of API has been broken in the process but we
> don't expose this API) and the good news is the new design will allow
> us to (finally) do proper caching of velocity scripts.
>
> I also removed a few hacks we had to do to not end up with endless
> memory leaks and milti-thread issues caused by the old namespace
> handling system.
>
> == Less stuff on our side
>
> I was able to move the following to legacy:
> * an equivalent of our chainable uberspector system has been
> implemented in Velocity standard
> * a DeprecatedCheckUberspector has been implemented in Velocity standard
>
> == Retro compatibility I was able to add
>
> * XWiki will keep supporting $velocityCount and $velocityHasNext (with
> a warning). It imply using XWikiVelocityContext instead of
> VelocityContext if you create it directly (which is a very bad idea)
> but you don't need to worry about that if you get your context from
> VelocityManager
> * a new #setVariable directive help supporting a few use case of macro
> "return" but unfortunately not all yet (Velocity AST is not super
> obvious to navigate...)
>
> == Performances
>
> Other than the caching on our side I already mentioned (huge boost
> planned when implemented) there is some memory and performance
> improvements claims in Velocity 2.0 release note (but I did not had
> time to do any testing myself yet).
>
> = TODO
>
> a) waiting for answer about the regressions I reported
> b) try find a way to make #setVariable directive works in a macro
> which is itself called in another macro (but it may not be possible)
> c) send a mail to discuss when to merge the Velocity 2 branch when at
> least a) is resolved
>
> Thanks,
> --
> Thomas Mortagne



-- 
Thomas Mortagne

Reply via email to