You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.9 KiB
Ruby
72 lines
1.9 KiB
Ruby
#!/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)
|