If you declare it as a function, rather than a task, it'll use the
caller's scope, instead of its own scope. E.g.:
def echo_bar
run "echo bar"
end
task :foo, :roles => :foo do
run "echo foo"
echo_bar
end
task :bar do
echo_bar
end
Note that you can't do "cap echo_bar", because echo_bar is not a task,
so I've kept the :bar task and had it just call the method. That lets
you call "cap bar", just as before, and have it work as it did before.
- Jamis
On Jun 28, 2008, at 12:12 AM, Ian Sefferman wrote:
>
> Hi,
> I've noticed the following behavior:
>
> role :foo, "foo"
> role :bar, "bar"
> namespace :my_service do
> task :foo, :roles => :foo do
> run "echo \"foo\n\""
> bar
> end
>
> task :bar do
> run "echo \"bar\n\""
> end
> end
>
> If I run foo, bar will be ran for both the :foo and :bar role, which I
> wouldn't expect. I would expect that the task which is calling another
> task will be restricting the other task.
>
> I ask because one thing I'd like to do is have a few roles and have
> some, but not all, of the roles update their code (deploy.update), but
> currently this would always update it for all roles.
>
> Is there any workaround for this? Am I missing something obvious?
>
> Thanks,
> Ian
>
>
> --
> Ian Sefferman
> http://www.openomy.com | http://www.iseff.com
>
> >
--~--~---------~--~----~------------~-------~--~----~
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/capistrano
-~----------~----~----~----~------~----~------~--~---