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