blob: f3fae5dd3c16b66dc959f260898e1e918bd49249 [file] [log] [blame]
#!/usr/bin/env bash
# directly gets a fresh copy of sdk directory from eclipsebuilder
# need to manually check and make sure nothing is running or will
# be running soon.
source localBuildProperties.shsource 2>/dev/null
# Normally, we should be "working in" /shared/eclipse ... the parent of 'sdk' directory.
export WORK_DIR=${WORK_DIR:-${PWD}}
# codifying the branch (or tag) to use, so it can be set/chagned in one place
branch=master
initScriptTag="h=$branch"
# to use a tag instead of branch, would be tag=X, such as
# tag=vI20120417-0700, or in full form
# http://${GIT_HOST}/c/platform/eclipse.platform.releng.eclipsebuilder.git/plain/scripts/wgetFresh.sh?tag=vI20120417-0700
# = = = = = = =
function errorExit ()
{
MSG=$1
RETURN_CODE=$2
# We will count no message as a warning, but, is intended for caller to provide,
# so is technically a programming error.
if [[ -z "{MSG}" ]]
then
printf "\n\tWARNING: /t%s" "Call to errorExit provided no message"
MSG="No message provided."
fi
# May be legitimate not to provide "exit status", in which case we just use '1'.
# TODO: Deluxe version would check for positive integer between 0 and 255
if [[ -z "${RETURN_CODE}" ]]
then
$RETURN_CODE=1
fi
# Here is whole purpose of this method.
printf "\n\tERROR: \t%s" "${MSG} Exit Status: ${RETURN_CODE}"
}
function checkForErrorExit ()
{
# arg 1 must be return code, $?
# arg 2 (remaining line) can be message to print before exiting due to non-zero exit code
exitCode=$1
shift
message="$*"
if [[ -z "${exitCode}" ]]
then
echo -e "\n\tPROGRAM ERROR: checkForErrorExit called with no arguments\n"
exit 1
fi
if [[ -z "${message}" ]]
then
echo -e "\n\tWARNING: checkForErrorExit called without message\n"
message="(Calling program provided no message)"
fi
if [[ "${TEST_MODE}" == "true" ]]
then
echo -e "\t\tTest mode: exitCode: $exitCode \t message: ${message}"
fi
if [[ ${exitCode} -lt 0 ]]
then
# This is just a "fact of the way bash works" ... but, hard to debug if not expecting it.
echo -e "\n\t WARNING: exitCode was less than 0, ${exitCode}, so actual value will be different. $(( ${exitCode} & 255 )) \n"
exitCode=$(( ${exitCode} & 255 ))
fi
if [[ ${exitCode} -gt 255 ]]
then
# This is just a "fact of the way bash works" ... but, hard to debug if not expecting it.
echo -e "\n\t WARNING: exitCode was greater than 255, ${exitCode}, so value on exit will be modulo 256. $(( ${exitCode} % 256 )) \n"
exitCode=$(( ${exitCode} % 256 ))
fi
if [[ ! ${exitCode} =~ ^[0-9]+$ ]]
then
echo -e "\n\t WARNING: exitCode was not all digits.\n\t Arbitrarily set exitCode to 1 (and may have unintended results).\n"
exitCode=1
fi
if [[ ${exitCode} != 0 ]]
then
if [[ "${TEST_MODE}" == "true" ]]
then
echo -e "\n\t ERROR. exit code: ${exitCode} ${message} \tTest mode: otherwise would have exited with ${exitCode}"
else
echo -e "\n\t ERROR. exit code: ${exitCode} ${message}\n"
exit ${exitCode}
fi
else
if [[ "${TEST_MODE}" == "true" ]]
then
echo -e "\t\tTest mode: returned 0 (no exit)"
fi
return 0
fi
}
# = = = = =
if [[ "$1" == "-t" ]]
then
TEST_MODE=true
echo -e "\n\tStarting self test mode, since '-t' specified. Will exit when done with tests.\n"
checkForErrorExit 0 #no message case
checkForErrorExit 0 "Normal zero case."
checkForErrorExit 0 "Normal zero as string case."
checkForErrorExit abcd "String, not numeric case."
checkForErrorExit 255 "Number exactly 255 cases."
checkForErrorExit -1 "Negative number case."
checkForErrorExit -2 "Negative number case."
checkForErrorExit 512 "Number greater than 255 case."
echo -e "\n\tTest mode completed normally.\n"
exit 0
fi
cd "${WORK_DIR}"
checkForErrorExit $? "could not change directory parent of sdk, ${WORK_DIR}."
# as a sanity check, we make sure WORK_DIR is defined to be something, and not equal to "/" or ${HOME}
# since some "removes" either won't work, or risk removing things we do not intend.
if [[ -z "${WORK_DIR}" ]]
then
errorExit "WORK_DIR was not defined."
fi
if [[ "${WORK_DIR}" == "/" || "${WORK_DIR}" == "${HOME}" ]]
then
errorExit "WORK_DIR inappropriately defined as ${WORK_DIR}"
fi
# remove if exists from previous (failed) run
if [[ -e "${WORK_DIR}/tempeb" ]]
then
rm -fr "${WORK_DIR}/tempeb"
checkForErrorExit $? "Could not remove directory tempeb"
else
mkdir -p "${WORK_DIR}/tempeb"
checkForErrorExit $? "could not mkdir tempeb"
fi
# ditto
if [[ -e "${WORK_DIR}/master.zip" ]]
then
rm "${WORK_DIR}/master.zip"
checkForErrorExit $? "Could not remove master.zip"
fi
if [[ -z "${GIT_HOST}" ]]
then
GIT_HOST=git.eclipse.org
fi
wget --no-verbose --no-cache -O "${WORK_DIR}/master.zip" http://${GIT_HOST}/c/platform/eclipse.platform.releng.aggregator.git/snapshot/master.zip 2>&1;
checkForErrorExit $? "could not get aggregator?!"
unzip -q "${WORK_DIR}/master.zip" -d "${WORK_DIR}/tempeb"
checkForErrorExit $? "could not unzip master?!"
# save a copy to diff with (and to revert to if needed)
# after first moving any previous copies.
# will need to manually cleanup dated backups occasionally
if [[ -d "${WORK_DIR}/sdkTempSave" ]]
then
NOWDATE=$( date -u +%Y%m%d%H%M )
NEWNAME=sdkTempSave${NOWDATE}
mv "${WORK_DIR}/sdkTempSave" "${WORK_DIR}/${NEWNAME}"
checkForErrorExit $? "could not mv sdkTempSave to ${NEWNAME}"
fi
# It won't exist, if first time running script, for example.
if [[ -e sdk ]]
then
mv "${WORK_DIR}/sdk" "${WORK_DIR}/sdkTempSave"
checkForErrorExit $? "could not mv sdk to sdkTempSave"
fi
rsync -r "${WORK_DIR}/tempeb/master/production/sdk/" "${WORK_DIR}/sdk"
checkForErrorExit $? "could not rsync -r ${WORK_DIR}/tempeb/master/production/sdk/ to ${WORK_DIR}/sdk"
# there won't be an sdkTempSave, if first time script is ran, for example.
if [[ -e "${WORK_DIR}/sdkTempSave" ]]
then
if [[ -e "${WORK_DIR}/sdkdiffout.txt" ]]
then
# not positive why, but I've seen us get here, but NOWDATE not defined yet.
# But could happen from various scenerios of deleting files or directories involved.
if [[ -z "${NOWDATE}" ]]
then
NOWDATE=$( date -u +%Y%m%d%H%M )
fi
mv "${WORK_DIR}/sdkdiffout.txt" "${WORK_DIR}/sdkdiffout${NOWDATE}.txt"
checkForErrorExit $? "could not mv sdkdiffout.txt to sdkdiffout${NOWDATE}.txt"
fi
diff -w -r "${WORK_DIR}/sdk" "${WORK_DIR}/sdkTempSave" > "${WORK_DIR}/sdkdiffout.txt"
# It's normal for diff to return '1', if differences are found. returns '0' if no differences found.
# No need to 'exit' for either '0' or '1'.
# Even '2' may or may not be ok, See "info diff".
# So, we'll not check return codes for 'diff'.
# checkForErrorExit $? "could not run diff"
fi
find "${WORK_DIR}/sdk" -name "*.sh" -exec chmod -c +x '{}' \;
checkForErrorExit $? "could not run find"
# cleanup
rm "${WORK_DIR}/master.zip"
checkForErrorExit $? "could not cleanup (rm) master.zip"
rm -fr "${WORK_DIR}/tempeb"
checkForErrorExit $? "could not cleanup (rm) tempeb"
# sdkdiff will not always exist, such as, if first time running.
if [[ -e "${WORK_DIR}/sdkdiffout.txt" ]]
then
echo -e "\n\tNormal exit. Check sdkdiffout.txt to confirm expected differences were obtained.\n"
else
echo -e "\n\tNormal exit."
fi