# Author:: Nicolas Despres . # Copyright:: Copyright (c) 2004, 2005 TTK team. All rights reserved. # License:: LGPL # $Id: Fetch.rb 567 2005-04-13 08:00:06Z polrop $ require 'fileutils' require 'ttkd' module TTK module Strategies class Fetch < Composite include Concrete include ServiceManager def initialize ( *a, &b ) @fetch = nil @dir = nil super end def resources=(other) @resources = [] other.each do |fn| p = Pathname.new(fn) next if p.absolute? @resources << p end end def dir=(other) if other.nil? @dir = nil else @dir = Pathname.new(other) unless @dir.exist? raise(Errno::ENOENT, "`#@dir' - no such file or directory") end end end protected def prologue super fetcher_uri = @symtbl[:fetcher_uri] fail 'no fetcher available' if fetcher_uri.nil? fetch_service = Services::FetcherClient.new start_service(fetch_service, nil, fetcher_uri) @fetch = fetch_service.client @fetcher = @fetch.fetcher @dir = TempPath.new('fetch') if @dir.nil? @dir.ensure_mkpath @symtbl[:fetch_dir] = @dir create(@test) end protected def run_impl if (@fetcher.uri.host == @fetch.uri.host and (not @symtbl[:force_fetch])) fetch_local(@fetcher.repository) else fetch() end super end protected def assertion pass end protected def epilogue @dir.rmtree if @dir @symtbl.delete(:fetch_dir) stop_services super end protected def fetch_local(repository) @log.new_node('fetched from localhost') do @resources.each do |r| t0 = Time.now (@dir + r.dirname).ensure_mkpath FileUtils.ln_s(repository + r, @dir + r) @log[@dir + r] = "#{Time.now - t0} seconds" end end end protected def fetch desc = "fetched from #{@fetcher.uri.host}:#{@fetcher.uri.port}" @log.new_node(desc) do @resources.each do |r| (@dir + r.dirname).ensure_mkpath stat = @fetch.fetch(r, @dir) raise "`#{r}' - fetch failed" unless stat[:success] @log[@dir + r] = stat[:enlapsed_time] end end end attribute :resources, 'Resources to fetch', [], :invisible attribute :dir, 'Fetch destination direction', nil, :invisible attribute :test, 'Test to execute that uses fetched resources', :mandatory, :invisible, :dont_expand end # class Fetch end # module Strategies end # module TTK