Add prepare-forward-merge script
Add a git hook script that can be used to prepare a sensible merge commit message. Closes gh-21688pull/22022/head
parent
39caf45155
commit
10fdd65063
@ -0,0 +1,71 @@
|
|||||||
|
#!/usr/bin/ruby
|
||||||
|
require 'json'
|
||||||
|
require 'net/http'
|
||||||
|
require 'yaml'
|
||||||
|
require 'logger'
|
||||||
|
|
||||||
|
$master_branch = "2.4.x"
|
||||||
|
|
||||||
|
$log = Logger.new(STDOUT)
|
||||||
|
$log.level = Logger::WARN
|
||||||
|
|
||||||
|
def get_fixed_issues()
|
||||||
|
$log.debug "Searching for for forward merge"
|
||||||
|
rev=`git rev-parse -q --verify MERGE_HEAD`.strip
|
||||||
|
$log.debug "Found #{rev} from git rev-parse"
|
||||||
|
return nil unless rev
|
||||||
|
fixed = []
|
||||||
|
message = `git log -1 --pretty=%B #{rev}`
|
||||||
|
message.each_line do |line|
|
||||||
|
$log.debug "Checking #{line} for message"
|
||||||
|
fixed << line.strip if /^(?:Fixes|Closes) gh-(\d+)/.match(line)
|
||||||
|
end
|
||||||
|
$log.debug "Found fixed issues #{fixed}"
|
||||||
|
return fixed;
|
||||||
|
end
|
||||||
|
|
||||||
|
def rewrite_message(message_file, fixed)
|
||||||
|
current_branch = `git rev-parse --abbrev-ref HEAD`
|
||||||
|
if current_branch == "master"
|
||||||
|
current_branch = $master_branch
|
||||||
|
end
|
||||||
|
rewritten_message = ""
|
||||||
|
message = File.read(message_file)
|
||||||
|
message.each_line do |line|
|
||||||
|
match = /^Merge.*branch\ '(.*)'(?:\ into\ (.*))$/.match(line)
|
||||||
|
if match
|
||||||
|
from_branch = match[1]
|
||||||
|
if from_branch.include? "/"
|
||||||
|
from_branch = from_branch.partition("/").last
|
||||||
|
end
|
||||||
|
to_brach = match[2]
|
||||||
|
$log.debug "Rewriting merge message"
|
||||||
|
line = "Merge branch '#{from_branch}'" + (to_brach ? " into #{to_brach}\n" : "\n")
|
||||||
|
end
|
||||||
|
if fixed and line.start_with?("#")
|
||||||
|
$log.debug "Adding fixed"
|
||||||
|
rewritten_message << "\n"
|
||||||
|
fixed.each do |fixes|
|
||||||
|
rewritten_message << "#{fixes} in #{current_branch}\n"
|
||||||
|
end
|
||||||
|
fixed = nil
|
||||||
|
end
|
||||||
|
rewritten_message << line
|
||||||
|
end
|
||||||
|
return rewritten_message
|
||||||
|
end
|
||||||
|
|
||||||
|
$log.debug "Running prepare-forward-merge hook script"
|
||||||
|
|
||||||
|
message_file=ARGV[0]
|
||||||
|
message_type=ARGV[1]
|
||||||
|
|
||||||
|
if message_type != "merge"
|
||||||
|
$log.debug "Not a merge commit"
|
||||||
|
exit 0;
|
||||||
|
end
|
||||||
|
|
||||||
|
$log.debug "Searching for for forward merge"
|
||||||
|
fixed = get_fixed_issues()
|
||||||
|
rewritten_message = rewrite_message(message_file, fixed)
|
||||||
|
File.write(message_file, rewritten_message)
|
Loading…
Reference in New Issue