Ошибка очистки рейка рейка, когда файл не существует - PullRequest
4 голосов
/ 22 декабря 2011

У меня есть такой Rakefile

task :clean do
  sh 'rm ./foo'
end

Я хочу предотвратить сообщение об ошибке, когда файл 'foo' не существует.Как это сделать?

Я думаю, что я хочу: есть ли способ сначала проверить файл, а затем решить, что делать дальше.

Например:

file 'aaa' => 'bbb' do
  sh 'cp bbb aaa'
end

Эта задача зависит от существования файла 'bbb', поэтому я хочу знать can I tell Rake that my task depends on the несуществование of file 'foo'

Ответы [ 3 ]

4 голосов
/ 22 декабря 2011

Вы можете сделать это, немного расширив рейк:

Rakefile:

require File.join(File.dirname(__FILE__), 'unfile_rake_ext')

unfile 'target.txt' do
  File.delete('target.txt')
end

unfile_rake_ext.rb:

class UnFileTask < Rake::FileTask
  def needed?
    File.exist?(name)
  end
end

def unfile(*args, &block)
  UnFileTask.define_task(*args, &block)
end

И вывод моей консоли:

D:\Projects\ZPersonal\tmp>ls
Rakefile  unfile_rake_ext.rb

D:\Projects\ZPersonal\tmp>touch target.txt && ls
Rakefile  target.txt  unfile_rake_ext.rb

D:\Projects\ZPersonal\tmp>rake target.txt --trace
** Invoke target.txt (first_time)
** Execute target.txt

D:\Projects\ZPersonal\tmp>ls
Rakefile  unfile_rake_ext.rb

D:\Projects\ZPersonal\tmp>rake target.txt --trace
** Invoke target.txt (first_time, not_needed)

D:\Projects\ZPersonal\tmp>ls
Rakefile  unfile_rake_ext.rb

Надеюсь, это поможет.

2 голосов
/ 29 января 2013

В вашем rakefile:

task :clean do
  rm 'foo' if File.exists? 'foo'
end

file 'aaa' => ['bbb', :clean] do |t|
  cp t.prerequisites[0], t.name
end

Теперь в командной строке:

echo 'test' > bbb
rake aaa
    => cp bbb aaa

touch foo
rake aaa
    => rm foo
    => cp bbb aaa
1 голос
/ 22 декабря 2011

Как насчет этого?

if File.exists? './foo/'
  sh 'rm -f ./foo'
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...