From 86749ac4d74a4d849e89b836b47041863b3d42a0 Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Sat, 19 Apr 2014 04:05:04 +0200 Subject: [PATCH] update-oojs-ui.sh: Replace target dir instead of adding file copies * A command like "cp dist/* $TARGET_DIR" does not remove files that were deleted in the release dist. Using rsync instead. * Use bash -n or -z instead of "" and "x$VAR" == "x" tricks. * The "git commit " doesn't properly take care of staging deletion of files removed by the update script, nor does it reliably (?) stage new files. Instead using a combination of "git add -u " (The -u stages deletion and modifcation of tracked files), and "git add " (stages modification and creation of files in that directory). * Use "grunt test" instead of "grunt " to make more explicit what is going on (no change in behaviour, default=test). And document why we don't use plain grunt-build without tests. Change-Id: Id97a66df64d9e43e3c05388486b9f959108363c1 --- maintenance/resources/update-oojs-ui.sh | 97 ++++++++++++++++++++++++ resources/lib/oojs-ui/update-oojs-ui.sh | 99 ------------------------- 2 files changed, 97 insertions(+), 99 deletions(-) create mode 100755 maintenance/resources/update-oojs-ui.sh delete mode 100755 resources/lib/oojs-ui/update-oojs-ui.sh diff --git a/maintenance/resources/update-oojs-ui.sh b/maintenance/resources/update-oojs-ui.sh new file mode 100755 index 0000000000..cc5988ce87 --- /dev/null +++ b/maintenance/resources/update-oojs-ui.sh @@ -0,0 +1,97 @@ +#!/usr/bin/env bash + +# This script generates a commit that updates our distribution copy of OOjs UI + +if [ -z "$1" ] +then + # Missing required parameter + echo >&2 "Usage: $0 path/to/repo/for/oojs-ui" + exit 1 +fi + +TARGET_REPO=$(cd $(dirname $0)/../..; pwd) +TARGET_DIR=resources/lib/oojs-ui +UI_REPO=$1 + +function oojsuihash() { + grep "OOjs UI v" $TARGET_REPO/$TARGET_DIR/oojs-ui.js \ + | head -n 1 \ + | grep -Eo '\([a-z0-9]+\)' \ + | sed 's/^(//' \ + | sed 's/)$//' +} + +function oojsuitag() { + grep "OOjs UI v" $TARGET_REPO/$TARGET_DIR/oojs-ui.js \ + | head -n 1 \ + | grep -Eo '\bv[0-9a-z.-]+\b' +} + +function oojsuiversion() { + grep "OOjs UI v" $TARGET_REPO/$TARGET_DIR/oojs-ui.js \ + | head -n 1 \ + | grep -Eo '\bv[0-9a-z.-]+\b.*$' +} + +# Prepare working tree +cd $TARGET_REPO && +git reset $TARGET_DIR && git checkout $TARGET_DIR && git fetch origin && +git checkout -B upstream-oojsui origin/master || exit 1 + +cd $UI_REPO || exit 1 + +# Read the old version and check for changes +OLDHASH=$(oojsuihash) +if [ -z "$OLDHASH" ] +then + OLDTAG=$(oojsuitag) +fi +if [ "$OLDHASH" == "" ] +then + OLDHASH=$(git rev-parse $OLDTAG) + if [ $? != 0 ] + then + echo Could not find OOjs UI version + cd - + exit 1 + fi +fi +if [ "$(git rev-parse $OLDHASH)" == "$(git rev-parse HEAD)" ] +then + echo "No changes (already at $OLDHASH)" + cd - + exit 0 +fi + +# Build the distribution (using grunt-test instead of grunt-build, because we +# want to run unit tests first, and because grunt-build is for a release build +# and wouldn't put a git hash in the file headers) +npm install && grunt test || exit 1 + +# Get the list of changes +NEWCHANGES=$(git log $OLDHASH.. --oneline --no-merges --reverse --color=never) +NEWCHANGESDISPLAY=$(git log $OLDHASH.. --oneline --no-merges --reverse --color=always) + +# Copy files +# - Exclude the default non-svg stylesheet +rsync --recursive --delete --force --exclude 'oojs-ui.css' ./dist/ $TARGET_REPO/$TARGET_DIR || exit 1 + +# Read the new version +NEWVERSION=$(oojsuiversion) + +# Generate commit +cd $TARGET_REPO +COMMITMSG=$(cat <&2 <&2 "Usage: update-oojs-ui.sh path/to/repo/for/oojs-ui" - exit 1 -fi - -# Undo any changes in the oojs-ui directory -git reset -- resources/lib/oojs-ui/ -git checkout -- resources/lib/oojs-ui/ - -git fetch origin -# Create a branch of MW if needed, and reset it to master -git checkout -B update-oojsui origin/master - -# Get the old oojs-ui version -OLDVERSION=$(oojsuihash) -if [ "x$OLDVERSION" == "x" ] -then - TAG=$(oojsuitag) -fi - -# cd to the oojs-ui directory -cd $1 || exit 1 -if [ "x$OLDVERSION" == "x" ] -then - # Try the tag - OLDVERSION=$(git rev-parse $TAG) - if [ $? != 0 ] - then - echo Could not find OOjs UI version - cd - - exit 1 - fi -fi -if [ "$(git rev-parse $OLDVERSION)" == "$(git rev-parse HEAD)" ] -then - echo "No changes (already at $OLDVERSION)" - cd - - exit 0 -fi -# Build the distribution -npm install || exit 1 -grunt || exit 1 -# Get the list of changes -NEWCHANGES=$(git log $OLDVERSION.. --oneline --no-merges --reverse --color=never) -NEWCHANGESDISPLAY=$(git log $OLDVERSION.. --oneline --no-merges --reverse --color=always) -# cd back to the VisualEditor directory -cd - - -# Copy files from dist/ to resources/lib/oojs-ui -cp -a $1/dist/{oojs-ui.js,oojs-ui.svg.css,oojs-ui-apex.css,oojs-ui-agora.css,images,i18n} resources/lib/oojs-ui/ -# Figure out what the new version is -NEWVERSION=$(oojsuiversion) -# Generate commit summary -COMMITMSG=$(cat <&2 <