仅当以其命名的文件尚不存在时,才应执行Rake中的文件任务。
我有一个在该目录中构建directory
的文件任务和一个在该目录中创建file
的文件任务。现在,除非目录存在,否则无法创建文件,因此我将目录任务设置为文件任务的依赖项:
file "directory" do
mkdir_p "directory"
end
file "file" => "directory" do
touch "directory/file"
end
desc "Create file"
task build: "file"
[当我第一次在这里运行build
任务时,一切都按计划进行:首先创建目录,然后创建文件:
$ rake -t build
** Invoke build (first_time)
** Invoke file (first_time)
** Invoke directory (first_time)
** Execute directory
mkdir -p directory
** Execute file
touch directory/file
** Execute build
在创建文件及其包含目录之后第二次运行该文件时,我希望Rake不执行任何操作(not_needed
),因为与文件任务相关的所有文件均已存在。而是跳过目录任务,但执行文件任务:
$ rake -t build
** Invoke build (first_time)
** Invoke file (first_time)
** Invoke directory (first_time, not_needed)
** Execute file
touch directory/file
** Execute build
如果file
和directory
都已经存在,如何使Rake不运行file
任务?
您的文件任务是错误的。它声明好像在根目录中创建了file
,但实际上在file
目录中创建了directory
。 Rake检查file
是否在根目录中,如果不存在,则运行该任务。为了使其正常工作,您需要重命名file任务:
file "directory/file" => "directory" do
touch "directory/file"
end
desc "Create file"
task build: "directory/file"
通过这种方式,Rake检查正确的文件是否存在,并且不运行“目录/文件”任务。
** Invoke build (first_time)
** Invoke directory/file (first_time, not_needed)
** Invoke directory (first_time, not_needed)
** Execute build