[patch] rake 0.7.3 to 0.8.x broke engines rake redefine_task

Hi,

The collaboa site for engines is having serious problems, so I’m posting
here.

As mentioned previously, rake 0.8.x broke the code for redefining rake
tasks.

The problem is that in rake 0.8.x, the first argument to resolve_args
should now be an array. Also, last_comment was changed to
last_description.

So, this will only work with rake 0.8.x.

Any chance to get this patch into engines /branches/rb_1.2? Not sure
what should be done about BC on this. Any ideas?

Thanks,
John

— engines.rake 2007-12-29 22:54:17.000000000 -0800
+++ engines.rake.new 2007-12-29 22:54:10.000000000 -0800
@@ -6,14 +6,14 @@
module Rake
module TaskManager
def redefine_task(task_class, args, &block)

  •    task_name, deps = resolve_args(args)
    
  •    task_name, deps = resolve_args([args])
       task_name = task_class.scope_name(@scope, task_name)
       deps = [deps] unless deps.respond_to?(:to_ary)
       deps = deps.collect {|d| d.to_s }
       task = @tasks[task_name.to_s] = task_class.new(task_name, self)
       task.application = self
    
  •    task.add_comment(@last_comment)
    
  •    @last_comment = nil
    
  •    task.add_description(@last_description)
    
  •    @last_description = nil
       task.enhance(deps, &block)
       task
     end

Replying to myself. New patch. Here is a simple backwards-compatible
patch that allows this to work for rake 0.7.3 and rake 0.8.x

Feel free to DRY this up or otherwise make it prettier.

I tested this with on my rails app with both rake 0.7.3 and 0.8.1.

Thanks,
John

— engines.rake.old 2007-12-29 22:54:17.000000000 -0800
+++ engines.rake 2007-12-30 20:16:10.000000000 -0800
@@ -6,14 +6,19 @@
module Rake
module TaskManager
def redefine_task(task_class, args, &block)

  •    task_name, deps = resolve_args(args)
    
  •    task_name, deps = (RAKEVERSION >= '0.8.0') ? 
    

resolve_args([args]) : resolve_args(args)
task_name = task_class.scope_name(@scope, task_name)
deps = [deps] unless deps.respond_to?(:to_ary)
deps = deps.collect {|d| d.to_s }
task = @tasks[task_name.to_s] = task_class.new(task_name, self)
task.application = self

  •    task.add_comment(@last_comment)
    
  •    @last_comment = nil
    
  •    if RAKEVERSION >= '0.8.0'
    
  •      task.add_description(@last_description)
    
  •      @last_description = nil
    
  •    else
    
  •      task.add_comment(@last_comment)
    
  •      @last_comment = nil
    
  •    end
       task.enhance(deps, &block)
       task
     end

Hi John,

Could you post this patch to the issue tracker?
http://dev.rails-engines.org - login info is on the
http://rails-engines.org website.

Thanks!

James

Hi James,

Happy to. Collaboa was giving errors last I tried.

On a related note, after posting to rake-devel, Jim W. (author of
rake) offered to implement redefine_task within rake proper, but is
asking for input.

Would you be kind enough to jump-in with specifics on what engines needs
for rake redefine_task?

Here is the thread on rake list:
http://rubyforge.org/pipermail/rake-devel/2008-January/000357.html

Thanks!
John

On 1/3/08, John D. [email protected] wrote:

Hi James,

Happy to. Collaboa was giving errors last I tried.

Thanks :slight_smile:

Would you be kind enough to jump-in with specifics on what engines needs for rake redefine_task?

Will do, and thanks for raising this on the rake list - it’s clearly
something I should’ve done myself! I suppose the attitude of some of
the guardians of the Rails codebase has sunk sufficiently into my
subconscious that I no longer immediately consider feeding change
requests back to original projects (!) :slight_smile: