Ellen DeGeneres supports Rosie O'Donnell after Trump threatens to revoke her citizenship
Next's 'flattering' linen trousers shoppers love so much they 'bought four pairs'
Donald Trump's Club World Cup interview with glamorous DAZN reporter divides soccer fans
Latest on Southend Airport as it remains closed after 'fireball' plane crash
The common behavioural trait displayed by a narcissist - are YOU guilty of it?
UK to strike migrant return deal with Iraq in latest bid to stop small boats and send more asylum seekers back
Woman builds cosy garden 'sanctuary' using a £300 IKEA purchase and sprucing up old furniture
The antisocial hotspots in every London borough: Interactive map reveals the capital's no-go areas which are blighted by crime with violent thieves and drug dealers 'on every corner'
Fury over John Lewis plans to build hundreds of new flats in their town: Locals say they are 'already overwhelmed with plush new tower blocks and gridlocked streets'
Southend Airport plane crash: Witnesses tell of moment jet 'violently' smashed to the ground and erupted into a ball of flames - after 'pilots waved to children'
CodeSOD: Back Up for a Moment
James's team has a pretty complicated deployment process implemented as a series of bash scripts. The deployment is complicated, the scripts doing the deployment are complicated, and failures mid-deployment are common. That means they need to gracefully roll back, and they way they do that is by making backup copies of the modified files.
This is how they do that.
DATE=`date '+%Y%m%d'` BACKUPDIR=`dirname ${DESTINATION}`/backup if [ ! -d $BACKUPDIR ] then echo "Creating backup directory ..." mkdir -p $BACKUPDIR fi FILENAME=`basename ${DESTINATION}` BACKUPFILETYPE=${BACKUPDIR}/${FILENAME}.${DATE} BACKUPFILE=${BACKUPFILETYPE}-1 if [ -f ${BACKUPFILE} ] || [ -f ${BACKUPFILE}.gz ] ; then BACKUPFILE=${BACKUPFILETYPE}-2 ; fi if [ -f ${BACKUPFILE} ] || [ -f ${BACKUPFILE}.gz ] ; then BACKUPFILE=${BACKUPFILETYPE}-3 ; fi if [ -f ${BACKUPFILE} ] || [ -f ${BACKUPFILE}.gz ] ; then BACKUPFILE=${BACKUPFILETYPE}-4 ; fi if [ -f ${BACKUPFILE} ] || [ -f ${BACKUPFILE}.gz ] ; then BACKUPFILE=${BACKUPFILETYPE}-5 ; fi if [ -f ${BACKUPFILE} ] || [ -f ${BACKUPFILE}.gz ] ; then BACKUPFILE=${BACKUPFILETYPE}-6 ; fi if [ -f ${BACKUPFILE} ] || [ -f ${BACKUPFILE}.gz ] ; then BACKUPFILE=${BACKUPFILETYPE}-7 ; fi if [ -f ${BACKUPFILE} ] || [ -f ${BACKUPFILE}.gz ] ; then BACKUPFILE=${BACKUPFILETYPE}-8 ; fi if [ -f ${BACKUPFILE} ] || [ -f ${BACKUPFILE}.gz ] ; then BACKUPFILE=${BACKUPFILETYPE}-9 ; fi if [ -f ${BACKUPFILE} ] || [ -f ${BACKUPFILE}.gz ] ; then cat <<EOF You have already had 9 rates releases in one day. ${BACKUPFILE} already exists, do it manually !!! EOF exit 2 fiLook, I know that loops in bash can be annoying, but they're not that annoying.
This code creates a backup directory (if it doesn't already exist), and then creates a file name for the file we're about to backup, in the form OriginalName.Ymd-n.gz. It tests to see if this file exists, and if it does, it increments n by one. It does this until either it finds a file name that doesn't exist, or it hits 9, at which point it gives you a delightfully passive aggressive message:
You have already had 9 rates releases in one day. ${BACKUPFILE} already exists, do it manually !!!
Yeah, do it manually. Now, admittedly, I don't think a lot of folks want to do more than 9 releases in a given day, but there's no reason why they couldn't just keep trying until they find a good filename. Or even better, require each release to have an identifier (like the commit or build number or whatever) and then use that for the filenames.
Of course, just fixing this copy doesn't address the real WTF, because we laid out the real WTF in the first paragraph: deployment is a series of complicated bash scripts doing complicated steps that can fail all the time. I've worked in places like that, and it's always a nightmare. There are better tools! Our very own Alex has his product, of course, but there are a million ways to get your builds repeatable and reliable that don't involve BuildMaster but also don't involve fragile scripts. Please, please use one of those.
[Advertisement] Plan Your .NET 9 Migration with ConfidenceYour journey to .NET 9 is more than just one decision.Avoid migration migraines with the advice in this free guide. Download Free Guide Now!
Skating legends Torvill and Dean sign off with a final performance of the iconic Bolero that won them gold at the 1984 Olympics
My father was defrauded out of £64k by The Salt Path author Raynor Winn, it destroyed him and he never fully recovered from the heartbreaking loss
Middle classes will bear the brunt of new Rachel Reeves tax raid, Labour minister hints
Homeowner ordered to take down dormer extension that looks like a 'football stadium executive box' after neighbours branded it 'a monstrosity'
Inside Jennifer Aniston 'very different' new romance with hypnotist Jim Curtis after their PDA-packed yacht date
Grizzly discovery as teddy bear 'wrapped in human skin' found dumped in front of convenience store
Iran seeks at least three cloud providers to power its government
The Information Technology Organization of Iran (ITOI), the government body that develops and implements IT services for the country, is looking for suppliers of cloud computing.…