prepare-forward-merge 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/usr/bin/ruby
  2. require 'json'
  3. require 'net/http'
  4. require 'yaml'
  5. require 'logger'
  6. $main_branch = "7.0.x"
  7. $log = Logger.new(STDOUT)
  8. $log.level = Logger::WARN
  9. def get_fixed_issues()
  10. $log.debug "Searching for for forward merge"
  11. rev=`git rev-parse -q --verify MERGE_HEAD`.strip
  12. $log.debug "Found #{rev} from git rev-parse"
  13. return nil unless rev
  14. fixed = []
  15. message = `git log -1 --pretty=%B #{rev}`
  16. message.each_line do |line|
  17. $log.debug "Checking #{line} for message"
  18. fixed << line.strip if /^(?:Fixes|Closes) gh-(\d+)/i.match(line)
  19. end
  20. $log.debug "Found fixed issues #{fixed}"
  21. return fixed;
  22. end
  23. def rewrite_message(message_file, fixed)
  24. current_branch = `git rev-parse --abbrev-ref HEAD`.strip
  25. if current_branch == "main"
  26. current_branch = $main_branch
  27. end
  28. rewritten_message = ""
  29. message = File.read(message_file)
  30. message.each_line do |line|
  31. match = /^Merge.*branch\ '(.*)'(?:\ into\ (.*))?$/.match(line)
  32. if match
  33. from_branch = match[1]
  34. if from_branch.include? "/"
  35. from_branch = from_branch.partition("/").last
  36. end
  37. to_brach = match[2]
  38. $log.debug "Rewriting merge message"
  39. line = "Merge branch '#{from_branch}'" + (to_brach ? " into #{to_brach}\n" : "\n")
  40. end
  41. if fixed and line.start_with?("#")
  42. $log.debug "Adding fixed"
  43. rewritten_message << "\n"
  44. fixed.each do |fixes|
  45. rewritten_message << "#{fixes} in #{current_branch}\n"
  46. end
  47. fixed = nil
  48. end
  49. rewritten_message << line
  50. end
  51. return rewritten_message
  52. end
  53. $log.debug "Running prepare-forward-merge hook script"
  54. message_file=ARGV[0]
  55. message_type=ARGV[1]
  56. if message_type != "merge"
  57. $log.debug "Not a merge commit"
  58. exit 0;
  59. end
  60. $log.debug "Searching for for forward merge"
  61. fixed = get_fixed_issues()
  62. rewritten_message = rewrite_message(message_file, fixed)
  63. File.write(message_file, rewritten_message)