You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.9 KiB
71 lines
1.9 KiB
#!/usr/bin/ruby |
|
require 'json' |
|
require 'net/http' |
|
require 'yaml' |
|
require 'logger' |
|
|
|
$main_branch = "6.0.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`.strip |
|
if current_branch == "main" |
|
current_branch = $main_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)
|
|
|