Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Apply patches or change sets from core.trac.wordpress.org tickets.
#!/usr/bin/env bash
# ====================================================================================
# Script to install patches or changesets to https://core.trac.wordpress.org
# I use with Local Lightning by Flywheel by installing in `/app` directory.
#
# Patches and changesets are saved in `/tmp/` as a default.
# You will use the patch URL in the script.
# ====================================================================================
# ====================================================================================
# Instructions
#
# 1 - Right click your site in the Local Lightning App and click Open Site Shell.
#
# 2 - Download this file (apply-trac-patch.sh) inside your site's /app folder
# curl -o apply-trac-patch.sh https://gist.githubusercontent.com/afragen/977d765414189d5f5fae42215fe92a27/raw/apply-trac-patch.sh
#
# 3 - Run the script from the /app/public folder
# bash ../apply-trac-patch.sh
#
# If your installation is based upon develop.git.wordpress.org
# at this time it is recommended to use the 'npm run grunt patch:####'
# https://make.wordpress.org/core/handbook/testing/patch/#using-grunt
#
# ticket - is the filename of a patch attached to a Trac ticket.
#
# changeset - is a committed changeset number
# ====================================================================================
echo "Assumes a WordPress installation based on core.git.wordpress.org"
echo "If WordPress installation based on develop.git.wordpress.org"
echo " use 'npm run grunt patch:#####'"
echo
PATCH_TYPE="ticket"
printf "Does the patch come from a Trac ticket or a Changeset (TICKET|changeset)? "
read -e input
input=$(echo "$input" | tr '[:upper:]' '[:lower:]')
#input="${input%/}" # Strip trailing slash
PATCH_TYPE="${input:-$PATCH_TYPE}"
DEFAULT_SAVED_DIR="/tmp"
mkdir -p "$DEFAULT_SAVED_DIR/"
echo "Where do we save the patch?"
printf "($DEFAULT_SAVED_DIR): "
read -e input
input="${input%/}" # Strip trailing slash
DEFAULT_SAVED_DIR="${input:-$DEFAULT_SAVED_DIR}" # Populate with default if empty
if [[ $PATCH_TYPE == 'ticket' ]]; then
PATCH_DEPTH="1"
printf "Trac patch URL: "
read -e PATCH_URL
PATCH_URL=$(echo "$PATCH_URL" | tr -d '[[:space:]]')
TRAC_TICKET=$(echo "$PATCH_URL" | awk -F "/" '{print $6}')
PATCH=$(echo "$PATCH_URL" | awk -F "/" '{print $7}')
DEFAULT_PATCH_PATH="$DEFAULT_SAVED_DIR/patch_$PATCH"
echo "Download and modify patch from Trac ticket: $TRAC_TICKET"
URL="https://core.trac.wordpress.org/raw-attachment/ticket/$TRAC_TICKET/$PATCH"
fi
if [[ $PATCH_TYPE == 'changeset' ]]; then
PATCH_DEPTH="3"
printf "Changeset number from trunk: "
read -e CHANGESET
DEFAULT_PATCH_PATH="$DEFAULT_SAVED_DIR/changeset_$CHANGESET.diff"
echo "Download and modify patch from changeset: $CHANGESET"
URL="https://core.trac.wordpress.org/changeset/$CHANGESET?format=diff&new=$CHANGESET"
fi
echo
echo "Downloading: $URL"
echo
curl "$URL" | sed 's/Index: \(.*\)*$/git --diff \1/' | sed -e 's#/src##g' >"$DEFAULT_PATCH_PATH"
echo
echo "Patch filepath: $DEFAULT_PATCH_PATH"
echo
printf "Apply patch? (Y|n)? "
read -e input
PROCEED="${input:-y}"
# Allow user cancellation.
if [ $(echo "$PROCEED" | tr '[:upper:]' '[:lower:]') != "y" ]; then
echo "Aborting..."
exit 1
fi
#echo "Patch depth: -p$PATCH_DEPTH"
patch --verbose "-p$PATCH_DEPTH" <"$DEFAULT_PATCH_PATH"
echo
@afragen

This comment has been minimized.

Copy link
Owner Author

afragen commented Aug 17, 2019

I don’t know if this will work correctly on Windows as I’m using/creating the /tmp/ directory as the $DEFAULT_SAVED_DIR. Any help to ensure this works on Windows would be appreciated.

@afragen

This comment has been minimized.

Copy link
Owner Author

afragen commented Dec 13, 2019

Modify patch to apply regardless of whether it originates from a core.git.wp.org or develop.git.wp.org installation. This removes several steps in the process.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.