У меня есть задачи рейка, которые обеспечивают функциональность для Git. Я хотел бы иметь возможность позвонить rake git:pull
, который должен признать, что каталог @source_dir
не существует, а затем он будет звонить git:clone
перед тем, как попытаться git:pull
. Можно ли добавить такую зависимость к моим задачам?Задача рейка зависит от другой задачи рейка
namespace :git do
desc "Download and create a copy of code from git server"
task :clone do
puts 'Cloning repository'.pink
sh "git clone -b #{@git_branch} --single-branch #{@git_clone_url} #{@source_dir}"
puts 'Clone complete'.green
end
desc "Fetch and merge from git server, using current checked out branch"
task :pull do
puts 'Pulling git'.pink
sh "cd '#{@source_dir}'; git pull"
puts 'Pulled'.green
end
desc "Shows status of all files in git repo"
task :status do
puts 'Showing `git status` of all source files'.pink
sh "cd #{@source_dir} && git status --short"
end
end
Не забудьте при выполнении команды оболочки ** всегда ** используйте функцию ['shellescape'] (http://ruby-doc.org/stdlib-2.0.0/libdoc/shellwords/rdoc/Shellwords.html#method-c-shellescape), если вы не можете отдельно указывать аргументы. Если '@ source_dir' содержит пробел, это будет работать с ошибкой. – tadman