def visit_matching_files(name, &action) if File.directory?(name) #puts "=> #{name}" d = Dir.new(name) d.each {|child_name| if child_name != "." and child_name != ".." and child_name != ".svn" visit_matching_files(name+"/"+child_name, &action) end } else action.call(name) end end def patch_file(name) if name =~ /(.*)\.patch/ system("patch #$1 #{name}") end end def patch_tree(name) visit_matching_files(name) {|name| patch_file(name)} end patch_tree(".")