diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-03-13 09:14:20 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-03-13 09:14:20 +0900 |
commit | 07ff1f4b0b040b594a6fec44d9888395343449c6 (patch) | |
tree | 1dce4a67b4d22ab98d25375c6131b9b8a8eb323e /tool/generic_erb.rb | |
parent | 983f6d0f2af157ce2df9428a1701d8666877d0f5 (diff) | |
download | ruby-07ff1f4b0b040b594a6fec44d9888395343449c6.tar.gz |
Revert "Extracted AtomicWrite"
This reverts commit 2148ee78a5bc5e679903f5839c66578bfcf94a39, mistakenly committed.
Diffstat (limited to 'tool/generic_erb.rb')
-rw-r--r-- | tool/generic_erb.rb | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/tool/generic_erb.rb b/tool/generic_erb.rb index 3227e7a5ac..6af995fc13 100644 --- a/tool/generic_erb.rb +++ b/tool/generic_erb.rb @@ -6,22 +6,30 @@ require 'erb' require 'optparse' require_relative 'lib/vpath' -require_relative 'lib/atomic_write' +require_relative 'lib/colorize' vpath = VPath.new -aw = AtomicWrite.new -aw.vpath = vpath +timestamp = nil +output = nil +ifchange = nil source = false +color = nil templates = [] ARGV.options do |o| + o.on('-t', '--timestamp[=PATH]') {|v| timestamp = v || true} o.on('-i', '--input=PATH') {|v| template << v} + o.on('-o', '--output=PATH') {|v| output = v} + o.on('-c', '--[no-]if-change') {|v| ifchange = v} o.on('-x', '--source') {source = true} - aw.def_options(o) + o.on('--color') {color = true} vpath.def_options(o) o.order!(ARGV) templates << (ARGV.shift or abort o.to_s) if templates.empty? end +color = Colorize.new(color) +unchanged = color.pass("unchanged") +updated = color.fail("updated") result = templates.map do |template| if ERB.instance_method(:initialize).parameters.assoc(:key) # Ruby 2.6+ @@ -33,4 +41,21 @@ result = templates.map do |template| source ? erb.src : proc{erb.result(binding)}.call end result = result.size == 1 ? result[0] : result.join("") -aw.emit(result) +if output + if ifchange and (vpath.open(output, "rb") {|f| f.read} rescue nil) == result + puts "#{output} #{unchanged}" + else + open(output, "wb") {|f| f.print result} + puts "#{output} #{updated}" + end + if timestamp + if timestamp == true + dir, base = File.split(output) + timestamp = File.join(dir, ".time." + base) + end + File.open(timestamp, 'a') {} + File.utime(nil, nil, timestamp) + end +else + print result +end |