summaryrefslogtreecommitdiff
path: root/tool/generic_erb.rb
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-10-17 10:46:23 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-10-17 10:46:23 +0000
commitb025ce46786ced077d67c2a2bbe53af3f819f9d7 (patch)
tree242aef5fa2be80f10e11f4f52598f299fc66a118 /tool/generic_erb.rb
parent6e738bf2b19fdb8c15a00e08b417596e00452ea0 (diff)
* common.mk (ID_H_TARGET): phony target to update id.h.
* tool/ifchange, win32/ifchange.bat: --timestamp option added. * tool/generic_erb.rb: --timestamp, --output and --if-change options added. * template/id.h.tmpl: moved from id.h. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19822 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'tool/generic_erb.rb')
-rw-r--r--tool/generic_erb.rb32
1 files changed, 31 insertions, 1 deletions
diff --git a/tool/generic_erb.rb b/tool/generic_erb.rb
index 7ea33fb..c234f3a 100644
--- a/tool/generic_erb.rb
+++ b/tool/generic_erb.rb
@@ -1,4 +1,34 @@
require 'erb'
+require 'optparse'
+require 'fileutils'
+timestamp = nil
+output = nil
+ifchange = nil
+opt = OptionParser.new do |o|
+ o.on('-t', '--timestamp[=PATH]') {|v| timestamp = v || true}
+ o.on('-o', '--output=PATH') {|v| output = v}
+ o.on('-c', '--[no-]if-change') {|v| ifchange = v}
+ o.order!(ARGV)
+end or abort opt.opt_s
template = ARGV.shift
-ERB.new(File.read(template), nil, '%').run
+erb = ERB.new(File.read(template), nil, '%')
+erb.filename = template
+result = erb.result
+if output
+ if ifchange
+ if (IO.read(output) rescue nil) == result
+ puts "#{output} unchanged"
+ else
+ open(output, "wb") {|f| f.print result}
+ puts "#{output} updated"
+ end
+ end
+ if timestamp
+ if timestamp == true
+ dir, base = File.split(output)
+ timestamp = File.join(dir, ".time." + base)
+ end
+ FileUtils.touch(timestamp)
+ end
+end