2013-10-20 57 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