# from Christopher J. Madsen # on Saturday 15 March 2008 23:43: >>This seems like it provides a lot of room >> for subtle bugs. How would a plugin declare that it is incompatible >> with another or otherwise avoid the silent error of "only one of my >> plugins ran"? > >I don't think it would. That's up to the person selecting the plugins >to run. Hopefully, user & system level plugins would be used only for >things unlikely to conflict with other plugins.
It is still difficult to debug, regardless of hope or intent. If the user breaks something via their config, a loud and obvious error should result. Similarly, maybe the priority should simply be by load-order. At least then a plugin which knows it is incompatible with another can make noise. Still it might be nice to have the noise created via some mechanism in the registration (e.g. "conflicts => {Foo => '<= 0.2'}".) >I don't think many pre hooks will need to short-circuit evaluation. > But I think it needs to be possible to prevent the default method > from being called. I suppose we could say that if a pre hook > short-circuits, the remaining pre hooks are still called (but any > values they try to return would be ignored) and only the default > method gets skipped. But I'm not sure that's better. Maybe the short-circuit (bypassing/replacing the default method) should just be defined differently. That is: replace_METHOD() or something and only allow one definition of it. A few concrete examples would certainly help me work through that logic. I suppose ACTION_code() or ACTION_dist() would be good examples. If these are modifying files on disk, a bypass probably means that none of the other hooks should run. Further, what are the pre and post hooks typically doing in such a case? When it comes to copying files, a cleaner scheme might be to install a chain of filter subs which get each file and take/return a list of lines. But that's quite a bit different than a hook which just e.g. copies or generates some extra files or adds a depends(). --Eric -- hobgoblin n 1: (folklore) a small grotesque supernatural creature that makes trouble for human beings --------------------------------------------------- http://scratchcomputing.com ---------------------------------------------------