blob: 295e981654d1bf824b00790c0830ad309693ebdc [file] [log] [blame] [edit]
#!/bin/bash
PROJECT=${1}
PATCH=${2}
BRANCH=${3:-master}
if [[ ${PATCH} =~ ^https://review.opendev.org ]]; then
FORMAT=gerrit
PATCH_ID=$(echo ${PATCH} | awk -F/ '{print $NF}')
elif [[ ${PATCH} =~ ^https://github.com ]]; then
FORMAT=github
PATCH_ID=$(echo ${PATCH} | awk -F/ '{print $NF}')
else
# Exit if we don't know how to handle this patch
echo "Unknown patch format: ${PATCH}"
exit 1
fi
# Clone the repository in a temporary directory if it doesn't exist
if [ ! -d "/tmp/vexxhost-${PROJECT}" ]; then
gh repo clone vexxhost/${PROJECT} /tmp/vexxhost-${PROJECT}
fi
# Switch to the repository
cd /tmp/vexxhost-${PROJECT}
# Update the repository
git fetch origin
# Switch to the branch that we're cherry-picking into
git checkout -B patch/${BRANCH}/${PATCH_ID} origin/${BRANCH}
# Cherry-pick the change
if [[ ${FORMAT} == "gerrit" ]]; then
LATEST_REV=$(git ls-remote https://opendev.org/openstack/${PROJECT} | grep -E "refs/changes/[[:digit:]]+/${PATCH_ID}/" | sort -t / -k 5 -g | tail -n1 | awk '{print $2}')
git fetch https://review.opendev.org/openstack/${PROJECT} ${LATEST_REV} && git cherry-pick FETCH_HEAD
elif [[ ${FORMAT} == "github" ]]; then
gh pr checkout --branch patch/${BRANCH}/${PATCH_ID} -f ${PATCH}
fi
# Push this branch to the remote
git push -u origin patch/${BRANCH}/${PATCH_ID}
# Create a PR for this change
gh repo set-default vexxhost/${1}
gh pr create \
--title "$(git show -s --format=%s)" \
--body "$(git show -s --format=%B)" \
--base ${BRANCH} \
--head patch/${BRANCH}/${PATCH_ID}