diff options
| -rwxr-xr-x | redprine | 52 | 
1 files changed, 30 insertions, 22 deletions
| @@ -86,42 +86,51 @@ function extract_data_from_pull_request_json () {  			)'  } -# Produces a tab-separated list of branch names and pull request URLs from our -# extracted JSON. -function branches_and_pull_request_urls () { -	local pull_requests="$1" +# Produces a tab-separated branch name and pull request URL from our pull +# request JSON. +function branch_and_pull_request_url () { +	local pull_request="$1" -	printf "%s\n" "$pull_requests" | -		jq --raw-output 'map([.ref, .html_url]) | .[] | @tsv' +	printf "%s\n" "$pull_request" | +		jq --raw-output '[.ref, .html_url] | @tsv'  } -# Turns a tab-separated list of branch names and pull request URLs into a -# tab-separated list of Redmine issue numbers and pull request URLs. Gets the -# issue number as a four-digit prefix of the branch name. -function issue_numbers_and_pull_request_urls () { -	local pull_requests="$1" +# Turns a tab-separated branch name and pull request URL into a tab-separated +# Redmine issue number and pull request URL. Gets the issue number as a +# four-digit prefix of the branch name. +function issue_number_and_pull_request_url () { +	local pull_request="$1" -	local branch_and_urls=$(branches_and_pull_request_urls "$pull_requests") +	local branch_and_url=$(branch_and_pull_request_url "$pull_request") -	echo "$branch_and_urls" | +	echo "$branch_and_url" |  		perl -ne '/^(\d{4})-[^\t]*\t(.*)/ && print "$1\t$2\n"'  } +# Takes a JSON array of Redprine pull request hashes and outputs one hash per +# line so the hashes can be iterated over in a shell loop. +function each_pull_request () { +	local pull_requests="$1" + +	printf "%s\n" "$pull_requests" | +		jq --compact-output '. | .[]' +} +  # Updates fields for each given issue.  function update_redmine_statuses () { -	local issue_ids_and_urls="$1" +	local pull_requests="$1" -	if [ ! -z "$issue_ids_and_urls" ]; then -		for id_and_url in "$issue_ids_and_urls"; do -			update_redmine_status "$id_and_url" -		done -	fi +	for pull_request in $(each_pull_request "$pull_requests"); do +		update_redmine_status "$pull_request" +	done  }  # Given a tab-separated Redmine issue number and GitHub pull request URL, will  # update fields on the given issue.  function update_redmine_status () { -	local issue_pr="$1" +	local pull_request="$1" + +	local issue_pr=$(issue_number_and_pull_request_url "$pull_request")  	local issue_id=$(  		echo "$issue_pr" | @@ -173,9 +182,8 @@ function update_cache_with_new_pulls () {  function main () {  	local pr_json=$(new_pull_requests) -	local issue_prs=$(issue_numbers_and_pull_request_urls "$pr_json") -	update_redmine_statuses "$issue_prs" +	update_redmine_statuses "$pr_json"  	update_cache_with_new_pulls "$pr_json"  } | 
