diff options
| author | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2026-03-24 14:48:05 +0900 |
|---|---|---|
| committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2026-03-24 14:49:12 +0900 |
| commit | 167e8d47bedfbc98dcf71607d1ab2000a696b2ae (patch) | |
| tree | f81419ea5cabde262d1853c7bca8031c8c2bec22 | |
| parent | 27721631b39b941b1ced49fea50b9356eb3e1d71 (diff) | |
Sync the latest version of backport tools
| -rwxr-xr-x | tool/merger.rb | 24 | ||||
| -rwxr-xr-x | tool/redmine-backporter.rb | 35 |
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 |
