namespace :svn do

def strategy
  @strategy ||= Capistrano::Svn.new(self, fetch(:svn_strategy, Capistrano::Svn::DefaultStrategy))
end

desc "Check that the repo is reachable"
task :check do
  on release_roles :all do
    strategy.check
  end
end

desc "Clone the repo to the cache"
task :clone do
  on release_roles :all do
    if strategy.test
      info t(:mirror_exists, at: repo_path)
    else
      within deploy_path do
        strategy.clone
      end
    end
  end
end

desc "Pull changes from the remote repo"
task update: :'svn:clone' do
  on release_roles :all do
    within repo_path do
      strategy.update
    end
  end
end

desc "Copy repo to releases"
task create_release: :'svn:update' do
  on release_roles :all do
    within repo_path do
      strategy.release
    end
  end
end

desc "Determine the revision that will be deployed"
task :set_current_revision do
  on release_roles :all do
    within repo_path do
      set :current_revision, strategy.fetch_revision
    end
  end
end

end