summaryrefslogtreecommitdiff
path: root/tool/merger.rb
diff options
context:
space:
mode:
Diffstat (limited to 'tool/merger.rb')
-rwxr-xr-xtool/merger.rb16
1 files changed, 10 insertions, 6 deletions
diff --git a/tool/merger.rb b/tool/merger.rb
index d38f00b0fd..0d9957074f 100755
--- a/tool/merger.rb
+++ b/tool/merger.rb
@@ -57,11 +57,11 @@ class << Merger
yield if block_given?
STDERR.puts "\e[1;33m#{str} ([y]es|[a]bort|[r]etry#{'|[e]dit' if editfile})\e[0m"
case STDIN.gets
- when /\Aa/i then exit
+ when /\Aa/i then exit 1
when /\Ar/i then redo
when /\Ay/i then break
when /\Ae/i then system(ENV['EDITOR'], editfile)
- else exit
+ else exit 1
end
end
end
@@ -204,7 +204,7 @@ class << Merger
if svn_mode?
command = %w[svn diff --diff-cmd=diff -x -upw]
else
- command = %w[git diff --color]
+ command = %w[git diff --color HEAD]
end
IO.popen(command + [file].compact, &:read)
end
@@ -295,7 +295,8 @@ else
tickets = ''
end
- revstr = ARGV[0].delete('^, :\-0-9a-fA-F')
+ revstr = ARGV[0].gsub(%r!https://github\.com/ruby/ruby/commit/|https://bugs\.ruby-lang\.org/projects/ruby-master/repository/git/revisions/!, '')
+ revstr = revstr.delete('^, :\-0-9a-fA-F')
revs = revstr.split(/[,\s]+/)
commit_message = ''
@@ -323,9 +324,12 @@ else
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 = "\n\n#{(patch[/^Subject: (.*)\n\ndiff --git/m, 1] || "Message not found for revision: #{git_rev}\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}"
+
puts '+ git apply'
- IO.popen(['git', 'apply'], 'wb') { |f| f.write(patch) }
+ 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}"