summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHiroshi SHIBATA <hsbt@ruby-lang.org>2026-03-24 14:48:05 +0900
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2026-03-24 14:49:12 +0900
commit167e8d47bedfbc98dcf71607d1ab2000a696b2ae (patch)
treef81419ea5cabde262d1853c7bca8031c8c2bec22
parent27721631b39b941b1ced49fea50b9356eb3e1d71 (diff)
Sync the latest version of backport tools
-rwxr-xr-xtool/merger.rb24
-rwxr-xr-xtool/redmine-backporter.rb35
2 files changed, 33 insertions, 26 deletions
diff --git a/tool/merger.rb b/tool/merger.rb
index e45a3ac586..4c096087fc 100755
--- a/tool/merger.rb
+++ b/tool/merger.rb
@@ -65,7 +65,8 @@ class << Merger = Object.new
if teeny
v[2].succ!
end
- if pl != '-1' # trunk does not have patchlevel
+ # We stopped bumping RUBY_PATCHLEVEL at Ruby 4.0.0.
+ if Integer(v[0]) <= 3
pl.succ!
end
@@ -113,8 +114,17 @@ class << Merger = Object.new
abort 'no relname is given and not in a release branch even if this is patch release'
end
end
- tagname = "v#{v.join('_')}#{("_#{pl}" if v[0] < "2" || (v[0] == "2" && v[1] < "1") || /^(?:preview|rc)/ =~ pl)}"
+ if /^(?:preview|rc)/ =~ pl
+ tagname = "v#{v.join('.')}-#{pl}"
+ elsif Integer(v[0]) >= 4
+ tagname = "v#{v.join('.')}"
+ else
+ tagname = "v#{v.join('_')}"
+ end
+ unless execute('git', 'diff', '--exit-code')
+ abort 'uncommitted changes'
+ end
unless execute('git', 'tag', tagname)
abort 'specfied tag already exists. check tag name and remove it if you want to force re-tagging'
end
@@ -132,10 +142,12 @@ class << Merger = Object.new
unless relname
raise ArgumentError, 'relname is not specified'
end
- if /^v/ !~ relname
- tagname = "v#{relname.gsub(/[.-]/, '_')}"
- else
+ if relname.start_with?('v')
tagname = relname
+ elsif Integer(relname.split('.', 2).first) >= 4
+ tagname = "v#{relname}"
+ else
+ tagname = "v#{relname.gsub(/[.-]/, '_')}"
end
execute('git', 'tag', '-d', tagname)
@@ -260,7 +272,7 @@ else
end
# Merge revision from Git patch
- git_uri = "https://git.ruby-lang.org/ruby.git/patch/?id=#{git_rev}"
+ git_uri = "https://github.com/ruby/ruby/commit/#{git_rev}.patch"
resp = Net::HTTP.get_response(URI(git_uri))
if resp.code != '200'
abort "'#{git_uri}' returned status '#{resp.code}':\n#{resp.body}"
diff --git a/tool/redmine-backporter.rb b/tool/redmine-backporter.rb
index dcf8965352..95a9688cb2 100755
--- a/tool/redmine-backporter.rb
+++ b/tool/redmine-backporter.rb
@@ -66,25 +66,25 @@ class String
def color(fore=nil, back=nil, opts={}, bold: false, underscore: false)
seq = ""
if bold || opts[:bold]
- seq << "\e[1m"
+ seq = seq + "\e[1m"
end
if underscore || opts[:underscore]
- seq << "\e[2m"
+ seq = seq + "\e[2m"
end
if fore
c = COLORS[fore]
raise "unknown foreground color #{fore}" unless c
- seq << "\e[#{c}m"
+ seq = seq + "\e[#{c}m"
end
if back
c = COLORS[back]
raise "unknown background color #{back}" unless c
- seq << "\e[#{c + 10}m"
+ seq = seq + "\e[#{c + 10}m"
end
if seq.empty?
self
else
- seq << self << "\e[0m"
+ seq = seq + self + "\e[0m"
end
end
end
@@ -190,7 +190,7 @@ def backport_command_string
next false if c.match(/\A\d{1,6}\z/) # skip SVN revision
# check if the Git revision is included in master
- has_commit(c, "master")
+ has_commit(c, "origin/master")
end.sort_by do |changeset|
Integer(IO.popen(%W[git show -s --format=%ct #{changeset}], &:read))
end
@@ -351,27 +351,22 @@ eom
next
end
- if rev.nil? && log = find_git_log("##@issue]")
- /^commit (?<rev>\h{40})$/ =~ log
- end
- if log && rev
- str = log[/merge revision\(s\) ([^:]+)(?=:)/]
- if str
- str.sub!(/\Amerge/, 'merged')
- str.gsub!(/\h{8,40}/, 'commit:\0')
- str = "ruby_#{TARGET_VERSION.tr('.','_')} commit:#{rev} #{str}."
+ if rev && has_commit(rev, "ruby_#{TARGET_VERSION.tr('.','_')}")
+ notes = "ruby_#{TARGET_VERSION.tr('.','_')} commit:#{rev}."
+ elsif rev.nil? && (log = find_git_log("##@issue]")) && !(revs = log.scan(/^commit (\h{40})$/).flatten).empty?
+ commits = revs.map { |rev| "commit:#{rev}" }.join(", ")
+ if merged_revs = log[/merge revision\(s\) ([^:]+)(?=:)/]
+ merged_revs.sub!(/\Amerge/, 'merged')
+ merged_revs.gsub!(/\h{8,40}/, 'commit:\0')
+ str = "ruby_#{TARGET_VERSION.tr('.','_')} #{commits} #{merged_revs}."
else
- str = "ruby_#{TARGET_VERSION.tr('.','_')} commit:#{rev}."
+ str = "ruby_#{TARGET_VERSION.tr('.','_')} #{commits}."
end
if notes
str << "\n"
str << notes
end
notes = str
- elsif rev && has_commit(rev, "ruby_#{TARGET_VERSION.tr('.','_')}")
- # Backport commit's log doesn't have the issue number.
- # Instead of that manually it's provided.
- notes = "ruby_#{TARGET_VERSION.tr('.','_')} commit:#{rev}."
else
puts "no commit is found whose log include ##@issue"
next