diff --git a/scripts/code-review/checkout-to-pr.sh b/scripts/code-review/checkout-to-pr.sh new file mode 100755 index 000000000000..c55ce123ef64 --- /dev/null +++ b/scripts/code-review/checkout-to-pr.sh @@ -0,0 +1,73 @@ +#!/bin/bash +# set -e +# set -x + +# Check if `jq` is available +if ! command -v jq &> /dev/null; then + echo "Error: 'jq' is not installed. Please install 'jq' before using this script." + echo "sudo apt install jq -y" + exit 1 +fi + +# Check if both the PR number is provided +if [ ! $# > 0 ]; then + echo "Usage: $0 " + exit 1 +fi + +# Check if the PR number was provided as a number +if [[ "$1" =~ ^[0-9]+$ ]]; then + echo "Argument is a valid number." +else + echo "Argument is not a valid number." + exit 1 +fi + +# Check if the current directory is a Git repository +if [ ! -d .git ]; then + echo "This is not a Git repository." + exit 1 +fi + +# Check if there are any uncommitted changes +if [ -n "$(git status --porcelain)" ]; then + echo "There are uncommitted changes in the repository." + if [ "$2" == "--stash" ]; then + git stash save "Temporary stash of local code while reviewing $1" + echo "Uncommitted changes stashed. You can retrieve them later." + else + echo "Please commit or stash your changes before proceeding." + exit 1 + fi +fi + +PR_NUMBER=$1 +REPO_URL="https://github.com/bigbluebutton/bigbluebutton.git" + +# Get the PR branch name +PR_BRANCH=$(curl -s https://api.github.com/repos/bigbluebutton/bigbluebutton/pulls/${PR_NUMBER} | jq -r '.head.ref') + +# Get the sender's username +SENDER_USERNAME=$(curl -s https://api.github.com/repos/bigbluebutton/bigbluebutton/pulls/${PR_NUMBER} | jq -r '.head.repo.owner.login') + +# Configure the sender's fork as a remote with a name based on the sender's username +REMOTE_NAME="upstream_${SENDER_USERNAME}" +if git remote | grep -q "^$REMOTE_NAME$"; then + git remote remove $REMOTE_NAME +fi + +git remote add ${REMOTE_NAME} git@github.com:${SENDER_USERNAME}/bigbluebutton.git + +# Fetch the PR branch and create a local branch to track it +LOCAL_BRANCH="PR_${PR_NUMBER}" +git fetch ${REMOTE_NAME} ${PR_BRANCH} +if git branch --list ${LOCAL_BRANCH} | grep ${LOCAL_BRANCH}; then + git checkout develop + git branch -D ${LOCAL_BRANCH} +fi +git checkout -b ${LOCAL_BRANCH} ${REMOTE_NAME}/${PR_BRANCH} + +echo "Created and checked out local branch '${LOCAL_BRANCH}'" +echo "Configured '${SENDER_USERNAME}' fork as '${REMOTE_NAME}'" +echo "Tracking '${PR_BRANCH}' from '${REMOTE_NAME}'" +