lib/rant/import/autoclean.rb in rant-0.4.4 vs lib/rant/import/autoclean.rb in rant-0.4.6

- old
+ new

@@ -3,10 +3,11 @@ # # Copyright (C) 2005 Stefan Lang <langstefan@gmx.at> require 'rant/rantlib' require 'rant/import/clean' +require 'rant/import/sys/more' class Rant::Generators::AutoClean def self.rant_gen(rac, ch, args, &block) # validate args if args.size > 1 @@ -19,63 +20,64 @@ # add files to clean via a var ::Rant::Generators::Clean.rant_gen(rac, ch, [tname]) # create task rac.task :__caller__ => ch, tname => [] do |t| - rac.tasks.each { |n, worker| - if Array === worker - worker.each { |subw| - subw.each_target { |entry| clean rac, entry } + add_common_dirs = {} + rac.tasks.each { |name, node| + if Array === node + f = node.first + if f.file_target? + add_common_dirs[File.dirname(f.full_name)] = true + end + node.each { |subw| + subw.each_target { |entry| rac.sys.clean entry } } else - worker.each_target { |entry| clean rac, entry } + if node.file_target? + add_common_dirs[File.dirname(node.full_name)] = true + end + node.each_target { |entry| rac.sys.clean entry } end } target_rx = nil rac.resolve_hooks.each { |hook| if hook.respond_to? :each_target hook.each_target { |entry| - if test ?f, entry - rac.cx.sys.rm_f entry - else - rac.cx.sys.rm_rf entry - end + add_common_dirs[File.expand_path(File.dirname(entry))] = true + rac.sys.clean entry } elsif hook.respond_to? :target_rx next(rx) unless (t_rx = hook.target_rx) target_rx = target_rx.nil? ? t_rx : Regexp.union(target_rx, t_rx) end } + t.goto_task_home if target_rx - rac.msg 1, "searching for rule products" - rac.cx.sys["**/*"].each { |entry| + rac.vmsg 1, "searching for rule products" + rac.sys["**/*"].each { |entry| if entry =~ target_rx - if test ?f, entry - rac.cx.sys.rm_f entry - else - rac.cx.sys.rm_rf entry - end + add_common_dirs[File.dirname(entry)] = true + rac.sys.clean entry end } end common = rac.var._get("__autoclean_common__") if common rac.rantfiles.each{ |rf| sd = rf.project_subdir common.each { |fn| path = sd.empty? ? fn : File.join(sd, fn) - clean rac, path + rac.sys.clean path } } + #STDERR.puts add_common_dirs.inspect + add_common_dirs.each { |dir, _| + common.each { |fn| + rac.sys.clean File.join(dir, fn) + } + } end - t.goto_task_home end - end - def self.clean(rac, entry) - if test ?f, entry - rac.cx.sys.rm_f entry - elsif test ?e, entry - rac.cx.sys.rm_rf entry - end end end