ruby-changes:65465
From: Nobuyoshi <ko1@a...>
Date: Sat, 13 Mar 2021 09:15:40 +0900 (JST)
Subject: [ruby-changes:65465] 07ff1f4b0b (master): Revert "Extracted AtomicWrite"
https://git.ruby-lang.org/ruby.git/commit/?id=07ff1f4b0b From 07ff1f4b0b040b594a6fec44d9888395343449c6 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada <nobu@r...> Date: Sat, 13 Mar 2021 09:14:20 +0900 Subject: Revert "Extracted AtomicWrite" This reverts commit 2148ee78a5bc5e679903f5839c66578bfcf94a39, mistakenly committed. --- tool/generic_erb.rb | 35 ++++++++++++++++++++++++---- tool/lib/atomic_write.rb | 60 ------------------------------------------------ 2 files changed, 30 insertions(+), 65 deletions(-) delete mode 100644 tool/lib/atomic_write.rb diff --git a/tool/generic_erb.rb b/tool/generic_erb.rb index 3227e7a..6af995f 100644 --- a/tool/generic_erb.rb +++ b/tool/generic_erb.rb @@ -6,22 +6,30 @@ https://github.com/ruby/ruby/blob/trunk/tool/generic_erb.rb#L6 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| https://github.com/ruby/ruby/blob/trunk/tool/generic_erb.rb#L41 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 diff --git a/tool/lib/atomic_write.rb b/tool/lib/atomic_write.rb deleted file mode 100644 index 12a8e12..0000000 --- a/tool/lib/atomic_write.rb +++ /dev/null @@ -1,60 +0,0 @@ https://github.com/ruby/ruby/blob/trunk/tool/generic_erb.rb#L0 -require 'optparse' -require_relative 'vpath' -require_relative 'colorize' - -class AtomicWrite - attr_accessor :vpath, :timestamp, :output, :compare :color - - def initialize - @vpath = nil - @timestamp = nil - @output = nil - @compare = nil - @color = nil - end - - def def_options(opt) - opt.on('-t', '--timestamp[=PATH]') {|v| @timestamp = v || true} - opt.on('-o', '--output=PATH') {|v| @output = v} - opt.on('-c', '--[no-]if-change') {|v| @compare = v} - opt.on('--color') {@color = true} - @vpath.def_options(opt) if @vpath - opt - end - - def emit(result) - output = @output - if output - update output, result - stamp output - else - print result - end - end - - def update(output, result) - color = Colorize.new(@color) - unchanged = color.pass("unchanged") - updated = color.fail("updated") - vpath = @vpath || File - if @compare and (vpath.open(output, "rb") {|f| f.read} rescue nil) == result - puts "#{output} #{unchanged}" - false - else - open(output, "wb") {|f| f.print result} - puts "#{output} #{updated}" - true - end - end - - def stamp(output, timestamp = @timestamp) - 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 - end -end -- cgit v1.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/