Hi,

I've checked-in an initial port of Pier using Magritte with pragma support into: http://source.lukas-renggli.ch/pier2unstable - all tests are green and with a cursory test everything appears to be functioning as before.

The port includes the following packages:

pier-model
pier-seaside
pier-security
pier-pharo-model
pier-pharo-persistency
pier-tests-model
pier-test-security

and the following add ons:

pier-blog
pier-book
pier-setup
pier-google
pier-documents

Next steps:

1) Be great if people can try the initial port and report any errors or different behaviour
2) If success with 1) perhaps we can  move to new repositories (e.g. Magritte3, Pier3, Pier3addons)
3) Continue porting addons. There are many add-ons in both http://source.lukas-renggli.ch/pieraddons and http://source.lukas-renggli.ch/pier2addons that would be great to port.
4) Document the changes to Magritte and how they effect Pier.


Porting guide:

1) search for all instances of #description if they are magritte descriptions rename the method #magritteDescription
2) remove #magritteDynamic and remove the block around the method.
3) Use the refactoring support to move class-side descriptions to instance side descriptions with pragmas - making sure that any accessors to class side methods are either prefixed with ‘class’ or moved to the instance side. If you move description help methods to instance side be careful if they contain context := PRCurrentContext value - context will shadow an instance variable of the same name so either replace context with self context and remove context := PRCurrentContext value or rename context say theContext and replace context := PRCurrentContext value with theContext := self context.
4) Remove any empty categories on the class side.
5) PRWidget derived classes should either by modified to be derived from PRWidgetPropertyBase or keep derived from PRWidget but modify the accessors to store state in instance variable rather than the property dictionary in PRWidgetPropertyBase. See PRViewsWidget and PRSearchWidget for examples of both types of port.
6) Modify structure initialisation with PRComponent to use prototype instance rather than classes. So
(PRComponent named: 'contents')
componentClass: PRContentsWidget;
write: '%c' using: PRContentsWidget descriptionHeading;
yourself
becomes to:
(PRComponent named: 'contents') prototypeInstance: (PRContentsWidget new heading: '%c'; yourself)
yourself

you may well have to add setters to allow initial settings to be set on the prototype instances again see  
PRViewsWidget and PRSearchWidget for examples.
7) Put a break point in Object>>description and Object class>>description to trap any cases you’ve missed (the break-point should not be hit) and check the add-on.

Hope this makes sense

Nick