has anyone implemented a failable dependency for Rake?

L

Larry Fast

What I find myself writing in Rake is the following:

task xyz => ['abc?'] do
enc

# test before proceeding
task abc? do
if !abc
exit
end
end

What I'm creating is failable dependencies. XYZ should not be executed
unless abc succeeds. Unfortunately the structure I've shown stops on
the first failure. What I'd like to do is report all failures but only
execute if everything passes.

This could be implemented by processing prerequisites until a prereq
returns false. Any task containing any false prereqs would not be
processed.

Does this exist anywhere?

Thanks,
Larry Fast
 
J

Jim Weirich

Larry said:
What I find myself writing in Rake is the following:

task xyz => ['abc?'] do
enc

# test before proceeding
task abc? do
if !abc
exit
end
end

What I'm creating is failable dependencies. XYZ should not be executed
unless abc succeeds. Unfortunately the structure I've shown stops on
the first failure. What I'd like to do is report all failures but only
execute if everything passes.

This could be implemented by processing prerequisites until a prereq
returns false. Any task containing any false prereqs would not be
processed.

Does this exist anywhere?

It's not directly supported by Rake.

The way I think I would approach this is to let each of the
prerequisites vote on whether the xyz task should run or not. The
prereqs would register the voting with in some central location (e.g. a
global or maybe some central voting object). I would then write the xyz
task like this:

task :xyz => [:abc?, :acb?] do
if XYZ_SHOULD_RUN.ok?
do_xyz_stuff
end
end

This way all the prerequisites get a chance to run and the xyz task is
responsible for detecting the vote.

-- Jim Weirich
 
L

Larry Fast

Jim said:
The way I think I would approach this is to let each of the
prerequisites vote on whether the xyz task should run or not. The
prereqs would register the voting with in some central location (e.g. a
global or maybe some central voting object). I would then write the xyz
task like this:

task :xyz => [:abc?, :acb?] do
if XYZ_SHOULD_RUN.ok?
do_xyz_stuff
end
end

This way all the prerequisites get a chance to run and the xyz task is
responsible for detecting the vote.

-- Jim Weirich

That's one step in the right direction but I have a few dozen of these.
I'd like to inherit and extend the Rake::Task so I could write all my
tasks as:

task_failable :xyz => [...]

Each action would be attempted only if no dependency had failed. BUT all
the failures would be reported.

This would be most important in a long build process. You walk away
hoping it will complete. The next morning, most of it has completed and
you can follow up on the errors. I suspect that's what file_tasks do
but I have some non-file based testing to do.

On the other hand, I may have just talked myself out of this approach.
It may be easier to create files to represent the completion of these
actions.

Thanks,
Larry Fast
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,764
Messages
2,569,564
Members
45,039
Latest member
CasimiraVa

Latest Threads

Top