summaryrefslogtreecommitdiff
path: root/tool/update-bundled_gems.rb
diff options
context:
space:
mode:
Diffstat (limited to 'tool/update-bundled_gems.rb')
-rwxr-xr-xtool/update-bundled_gems.rb36
1 files changed, 27 insertions, 9 deletions
diff --git a/tool/update-bundled_gems.rb b/tool/update-bundled_gems.rb
index 48dcaa9f2c..2842516cac 100755
--- a/tool/update-bundled_gems.rb
+++ b/tool/update-bundled_gems.rb
@@ -1,20 +1,38 @@
#!ruby -pla
BEGIN {
require 'rubygems'
+ date = nil
+ # STDOUT is not usable in inplace edit mode
+ output = $-i ? STDOUT : STDERR
+}
+output = STDERR if ARGF.file == STDIN
+END {
+ output.print date.strftime("latest_date=%F") if date
}
unless /^[^#]/ !~ (gem = $F[0])
+ ver = Gem::Version.new($F[1])
(gem, src), = Gem::SpecFetcher.fetcher.detect(:latest) {|s|
s.platform == "ruby" && s.name == gem
}
- gem = src.fetch_spec(gem)
- uri = gem.metadata["source_code_uri"] || gem.homepage
- uri = uri.sub(%r[\Ahttps://github\.com/[^/]+/[^/]+\K/tree/.*], "").chomp(".git")
- if $F[3]
- if $F[3].include?($F[1])
- $F[3][$F[1]] = gem.version.to_s
- elsif $F[2] != gem.version and /\A\h+\z/ =~ $F[3]
- $F[3..-1] = []
+ if gem.version > ver
+ gem = src.fetch_spec(gem)
+ if ENV["UPDATE_BUNDLED_GEMS_ALL"]
+ uri = gem.metadata["source_code_uri"] || gem.homepage
+ uri = uri.sub(%r[\Ahttps://github\.com/[^/]+/[^/]+\K/tree/.*], "").chomp(".git")
+ else
+ uri = $F[2]
+ end
+ date = gem.date if !date or gem.date && gem.date > date
+ if $F[3]
+ if $F[3].include?($F[1])
+ $F[3][$F[1]] = gem.version.to_s
+ elsif Gem::Version.new($F[1]) != gem.version and /\A\h+\z/ =~ $F[3]
+ $F[3..-1] = []
+ end
end
+ f = [gem.name, gem.version.to_s, uri, *$F[3..-1]]
+ $_.gsub!(/\S+\s*(?=\s|$)/) {|s| (f.shift || "").ljust(s.size)}
+ $_ = [$_, *f].join(" ") unless f.empty?
+ $_.rstrip!
end
- $_ = [gem.name, gem.version, uri, *$F[3..-1]].join(" ")
end