On Tue, Aug 4, 2009 at 8:20 PM, Assaf Arkin <[email protected]> wrote:

> On Tue, Aug 4, 2009 at 7:31 PM, Alex Boisvert <[email protected]>
> wrote:
>
> > I've managed to narrow down the issue to the
> > Buildr::Extension::ClassMethods.callbacks method which returns an invalid
> > Callback instance.  I came up with a quick fix but I'm not sure why this
> is
> > happening or if it's the right solution.
> >
> > boisv...@sixtine:~/svn/buildr-ext$ svn-diff
> > Index: lib/buildr/core/project.rb
> > ===================================================================
> > --- lib/buildr/core/project.rb    (revision 801046)
> > +++ lib/buildr/core/project.rb    (working copy)
> > @@ -755,7 +755,11 @@
> >     private
> >
> >       def callbacks
> > -        const_get('Callbacks') rescue const_set('Callbacks', Class.new)
> > +        if constants.include?("Callbacks")
> > +          const_get('Callbacks')
> > +        elsif
> > +          const_set('Callbacks', Class.new)
> > +        end
> >       end
> >
> >     end
> >
> > Without this fix, the "first_time" method of the extension is never
> > called.   Assaf, can you take a look?   We should probably open a bug
> since
> > apparently this breaks all 3rd-party extensions.
>
>
> const_get throws an exception if the constant is not defined, so these two
> should be equivalent under Ruby 1.8.  Not under 1.9, under 1.9 constants()
> returns an array of symbols which does not include the string, and so the
> constant will get set twice with two different classes.


i've only tested on 1.8 and const_get() returns an existing constant the
first time it's called inside the LinesOfCode module.  On my machine, it
returns the constant from the Eclipse task (!!) instead of raising an
exception.  So there's really something wrong hiding.


> Everything in Buildr is an extension added on to project, if first_time
> decided to stop working, so would compiling, testing, packaging, etc.


Well, it appears to work for all built-in extensions but not for 3rd party
extensions.   I can't explain it and I figured you'd have better guess at
where to look first.

alex

Reply via email to