doc: update repo
diff --git a/hack/repos/patch b/hack/repos/patch
new file mode 100755
index 0000000..295e981
--- /dev/null
+++ b/hack/repos/patch
@@ -0,0 +1,50 @@
+#!/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}