| #!/usr/bin/env bash |
| # script to copy update jars from their working area to the staging area |
| |
| # finds file on users path, before current directory |
| # hence, non-production users can set their own values for test machines |
| source galileo_properties.shsource |
| |
| fromDirectory=${stagingDirectory} |
| |
| toDirectory=${HOME}/temp/testdir |
| |
| mkdir -p "${toDirectory}" |
| |
| fromFile=compositeArtifacts.jar |
| workFile=compositeArtifacts.xml |
| |
| |
| echo "" |
| echo " Fixup URL " |
| echo " original: ${fromDirectory}/${fromFile}" |
| echo " working: ${toDirectory}/${workFile}" |
| echo "" |
| |
| echo "copy compositeArtifacts.jar to working area" |
| rsync -vp ${fromDirectory}/${fromFile} ${toDirectory} |
| |
| echo "unzip the jar, and make a backup of it for later comparison" |
| unzip -o ${toDirectory}/${fromFile} -d ${toDirectory} |
| cp ${toDirectory}/${workFile} ${toDirectory}/${workFile}.bak |
| |
| echo "make sure there is only one occurance that will be changed in file" |
| matchingPhrase="<child location='http://download\.eclipse\.org/eclipse/updates/3\.5milestones/I20090611-1540/'/>" |
| matchedLines=`grep "^ *${matchingPhrase} *$" "${tempDir}"/"$workFile"` |
| nMatches=`echo $matchedLines | wc -l` |
| echo |
| echo " matches before replacement: "${nMatches} |
| echo " matchedLine(s) before replacement: " |
| echo " "$matchedLines |
| echo |
| |
| if [[ $nMatches == 1 ]] |
| then |
| |
| fromString="${matchingPhrase}" |
| |
| # compose toString and replacement command |
| toString="<child location='http://download.eclipse.org/eclipse/updates/3.5/'/>" |
| |
| replaceCommand="s!^( *)${fromString} *\$!\$1${toString}!g" |
| echo " replaceCommand: ${replaceCommand}" |
| |
| echo " use perl to do replacement" |
| perl -pi -w -e "${replaceCommand}" "${toDirectory}"/"$workFile" |
| |
| perlResult=$? |
| if [[ $perlResult -ne 0 ]] |
| then |
| echo "Perl return code was non-zero, ${perlResult}, so exiting and not changing anything" |
| exit $perlResult |
| fi |
| |
| echo "make sure no matches to original remaining" |
| nOriginalMatches=`grep "^ *${matchingPhrase} *$" "${toDirectory}"/"$workFile" | wc -l` |
| echo |
| echo " matchedLine(s) after replacement: " $nOriginalMatches " (should be zero)" |
| echo |
| if [[ $nOriginalMatches -ne 0 ]] |
| then |
| echo " Error: number of matches to original phrase (" $nOriginalMatches ") after replacement was greater than expected (should be zero), so exiting and not changing anything" |
| exit 1 |
| fi |
| |
| echo "make sure there is exactly one match for new string" |
| resultingPhrase="${toString}" |
| changedLines=`grep "^ *${resultingPhrase} *$" "${toDirectory}"/"$workFile"` |
| nChangedLines=`echo $changedLines | wc -l` |
| echo |
| echo " Number of lines changed: " $nChangedLines |
| echo " Changeded lines: " |
| echo " "$changedLines |
| echo |
| |
| if [[ $nChangedLines -ne 1 ]] |
| then |
| echo " Error: number of matches to expected ("$nChangedLines") after replacement was not as expected (should be zero), so exiting and not changing anything" |
| exit 1 |
| fi |
| else |
| echo " Error: number of matches to original ("$nMatches") before replacment was not as expected, so exiting and not changing anything" |
| exit 1 |
| fi |
| |
| echo "rezip our modified version" |
| zip -Dj ${toDirectory}/${fromFile} ${toDirectory}/${workFile} |
| #echo "set file times to match original" |
| #touch ${toDirectory}/${fromFile} --reference=${fromDirectory}/${fromFile} |
| echo "create backup of original" |
| cp ${fromDirectory}/${fromFile} ${fromDirectory}/${fromFile}.bak |
| echo "copy new over old" |
| cp ${toDirectory}/${fromFile} ${fromDirectory}/ |
| |
| |
| |