Op 16-mrt-2010 om 01:12 heeft Alex Boisvert <[email protected]> het volgende geschreven:\

I'm getting the same behavior (circular dependency detected) on both Buildr
1.3.5 and trunk so I'm guessing there must be another variable.
Hmm must be something in ourbuild script. I traced the rest of the invocation chain through the code and it was being reset due to a call to file().invoke somewhere in the java packaging module.


Second, I'm not sure I understand why Buildr.projects is called in this
context.  It seems it would lead to duplicate iterations over the same
projects in hierarchical projects.   Maybe you or Klass can comment on
that.  (I don't have full picture of everything Ivy4r does)
I don't quite understand why it's done this way either. I'll check with the developer of ivy4r and maybe try to restructure the logic to avoid the projects call.


One way to break the circle would be to add an option such as
Buildr.project(:invoke => false) to retrieve the project list without
invoking projects, with the caveat that not all projects may have been fully evaluated yet. We could do that if there's a good justification for using
Buildr.project at this stage.

I don't think this should be modified. It feels like this could be very error prone.

Pepijn

alex

On Mon, Mar 15, 2010 at 3:32 PM, Pepijn Van Eeckhoudt <
[email protected]> wrote:

See ivy_extension.rb line 589 (
http://github.com/klaas1979/ivy4r/blob/15452546811bc9ae74b0c56f53f52002059d37a8/lib/buildr/ivy_extension.rb
).

Pepijn

On 15 Mar 2010, at 23:26, Alex Boisvert wrote:

Yes, calling Buildr.projects is a little dangerous at this stage.  I
would
need to see what actually happens (call order) to give you a good answer.
Can you provide a simple buildfile that illustrates this?

alex


On Mon, Mar 15, 2010 at 3:01 PM, Pepijn Van Eeckhoudt <
[email protected]> wrote:

Will do. I uncivered this one when trying to use ivy4r with buildr
trunk.
Turns out ivy4r causes a circular dependency in trunk but not in 1.3.5
due
to this issue. The circular dependency is caused by a call to
Buildr.projects from an after_define callback. This causes a call to
invoke
on the project being defined as well triggering the circular dependency exception. Is there a way to resolve this or should ivy4r be tweaked so
the
projects call is avoided?

Pepijn

Op 15-mrt-2010 om 18:23 heeft Alex Boisvert <[email protected] >
het
volgende geschreven:\


Would you mind filing a Jira issue with your spec? Just to clear the
IP.

thanks,
alex


On Mon, Mar 15, 2010 at 10:20 AM, Alex Boisvert <
[email protected]
wrote:

Wheeep!  Yes, it's an issue.  I'll fix it right away.

alex



On Mon, Mar 15, 2010 at 10:10 AM, Pepijn Van Eeckhoudt <
[email protected]> wrote:

I'm bumping into unpredictable behaviour related to the call chain
handling. It seems invoke_with_call_chain doesn't restore the call
chain
correctly after calling invoke. Since this is in the core of buildr I
wanted
to just check with you guys before creating an issue in jira.

invoke_with_call_chain currently does
begin
old_chain, Thread.current[:rake_chain] = Thread.current [:rake_chain],
new_chain
execute(task_args) if needed?
ensure
Thread.current[:rake_chain] = nil
end

The ensure block seems obviously incorrect. Shouldn't this be
Thread.current[:rake_chain] = old_chain?

The following spec shows when this causes things to go wrong:
describe Buildr do
it 'should restore call chain when invoke is called' do
task1 = Rake::Task.define_task('task1') do
end

task2 = Rake::Task.define_task('task2') do
 chain1 = Thread.current[:rake_chain]
 task1.invoke
 chain2 = Thread.current[:rake_chain]
 chain2.should == chain1
end

task2.invoke
end
end

So is this an issue or intentional?

Regards,

Pepijn






Reply via email to