aboutsummaryrefslogtreecommitdiffstats
path: root/tool/generic_erb.rb
diff options
context:
space:
mode:
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 7ea33fbc5f..c234f3a52f 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