summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2024-05-28 13:51:45 -0700
committerTakashi Kokubun <takashikkbn@gmail.com>2024-05-28 13:51:45 -0700
commit7a860bacee34d082f9731f5edbeea49ee405a268 (patch)
treec37ecb19e61dd4dc0aba2d70b780eb2c6a860012
parent78732753261eb4c744620125505866e067e293dd (diff)
merger.rb: Drop SVN support
-rwxr-xr-xtool/merger.rb127
1 files changed, 26 insertions, 101 deletions
diff --git a/tool/merger.rb b/tool/merger.rb
index 0d9957074f..9aac5e8569 100755
--- a/tool/merger.rb
+++ b/tool/merger.rb
@@ -2,9 +2,8 @@
# -*- ruby -*-
exec "${RUBY-ruby}" "-x" "$0" "$@" && [ ] if false
#!ruby
-# This needs ruby 2.0, Subversion and Git.
-# As a Ruby committer, run this in an SVN repository
-# to commit a change.
+# This needs ruby 2.0 and Git.
+# As a Ruby committer, run this in a git repository to commit a change.
require 'tempfile'
require 'net/http'
@@ -15,13 +14,7 @@ ENV['LC_ALL'] = 'C'
ORIGIN = 'git@git.ruby-lang.org:ruby.git'
GITHUB = 'git@github.com:ruby/ruby.git'
-module Merger
- REPOS = 'svn+ssh://svn@ci.ruby-lang.org/ruby/'
-end
-
-class << Merger
- include Merger
-
+class << Merger = Object.new
def help
puts <<-HELP
\e[1msimple backport\e[0m
@@ -69,11 +62,7 @@ class << Merger
def version_up(teeny: false)
now = Time.now
now = now.localtime(9*60*60) # server is Japan Standard Time +09:00
- if svn_mode?
- system('svn', 'revert', 'version.h')
- else
- system('git', 'checkout', 'HEAD', 'version.h')
- end
+ system('git', 'checkout', 'HEAD', 'version.h')
v, pl = version
if teeny
@@ -129,31 +118,10 @@ class << Merger
end
tagname = "v#{v.join('_')}#{("_#{pl}" if v[0] < "2" || (v[0] == "2" && v[1] < "1") || /^(?:preview|rc)/ =~ pl)}"
- if svn_mode?
- if relname
- branch_url = `svn info`[/URL: (.*)/, 1]
- else
- branch_url = "#{REPOS}branches/ruby_"
- if v[0] < '2' || (v[0] == '2' && v[1] < '1')
- abort 'patchlevel must be greater than 0 for patch release' if pl == '0'
- branch_url << v.join('_')
- else
- abort 'teeny must be greater than 0 for patch release' if v[2] == '0'
- branch_url << v.join('_').sub(/_\d+\z/, '')
- end
- end
- tag_url = "#{REPOS}tags/#{tagname}"
- system('svn', 'info', tag_url, out: IO::NULL, err: IO::NULL)
- if $?.success?
- abort 'specfied tag already exists. check tag name and remove it if you want to force re-tagging'
- end
- execute('svn', 'cp', '-m', "add tag #{tagname}", branch_url, tag_url, interactive: true)
- else
- unless execute('git', 'tag', tagname)
- abort 'specfied tag already exists. check tag name and remove it if you want to force re-tagging'
- end
- execute('git', 'push', ORIGIN, tagname, interactive: true)
+ unless execute('git', 'tag', tagname)
+ abort 'specfied tag already exists. check tag name and remove it if you want to force re-tagging'
end
+ execute('git', 'push', ORIGIN, tagname, interactive: true)
end
def remove_tag(relname)
@@ -173,64 +141,33 @@ class << Merger
tagname = relname
end
- if svn_mode?
- tag_url = "#{REPOS}tags/#{tagname}"
- execute('svn', 'rm', '-m', "remove tag #{tagname}", tag_url, interactive: true)
- else
- execute('git', 'tag', '-d', tagname)
- execute('git', 'push', ORIGIN, ":#{tagname}", interactive: true)
- execute('git', 'push', GITHUB, ":#{tagname}", interactive: true)
- end
+ execute('git', 'tag', '-d', tagname)
+ execute('git', 'push', ORIGIN, ":#{tagname}", interactive: true)
+ execute('git', 'push', GITHUB, ":#{tagname}", interactive: true)
end
def update_revision_h
- if svn_mode?
- execute('svn', 'up')
- end
execute('ruby tool/file2lastrev.rb --revision.h . > revision.tmp')
execute('tool/ifchange', '--timestamp=.revision.time', 'revision.h', 'revision.tmp')
execute('rm', '-f', 'revision.tmp')
end
def stat
- if svn_mode?
- `svn stat`
- else
- `git status --short`
- end
+ `git status --short`
end
def diff(file = nil)
- if svn_mode?
- command = %w[svn diff --diff-cmd=diff -x -upw]
- else
- command = %w[git diff --color HEAD]
- end
+ command = %w[git diff --color HEAD]
IO.popen(command + [file].compact, &:read)
end
def commit(file)
- if svn_mode?
- begin
- execute('svn', 'ci', '-F', file)
- execute('svn', 'update') # svn ci doesn't update revision info on working copy
- ensure
- execute('rm', '-f', 'subversion.commitlog')
- end
- else
- current_branch = IO.popen(['git', 'rev-parse', '--abbrev-ref', 'HEAD'], &:read).strip
- execute('git', 'add', '.') &&
- execute('git', 'commit', '-F', file)
- end
+ current_branch = IO.popen(['git', 'rev-parse', '--abbrev-ref', 'HEAD'], &:read).strip
+ execute('git', 'add', '.') && execute('git', 'commit', '-F', file)
end
private
- def svn_mode?
- return @svn_mode if defined?(@svn_mode)
- @svn_mode = system("svn info", %i(out err) => IO::NULL)
- end
-
# Prints the version of Ruby found in version.h
def version
v = p = nil
@@ -303,8 +240,6 @@ else
revs.each do |rev|
git_rev = nil
case rev
- when /\A\d{1,6}\z/
- svn_rev = rev
when /\A\h{7,40}\z/
git_rev = rev
when nil then
@@ -315,30 +250,20 @@ else
exit
end
- # Merge revision from Git patch or SVN
- if git_rev
- git_uri = "https://git.ruby-lang.org/ruby.git/patch/?id=#{git_rev}"
- resp = Net::HTTP.get_response(URI(git_uri))
- if resp.code != '200'
- abort "'#{git_uri}' returned status '#{resp.code}':\n#{resp.body}"
- end
- patch = resp.body.sub(/^diff --git a\/version\.h b\/version\.h\nindex .*\n--- a\/version\.h\n\+\+\+ b\/version\.h\n@@ .* @@\n(?:[-\+ ].*\n|\n)+/, '')
-
- message = "#{(patch[/^Subject: (.*)\n---\n /m, 1] || "Message not found for revision: #{git_rev}\n")}"
- message.gsub!(/\G(.*)\n( .*)/, "\\1\\2")
- message = "\n\n#{message}"
+ # Merge revision from Git patch
+ git_uri = "https://git.ruby-lang.org/ruby.git/patch/?id=#{git_rev}"
+ resp = Net::HTTP.get_response(URI(git_uri))
+ if resp.code != '200'
+ abort "'#{git_uri}' returned status '#{resp.code}':\n#{resp.body}"
+ end
+ patch = resp.body.sub(/^diff --git a\/version\.h b\/version\.h\nindex .*\n--- a\/version\.h\n\+\+\+ b\/version\.h\n@@ .* @@\n(?:[-\+ ].*\n|\n)+/, '')
- puts '+ git apply'
- IO.popen(['git', 'apply', '--3way'], 'wb') { |f| f.write(patch) }
- else
- default_merge_branch = (%r{^URL: .*/branches/ruby_1_8_} =~ `svn info` ? 'branches/ruby_1_8' : 'trunk')
- svn_src = "#{Merger::REPOS}#{ARGV[1] || default_merge_branch}"
- message = IO.popen(['svn', 'log', '-c', svn_rev, svn_src], &:read)
+ message = "#{(patch[/^Subject: (.*)\n---\n /m, 1] || "Message not found for revision: #{git_rev}\n")}"
+ message.gsub!(/\G(.*)\n( .*)/, "\\1\\2")
+ message = "\n\n#{message}"
- cmd = ['svn', 'merge', '--accept=postpone', '-c', svn_rev, svn_src]
- puts "+ #{cmd.join(' ')}"
- system(*cmd)
- end
+ puts '+ git apply'
+ IO.popen(['git', 'apply', '--3way'], 'wb') { |f| f.write(patch) }
commit_message << message.sub(/\A-+\nr.*/, '').sub(/\n-+\n\z/, '').gsub(/^./, "\t\\&")
end