542: def recurse_remote(children)
543: sourceselect = self[:sourceselect]
544:
545: total = self[:source].collect do |source|
546: next unless result = perform_recursion(source)
547: return if top = result.find { |r| r.relative_path == "." } and top.ftype != "directory"
548: result.each { |data| data.source = "#{source}/#{data.relative_path}" }
549: break result if result and ! result.empty? and sourceselect == :first
550: result
551: end.flatten
552:
553:
554: unless sourceselect == :first
555: found = []
556: total.reject! do |data|
557: result = found.include?(data.relative_path)
558: found << data.relative_path unless found.include?(data.relative_path)
559: result
560: end
561: end
562:
563: total.each do |meta|
564: if meta.relative_path == "."
565: parameter(:source).metadata = meta
566: next
567: end
568: children[meta.relative_path] ||= newchild(meta.relative_path)
569: children[meta.relative_path][:source] = meta.source
570: children[meta.relative_path][:checksum] = :md5 if meta.ftype == "file"
571:
572: children[meta.relative_path].parameter(:source).metadata = meta
573: end
574:
575: children
576: end