# File lib/puppet/type/tidy.rb, line 243
243:   def generate
244:     return [] unless stat(self[:path])
245: 
246:     case self[:recurse]
247:     when Integer, Fixnum, Bignum, /^\d+$/
248:       parameter = { :recurse => true, :recurselimit => self[:recurse] }
249:     when true, :true, :inf
250:       parameter = { :recurse => true }
251:     end
252: 
253:     if parameter
254:       files = Puppet::FileServing::Fileset.new(self[:path], parameter).files.collect do |f|
255:         f == "." ? self[:path] : File.join(self[:path], f)
256:       end
257:     else
258:       files = [self[:path]]
259:     end
260:     result = files.find_all { |path| tidy?(path) }.collect { |path| mkfile(path) }.each { |file| notice "Tidying #{file.ref}" }.sort { |a,b| b[:path] <=> a[:path] }
261: 
262:     # No need to worry about relationships if we don't have rmdirs; there won't be
263:     # any directories.
264:     return result unless rmdirs?
265: 
266:     # Now make sure that all directories require the files they contain, if all are available,
267:     # so that a directory is emptied before we try to remove it.
268:     files_by_name = result.inject({}) { |hash, file| hash[file[:path]] = file; hash }
269: 
270:     files_by_name.keys.sort { |a,b| b <=> b }.each do |path|
271:       dir = File.dirname(path)
272:       next unless resource = files_by_name[dir]
273:       if resource[:require]
274:         resource[:require] << Puppet::Resource.new(:file, path)
275:       else
276:         resource[:require] = [Puppet::Resource.new(:file, path)]
277:       end
278:     end
279: 
280:     result
281:   end