2015-07-27 3 views
1

У меня есть задачи рейка, которые обеспечивают функциональность для 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 
+0

Не забудьте при выполнении команды оболочки ** всегда ** используйте функцию ['shellescape'] (http://ruby-doc.org/stdlib-2.0.0/libdoc/shellwords/rdoc/Shellwords.html#method-c-shellescape), если вы не можете отдельно указывать аргументы. Если '@ source_dir' содержит пробел, это будет работать с ошибкой. – tadman

ответ

2

Обычно вы просто объявить зависимости, как это:

task :pull => :clone do 
    # ... 
end 

Или в случае множественных зависимостей:

task :status => [ :clone, :pull ] do 
    # ... 
end 
+0

Итак, как 'pull' знает, чтобы НЕ запускать' clone', если этот каталог уже существует? –

+0

Он выполнит шаг, но что касается того, что шаг делает что-либо или нет, это зависит от кода, содержащегося в нем. Это просто устанавливает, какие задачи запускаются. – tadman

+0

Эта привычная работа, я не могу заставить команду 'test' хотеть клонировать репо, checkout и строить каждый раз, если эти задачи уже были выполнены. –

Смежные вопросы