summaryrefslogtreecommitdiff
path: root/tool/format-release
diff options
context:
space:
mode:
Diffstat (limited to 'tool/format-release')
-rwxr-xr-xtool/format-release51
1 files changed, 16 insertions, 35 deletions
diff --git a/tool/format-release b/tool/format-release
index 72fc173000..d02154df1f 100755
--- a/tool/format-release
+++ b/tool/format-release
@@ -9,6 +9,7 @@ end
require "open-uri"
require "yaml"
+require_relative "./ruby-version"
Diffy::Diff.default_options.merge!(
include_diff_info: true,
@@ -30,10 +31,9 @@ class Tarball
def gz?; @url.end_with?('.gz'); end
def zip?; @url.end_with?('.zip'); end
- def bz2?; @url.end_with?('.bz2'); end
def xz?; @url.end_with?('.xz'); end
- def ext; @url[/(?:zip|tar\.(?:gz|bz2|xz))\z/]; end
+ def ext; @url[/(?:zip|tar\.(?:gz|xz))\z/]; end
def to_md
<<eom
@@ -51,29 +51,14 @@ eom
# SHA1: 21f62c369661a2ab1b521fd2fa8191a4273e12a1
# SHA256: 97cea8aa63dfa250ba6902b658a7aa066daf817b22f82b7ee28f44aec7c2e394
# SHA512: 1e2042324821bb4e110af7067f52891606dcfc71e640c194ab1c117f0b941550e0b3ac36ad3511214ac80c536b9e5cfaf8789eec74cf56971a832ea8fc4e6d94
- def self.parse(wwwdir, version, rubydir)
+ def self.parse(wwwdir, version, rubydir, source_ref_or_sha = nil)
unless /\A(\d+)\.(\d+)\.(\d+)(?:-(?:preview|rc)\d+)?\z/ =~ version
raise "unexpected version string '#{version}'"
end
- x = $1.to_i
- y = $2.to_i
- z = $3.to_i
- # previous tag for git diff --shortstat
- # It's only for x.y.0 release
- if z != 0
- prev_tag = nil
- elsif y != 0
- prev_tag = "v#{x}_#{y-1}_0"
- prev_ver = "#{x}.#{y-1}.0"
- elsif x == 3 && y == 0 && z == 0
- prev_tag = "v2_7_0"
- prev_ver = "2.7.0"
- else
- raise "unexpected version for prev_ver '#{version}'"
- end
+ teeny = Integer($3)
uri = "https://cache.ruby-lang.org/pub/tmp/ruby-info-#{version}-draft.yml"
- info = YAML.load(URI(uri).read)
+ info = YAML.unsafe_load(URI(uri).read)
if info.size != 1
raise "unexpected info.yml '#{uri}'"
end
@@ -88,10 +73,14 @@ eom
tarballs << tarball
end
- if prev_tag
+ if teeny == 0
# show diff shortstat
- tag = "v#{version.gsub(/[.\-]/, '_')}"
- stat = `git -C #{rubydir} diff -l0 --shortstat #{prev_tag}..#{tag}`
+ tag = source_ref_or_sha || RubyVersion.tag(version)
+ prev_tag = RubyVersion.tag(RubyVersion.previous(version))
+ stat = IO.popen(["git", "-C", rubydir, "diff", "-l0", "--shortstat", "#{prev_tag}..#{tag}"], &:read)
+ unless $?.success?
+ raise "failed to diff #{prev_tag}..#{tag}"
+ end
files_changed, insertions, deletions = stat.scan(/\d+/)
end
@@ -184,7 +173,7 @@ eom
if /\.0(?:-\w+)?\z/ =~ ver
# preview, rc, or first release
entry <<= <<eom
- tag: v#{ver.tr('.-', '_')}
+ tag: #{RubyVersion.tag(ver)}
stats:
files_changed: #{files_changed}
insertions: #{insertions}
@@ -196,34 +185,25 @@ eom
url:
gz: https://cache.ruby-lang.org/pub/ruby/#{xy}/ruby-#{ver}.tar.gz
zip: https://cache.ruby-lang.org/pub/ruby/#{xy}/ruby-#{ver}.zip
- bz2: https://cache.ruby-lang.org/pub/ruby/#{xy}/ruby-#{ver}.tar.bz2
xz: https://cache.ruby-lang.org/pub/ruby/#{xy}/ruby-#{ver}.tar.xz
size:
gz: #{ary.find{|x|x.gz? }.size}
zip: #{ary.find{|x|x.zip?}.size}
- bz2: #{ary.find{|x|x.bz2?}&.size}
xz: #{ary.find{|x|x.xz? }.size}
sha1:
gz: #{ary.find{|x|x.gz? }.sha1}
zip: #{ary.find{|x|x.zip?}.sha1}
- bz2: #{ary.find{|x|x.bz2?}&.sha1}
xz: #{ary.find{|x|x.xz? }.sha1}
sha256:
gz: #{ary.find{|x|x.gz? }.sha256}
zip: #{ary.find{|x|x.zip?}.sha256}
- bz2: #{ary.find{|x|x.bz2?}&.sha256}
xz: #{ary.find{|x|x.xz? }.sha256}
sha512:
gz: #{ary.find{|x|x.gz? }.sha512}
zip: #{ary.find{|x|x.zip?}.sha512}
- bz2: #{ary.find{|x|x.bz2?}&.sha512}
xz: #{ary.find{|x|x.xz? }.sha512}
eom
- if ver.start_with?("3.")
- entry = entry.gsub(/ bz2: .*\n/, "")
- end
-
if data.include?("\n- version: #{ver}\n")
# update existing entry
data.sub!(/\n- version: #{ver}\n(^ .*\n)*\n/, "\n#{entry}\n")
@@ -258,11 +238,12 @@ def main
wwwdir = ARGV.shift
version = ARGV.shift
rubydir = ARGV.shift
+ source_ref_or_sha = ARGV.shift
unless rubydir
- STDERR.puts "usage: format-release <dir-of-w.r-l.o> <version> <ruby-dir>"
+ STDERR.puts "usage: format-release <dir-of-w.r-l.o> <version> <ruby-dir> [source-ref-or-sha]"
exit
end
- Tarball.parse(wwwdir, version, rubydir)
+ Tarball.parse(wwwdir, version, rubydir, source_ref_or_sha)
end
main