summaryrefslogtreecommitdiff
path: root/tool/update-bundled_gems.rb
blob: 2842516cac2345a4ed74e2edf791e6eee2f8482b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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
  }
  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
end