blob: 09dbb5c00d872cee1ec14443e7c2a5b0eb7d4d26 [file] [log] [blame]
#!/usr/bin/env bash
# A helpful script to land contributions from external developers.
# The script requires one parameter, which is the issue number to land on behalf
# of the author.
if [[ -z "$1" ]]; then
echo "First argument must be the issue number."
echo "Example: $(basename $0) 123456"
exit 1
fi
(
get_author_from_first_comment() {
# Need to strip colors first from the result of |git cl comments|.
git cl comments | \
sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" | \
grep "@" | \
head -n 1 | \
awk '{print $3;}'
}
set -e
issue_number=$1
# Ensure origin/master is up to date, and checkout a branch which tracks it.
git remote update
git checkout -tb land-issue-${issue_number} origin/master
# Setup the branch correctly with the last patch from the review.
git cl patch ${issue_number}
git cl issue ${issue_number}
# Print the CL description to help identify if this is the correct CL.
echo "The following is the description on that issue:"
echo "######"
GIT_EDITOR=cat git cl description | \
grep -v "^#" | \
sed -r "s/Loaded authentication cookies from.*$//g"
echo "######"
# Get author e-mail by inspecting the first comment, and ask user to verify.
author_email=$(get_author_from_first_comment)
echo "Author e-mail: Enter to use, or enter correct e-mail [${author_email}]:"
read email_override
if [[ ! -z "${email_override}" ]]; then
author_email="${email_override}"
fi
# Get author name from the username in the e-mail, and ask user to verify.
author_name=$(echo ${author_email} | awk '{split($0,a,"@"); print a[1]};')
echo "Author name: Enter to use, or enter correct name. [${author_name}]:"
read name_override
if [[ ! -z "${name_override}" ]]; then
author_name="${name_override}"
fi
# Land the current branch.
git cl land -c "${author_name} <${author_email}>"
)