1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #!/usr/bin/ruby
- require 'json'
- require 'net/http'
- require 'yaml'
- require 'logger'
- $main_branch = "1.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`.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)
|