2013-10-20 56 views
2

使用任务依赖关系表示法,可以将参数传递给默认任务。例如,说 “版本” 是你的论点:将参数传递给Rake默认任务而不指定任务名称

task :default, [:version] => [:build] 

task :build, :version do |t,args| 
    version = args[:version] 
    puts version ? "version is #{version}" : "no version passed" 
end 

然后就可以调用它像这样:

$ rake 
no version passed 

$ rake default[3.2.1] 
version is 3.2.1 

$ rake build[3.2.1] 
version is 3.2.1 

然而,我还没有找到避免指定th的方法e传递参数时的任务名称(默认或构建)。

有谁知道使用这种表示法的方法,而不必指定任务名称? (即利用“默认”的语法呢?)

我知道receving参数的ENV []方法,如下所述: How do I have the :default Rake task depend on a task with arguments?

我正在寻找一种方式来使用内置符号(如上所示),但避免必须指定任务名称。

回答

2

如果你看一下耙源代码,你可以看到,它是不可能的(GitHub):

# Collect the list of tasks on the command line. If no tasks are 
# given, return a list containing only the default task. 
# Environmental assignments are processed at this time as well. 
def collect_tasks 
    @top_level_tasks = [] 
    ARGV.each do |arg| 
    if arg =~ /^(\w+)=(.*)$/m 
     ENV[$1] = $2 
    else 
     @top_level_tasks << arg unless arg =~ /^-/ 
    end 
    end 
    @top_level_tasks.push(default_task_name) if @top_level_tasks.empty? 
end 

在这种方法中,要运行从提供的参数收集任务。以-开头的所有内容都将被忽略,形式为foo=bar的所有内容都用于设置环境,其他所有内容都被视为任务名称。

如果您使用参数指定任务(foo[bar]),则会在parse_task_string中解析参数。

如果您未指定任务,则default将不带任何参数使用。

+0

谢谢。我试图遵循代码,但我们会迷路。你认为一个补丁允许这是有道理的吗?我猜这个语法看起来有点奇怪 – Gal