On Tue, Dec 7, 2010 at 1:57 PM, Chris McDonough <chr...@plope.com> wrote: > Independent of my previous call for discussion about ZCML conflict > resolution, I'm cutting and pasting my side of a discussion about the > ZCML "includeOverrides" directive from an IRC chat, because it may come > in useful for folks grappling with its behavior. There's not really any > human-consumable docs about it. > > If I've made any mistakes, please let me know. > > [13:42] <mcdonc> so ftr, i've found that ZCML's includeOverrides and > include to do (at least on one vector) exactly the opposite of what you > might expect them to do > [13:42] <mcdonc> "includeOverrides" is a poor name > [13:42] <mcdonc> what it does is to emulate the behavior of inlining > stuff into the file you use it from > [13:43] <mcdonc> when you use includeOverrides it's as if you typed all > the directives in the included file into the file you're including from > [13:43] <mcdonc> otoh, "include" doesnt behave like this > [13:44] <mcdonc> you can actually define the same directive in three > files > [13:44] <mcdonc> configure.zcml, one.zcml, and two.zcml > [13:44] <mcdonc> and if you use "include" from configure.zcml of one and > two > [13:44] <mcdonc> there will be no conflict > [13:45] <mcdonc> this is because non-conflicting "rootmost" directives > win > [13:45] <mcdonc> otoh, if you use includeOverrides of one and two from > configure.zcml > [13:45] <mcdonc> all three will conflict > [13:45] <mcdonc> because its as if you typed them all in configure.zcml > by hand > [13:45] <mcdonc> and that means there are three conflicting rootmost > directives > [13:46] <mcdonc> if you mentally substitute "inline" for > "includeOverrides" it makes a little more sense
Maybe. It described the mechanism better, but includeOverrides conveys the intent. <shrug> > [13:48] <mcdonc> override is exactly the wrong phrase to use in the name > of this directive > [13:51] <mcdonc> what it boils down to is that you never, ever really > want to use includeOverrides except in your rootmost zcml file > [13:51] <mcdonc> and probably not even there > [13:51] <mcdonc> because you can get the same effect by typing the > directives there by hand Why would you want to type the directives by hand? I've used includeOverrides in cases where: 1. I want to use 2 high-level components, one of which customizes the other, or in which 2. I wanted to organize overrides in various ways where I don't want to put everything in a root (or high-level file). Of course, you can sometimes get the same effect in other ways. For example, if one high-level component overrides another, then the overriding component can just include the overridden one. Jim -- Jim Fulton _______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org https://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - https://mail.zope.org/mailman/listinfo/zope-announce https://mail.zope.org/mailman/listinfo/zope )