Access Rake Task Description from within Task

前端 未结 2 2128
醉酒成梦
醉酒成梦 2021-02-13 18:46

Within a rake task how does one query the description? Something that would give:

desc \"Populate DB\"
task populate: :environment do
  puts task.desc # \"Popula         


        
相关标签:
2条回答
  • 2021-02-13 18:57

    Having a similar problem, that I wanted to show the user a customized help screen. The answer here helped me a lot.

    It is very important that

    Rake::TaskManager.record_task_metadata = true
    

    is done before the first definition of tasks.

    Then you can do

    Rake.application.tasks.each do |t|
        printf("%-}s  # %s\n",
               t.name_with_args,
               t.comment)
      end
    

    Details can be found by investigating https://github.com/jimweirich/rake/blob/master/lib/rake/application.rb#L284

    0 讨论(0)
  • 2021-02-13 19:11

    taskmust be defined as a parameter for the task-block.

    desc "Populate DB"
    task :populate do |task|
      puts task.comment # "Populate DB"
      puts task.full_comment # "Populate DB"
      puts task.name # "populate "
    end
    

    Edit: This solution works with rake 0.8.7. At least rake 0.9.2.2 need an additional Rake::TaskManager.record_task_metadata = true (I checked only this two versions).

    A stand alone ruby-script with adaption:

    gem 'rake'    #'= 0.9.2.2'
    require 'rake'
    
    #Needed for rake/gem '= 0.9.2.2'
    Rake::TaskManager.record_task_metadata = true
    
    desc "Populate DB"
    task :populate do |task|
      p task.comment # "Populate DB"
      p task.full_comment # "Populate DB"
      p task.name # "populate "
    end
    
    if $0 == __FILE__
      Rake.application['populate'].invoke()  #all tasks
    end
    

    Reason: in rake/task_manager.rb line 30 (rake 0.9.2.2) is a check

      if Rake::TaskManager.record_task_metadata
        add_location(task)
        task.add_description(get_description(task))
      end
    

    The default false is set in line 305.

    0 讨论(0)
提交回复
热议问题