From 4a6e08c8179e945560282c47300d15020ff7810f Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 4 Jun 2020 16:11:28 -0700 Subject: [PATCH] Add logging to forward-merge script Add some logging to aid with development. --- git/hooks/forward-merge | 49 ++++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/git/hooks/forward-merge b/git/hooks/forward-merge index 2d0a3b199b6..01efa210d31 100755 --- a/git/hooks/forward-merge +++ b/git/hooks/forward-merge @@ -2,6 +2,10 @@ require 'json' require 'net/http' require 'yaml' +require 'logger' + +$log = Logger.new(STDOUT) +$log.level = Logger::WARN class ForwardMerge attr_reader :issue, :milestone, :message, :line @@ -14,21 +18,41 @@ class ForwardMerge end def find_forward_merge(message_file) - rev=`git rev-parse -q --verify MERGE_HEAD` + $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 message = File.read(message_file) message.each_line do |line| + $log.debug "Checking #{line} for message" match = /^(?:Fixes|Closes) gh-(\d+) in ([\d\.]+(?:(?:M|RC)\d)?)$/.match(line) if match then issue = match[1] milestone = match[2] + $log.debug "Matched reference to issue #{issue} in milestone #{milestone}" return ForwardMerge.new(issue, milestone, message, line) end end + $log.debug "No match in merge message" return nil end +def get_issue(username, password, repository, number) + $log.debug "Getting issue #{number} from GitHub repository #{repository}" + uri = URI("https://api.github.com/repos/#{repository}/issues/#{number}") + http = Net::HTTP.new(uri.host, uri.port) + http.use_ssl=true + request = Net::HTTP::Get.new(uri.path) + request.basic_auth(username, password) + response = http.request(request) + $log.debug "Get HTTP response #{response.code}" + return JSON.parse(response.body) unless response.code != '200' + puts "Failed to retrieve issue #{number}: #{response.message}" + exit 1 +end + def find_milestone(username, password, repository, title) + $log.debug "Finding milestone #{title} from GitHub repository #{repository}" uri = URI("https://api.github.com/repos/#{repository}/milestones") http = Net::HTTP.new(uri.host, uri.port) http.use_ssl=true @@ -37,25 +61,15 @@ def find_milestone(username, password, repository, title) response = http.request(request) milestones = JSON.parse(response.body) milestones.each do |milestone| + $log.debug "Considering #{milestone['title']}" return milestone['number'] if milestone['title'] == title end puts "Milestone #{title} not found" exit 1 end -def get_issue(username, password, repository, number) - uri = URI("https://api.github.com/repos/#{repository}/issues/#{number}") - http = Net::HTTP.new(uri.host, uri.port) - http.use_ssl=true - request = Net::HTTP::Get.new(uri.path) - request.basic_auth(username, password) - response = http.request(request) - return JSON.parse(response.body) unless response.code != '200' - puts "Failed to retrieve issue #{number}: #{response.message}" - exit 1 -end - def create_issue(username, password, repository, original, title, labels, milestone, milestone_name, dry_run) + $log.debug "Finding forward-merge issue in GitHub repository #{repository} for '#{title}'" uri = URI("https://api.github.com/repos/#{repository}/issues") http = Net::HTTP.new(uri.host, uri.port) http.use_ssl=true @@ -73,23 +87,32 @@ def create_issue(username, password, repository, original, title, labels, milest return "dry-run" end response = JSON.parse(http.request(request).body) + $log.debug "Created new issue #{response['number']}" return response['number'] end +$log.debug "Running forward-merge hook script" message_file=ARGV[0] + forward_merge = find_forward_merge(message_file) exit 0 unless forward_merge + +$log.debug "Loading config from ~/.spring-boot/forward_merge.yml" config = YAML.load_file(File.join(Dir.home, '.spring-boot', 'forward-merge.yml')) username = config['github']['credentials']['username'] password = config['github']['credentials']['password'] dry_run = config['dry_run'] repository = 'spring-projects/spring-boot' + existing_issue = get_issue(username, password, repository, forward_merge.issue) title = existing_issue['title'] labels = existing_issue['labels'].map { |label| label['name'] } labels << "status: forward-port" +$log.debug "Processing issue '#{title}'" + milestone = find_milestone(username, password, repository, forward_merge.milestone) new_issue_number = create_issue(username, password, repository, forward_merge.issue, title, labels, milestone, forward_merge.milestone, dry_run) + puts "Created gh-#{new_issue_number} for forward port of gh-#{forward_merge.issue} into #{forward_merge.milestone}" rewritten_message = forward_merge.message.sub(forward_merge.line, "Closes gh-#{new_issue_number}\n") File.write(message_file, rewritten_message)