# File lib/puppet/type/file.rb, line 542
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:     # This only happens if we have sourceselect == :all
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