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:
263:
264: return result unless rmdirs?
265:
266:
267:
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