John Hampton wrote:
> I'm fine with using the tracext.* namespace for additional plugins,
> however, I agree with Noah that we should make them real egg based
> plugins rather than single file plugins.
>
Well, making them systematically .egg based somehow defeats the
"simplicity" part of the whole approach.
But it all depends on the particular situation, in some cases the egg
based approach is more suited.
Like already said, the Mercurial plugin *has* to be maintained as an
external plugin, unfortunately.
Idem for the spamfilter, not for licensing reasons here, but because
it's much bigger and not that actively maintained. *If* it would have
been actively maintained, then it could have been placed directly below
tracext/. Likewise, if one day something we once bundled is not actively
maintained anymore, it could just be moved to some other place, kept in
the same namespace package but no longer bundled with Trac.
Note btw that I'd like to see our "external" plugins placed below a new
toplevel /plugins folder, with 0.1X subfolders That will be clearer than
using the /sandbox.
> Part of my reason for this is that I have an irrational hatred for
> single file plugins.
We're not talking about making them single file plugins either, but more
having a parallel or alternative package to trac.
Within the "trac" package everything is enabled by default, whereas in
the "tracext" package (or "tracopt") everything is disabled by default.
> Don't ask for the reasons, cus they aren't really
> good. Suffice to say, I don't like them and I think they should be used
> as little as possible
>
Well, Remy presented some of the inconveniences of single file plugins,
in his initial mail.
> Second, single file plugins can't use some of the nice features such as
> install_requires (which you note could be useful for the plugins that
> require ConfigObj).
>
> Third, I'd actually like to see the plugins not installed by default. I
> think it preferable that we make them full-fledged plugins, leave them
> in the source package, and then submit them separately to the
> cheeseshop.
That's not what I call simple, and that wouldn't be very different from
the current situation.
Again, the idea is to have a set of high-quality optional components,
bundled and maintained with Trac (same releases, ready to use, to be
enabled within the web admin). Obviously not adequate for everything,
nor something every plugin author would like to be constrained to. And
not a call to include anything in Trac either. Let me cite the original
mail of Remy once again:
Note that the idea is *not* to gradually move plugins from Trac-Hacks
back into core, but to have a location where we can place optional core
functionality so that it is readily available and easy to enable.
Therefore, first move optional things out of trac to tracext.
Candidates are:
- trac.versioncontrol.svn*
- trac.mimeview.{enscript,php,rst,silvercity,txtl}
- some of the sample-plugins
Then eventually add new things there, like a versioncontrol backend for
the filesystem (which otherwise I would probably have added to
trac.versioncontrol directly).
> Installing them would then require
> a) tracext.* = enabled or trac.foo = enabled
> b) easy_install foo or building from source
>
> I think this is better because:
> a) easy_install is fairly easy
>
When it works... (you and the plugin provider need to be online; for
example, try to easy_install the TracWikiTemplates plugin - ok right now
it works, but it's been installed despite being not even 0.11 compatible
- plugin hell).
> b) keeps what we install smaller
>
I doubt this could be a real issue. The whole Trac egg directory is 8 or
9Mb on my system (9 when all the .mo files are built). What if that
doubles? Hardly a big deal.
> c) if one actually enables the full tracext.* namespace, then they
> don't inadvertently enable plugins that they didn't want but didn't know
> were installed.
>
Yes... but while that's possible to do, it's not something we will
entice people to do (like we currently don't say, don't bother, just do
[components] * = enabled). The preferred way would be to use the web
admin, being guided through a thematic ordering of the components (e.g.
"Version Control Backends" -> "Subversion" -> "Base system" | "Advanced
Property Renderers").
> d) allows us to more easily rev the additional plugins, as their
> releases need not be tied directly to a trac release (though they could be)
>
That would be one of the deciding factors for the plugin author, if she
would rather like to maintain her plugin independantly (with no strings
attached) or would like to see it part of the Trac distribution.
>> Sure, and the quality and maintainability criterions are key points
>> here. Nevertheless I think this could eventually help to improve the
>> interaction between plugin developers and the Trac team. Plugin authors
>> developing "generally useful but optional functionality" could strive to
>> get their plugin included into tracext, and in order to meet the quality
>> criterions mentioned above, the end result could be only an increase in
>> the quality of the plugin, and a simpler way for the user to access the
>> extended feature, so a win on all accounts.
>>
>
> This brings up the question of "enforcement". In addition to the
> plugins already on trac-hacks.org that Tim mentioned, the
> ActiveDirectoryAuthPlugin also uses the tracext.* namespace.
>
> So, what are the rules/requirements/etc for using tracext.*?
>
> As we don't have any real way of enforcing which plugins use the
> namespace, I think this is another reason why the plugins shouldn't be
> installed automatically.
>
Actually what would be wrong if *all* Trac plugins would use the tracext
namespace package?
Is something going to break? Will name conflicts be more frequent?
Especially if we would have some kind of "official" tree that plugin
authors could use as a guideline, e.g.
tracext.versioncontrol.backend.svn.*,
tracext.versioncontrol.backend.hg.*, tracext.ticket.clone, etc.
Whether a component comes from a plugin installed individually (using
tracext namespace or not) or from a single file plugin, or from a
bundled module within the tracext package, I think it shouldn't make a
difference and all of them should be disabled by default and
discoverable in some nicely categorized and user friendly tree in the
web admin.
The exact mechanism to be used for categorization and storing the
category metadata - help mainly - has yet to be defined, of course. I
think that tracext submodules could be used as categories and their
__init__.py files could contain such (translatable) help text.
Single file plugins and plugins not using the tracext namespace
themselves could simply say they belong to one of the existing
categories (e.g. category = 'trac.versioncontrol.backend', set as a
global value for a single file plugin, or as a PKG-INFO attribute for an
egg plugin).
-- Christian
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Trac
Development" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/trac-dev?hl=en
-~----------~----~----~----~------~----~------~--~---