[Zope3-dev] Re: Downstream Users making changes.
Paul Everitt
paul@eurozope.org
Sat, 25 Jan 2003 09:35:13 +0100
Tres Seaver wrote:
> On Wed, 2003-01-22 at 07:38, Steve Alexander wrote:
>
>>>>If you *do* make it easier to modify "closed"
>>>>software, then you *must* make resolving conflicting changes easier than
>>>>I foresee us having resources to tackle in the near term.
>>>
>>>I think this will be needed anyway. If an end user of Swishdot
>>>customizes a template or script and I, as Swishdot author, also change
>>>that template or script for the next release, then they need to know
>>>that when they install the new version. It would also be nice if we
>>>could provide something to help them resolve the conflicting changes.
>>
>>They don't need to mess with Swishdot in order to change a template or a
>>script. They can do that in their own Zope Package / workspace /
>>whatever, and configure things so that their changes override the ones
>>caused by installing Swishdot.
>
>
> Sure, the CMF's "skin customization" allows that use case now; the
> problem is that they when Chris *does* release a new version of
> Swishdot, the site manager who has installed and customzied an earlier
> version has no help in evaluating / merging Chris' changes with the
> customizations. Leaving the customized version in place untouched can
> mean that the site will not have access to features or bugfixes in the
> new release.
>
> For consulting purposes, where we expect the client to customize skins
> during a project, for instance, we have adopted a pattern to help cope
> with this problem: each filesystem-based template or Python Script
> embeds its CVS repository info into the source; because the CMF copies
> that information when creating the "custom" version, we can track where
> the "branch point" was. Resolving the conflict can still be *extremely*
> tough, especially with ZPT, which tends to be "diff-unfriendly".
I've been meaning to throw out a meme on this.
It's true, many people customize the main_template and then divorce
themselves from any future enhancements. As another alternative for
addressing this problem, we could look at the approach of Mozilla overlays:
http://www.xulplanet.com/tutorials/xultu/overlay.html
In this model, your customization would only define a small change, as
well as where in main_template to apply it. Without touching
main_template, or perhaps without even have access to edit it, you can
customize it. (This is how you get your app into the Moz menus, for
instance, or add a toolbar.)
Another approach: pipelines. Process main_template, takes its output,
and get the change points from the customized version. Only the TAL
blocks marked as part of the customization would alter the output of
main_template.
Both of these models would require much more regular use of the id=
attribute (or perhaps a tal:id so we don't conflict with existing use.)
--Paul