If you're like me, i.e. you didn't touch your website for a long time and you plan to upgrade, you didn't take notes of what modules you installed or even you don't understand the notes you've taken (it happens), then perhaps this little
quick and dirty script will help you.
It's meant to review differences between ZC distributions, old, new, and your website and to parse files in new folders.
Fell free to test, comment and modify
Here is the bash script
As it's a bash script you' have to be on Unix to run it.Code:#!/bin/bash # # This script is intend to be used during a Zen-Cart upgrade # It's quick and dirty so modifiy it at your convenience # # arguments are previous version, next version, current site # Even if ZC team recommends to upgrade by building a brand new test site, # if you're like me and don't remember the modules you installed or modifications you made # comparing and sorting files could help you to find your way. # #Check the three parameters which must be directories : previous version dir, next version dir, running version dir CheckParam () { if [ $# -eq 0 ]; then echo "No arguments supplied, I'm waiting for ./PreviousVersionDir ./NextVersionDir ./WebSiteDir" echo -e "\n" echo "Using these arguments I'll give you detailed reports on modified or added files between the versions" echo "You'll get 7 file lists:" echo "-SiteAdded.txt : added to your website (somehow module files)" echo "-SiteMods.txt : customized files of your website" echo "-SiteRemvd.txt : missing from your website" echo "-DistNew.txt : new files in new ZC" echo "-DistMods.txt : files modified in new ZC" echo "-DistRemvd.txt : files that are no longer in the new ZC" echo "-FilesToReview.txt : where (DistNew+DistMods) overlaps with (SiteMods+SiteAdded)" echo -e "\n" echo "I can even sort the files in directories for you" exit 0 fi if [ $# != 3 ]; then echo "not enough arguments" echo "I'm waiting for ./PreviousVersionDir ./NextVersionDir ./WebSiteDir" exit 0 fi if [ ! -d "$1" ]; then echo "$1 wrong parameter, must be previous version directory" exit 0 fi if [ ! -d "$2" ]; then echo "$2 wrong parameter, must be new version directory" exit 0 fi if [ ! -d "$3" ]; then echo "$3 wrong parameter, must be current site directory" exit 0 fi ####Attention, version check relies on paypal, could not always be right in the future. PrevVer=$(find $1 -name 'paypal.php' -exec cat {} \; | grep 'codeVersion ='| cut -c27-31) NxtVer=$(find $2 -name 'paypal.php' -exec cat {} \; | grep 'codeVersion ='| cut -c27-31) WebVer=$(find $3 -name 'paypal.php' -exec cat {} \; | grep 'codeVersion ='| cut -c27-31) PFstCar=$(echo $PrevVer |cut -d '.' -f 1) PMidCar=$(echo $PrevVer |cut -d '.' -f 2) PLstCar=$(echo $PrevVer |cut -d '.' -f 3) NFstCar=$(echo $NxtVer |cut -d '.' -f 1) NMidCar=$(echo $NxtVer |cut -d '.' -f 2) NLstCar=$(echo $NxtVer |cut -d '.' -f 3) PrvGTNxt=false if [ $PLstCar -lt $NLstCar ]; then PrvGTNxt=true elif [ $PMidCar -lt $NMidCar ]; then PrvGTNxt=true elif [ $PFstCar -lt $NFstCar ]; then PrvGTNxt=true fi if [ $PrvGTNxt == false ]; then echo "Version $NxtVer has to be greater than $PrevVer" exit 0 fi if [ $PrevVer != $WebVer ]; then echo "Website version $WebVer can t be compared to $PrevVer distribution. Sorry" exit 0 fi } RemoveOld () { if [ -f $1 ]; then rm $1 fi } # ctrl_c() { # echo "** CTRL-C pressed, tidying created files and folders" # # } main () { CheckParam $1 $2 $3 RemoveOld ./DistRemvd.txt RemoveOld ./DistNew.txt RemoveOld ./DistMods.txt RemoveOld ./AddedOrUpdated.txt RemoveOld ./SiteAdded.txt RemoveOld ./AddOrModOnSite.txt RemoveOld ./SiteRemvd.txt RemoveOld ./SiteMods.txt echo "Type the exact name of your admin directory, followed by [ENTER]:" read AdminDir #Rename admin dirs in brand new distributions to match your admin #Verify if entered name is right if [ ! -d "$3/$AdminDir" ]; then echo "I don't see this directory in your website, exiting" exit 0 fi if [ -d "$1/admin" ] || [ ! -d "$1/$AdminDir" ]; then mv $1/admin $1/"$AdminDir" elif [ -d "$1/admin" ]; then echo "There is no directory named admin in $1, check please" exit 0 fi if [ -d "$2/admin" ] || [ ! -d "$2/$AdminDir" ]; then mv $2/admin $2/"$AdminDir" elif [ -d "$1/admin" ]; then echo "There is no directory named admin in $2, check please" exit 0 fi #Compare previous distribution with website echo "Comparing your website to distribution..." if [ -f ./.CurrentMods.txt ]; then read -rsp "Result file already exists, Do you want to keep it (y/n) ?" -n1 KeepIt echo -e "\n" if [ $KeepIt == "n" ] || [ $KeepIt == "N" ]; then RemoveOld ./.CurrentMods.txt diff --brief -r $1 $3 -x .DS_Store -x '*.jpg' -x '*.jpeg' -x '*.gif' -x '*.png' -x '*.log' -x 'sess_*' -x '$AdminDir/backups/*' > .CurrentMods.txt fi else diff --brief -r $1 $3 -x .DS_Store -x '*.jpg' -x '*.jpeg' -x '*.gif' -x '*.png' -x '*.log' -x 'sess_*' -x '$AdminDir/backups/*' > .CurrentMods.txt fi #Compare previous distribution with next version distribution echo "Comparing distributions..." if [ -f ./.NewZCFiles.txt ]; then read -rsp "Result file already exists, Do you want to keep it (y/n) ?" -n1 KeepIt echo -e "\n" if [ $KeepIt == "n" ] || [ $KeepIt == "N" ]; then RemoveOld ./.NewZCFiles.txt diff --brief -r $1 $2 -x .DS_Store -x "$3/images/*" -x "$3/cache/*" -x '*.log' -x 'sess_*' > .NewZCFiles.txt fi else diff --brief -r $1 $2 -x .DS_Store -x "$3/images/*" -x "$3/cache/*" -x '*.log' -x 'sess_*' > .NewZCFiles.txt fi read -rsp "Do you want to classify files in new directories (y/n) ?" -n1 MoveFile echo -e "\n" if [ $MoveFile == "y" ] || [ $MoveFile == "Y" ]; then MoveFile=true else MoveFile=false fi #make patch from previous $1 to new version $2 by sorting files cat .NewZCFiles.txt | while read i; do #Parse lines case "$i" in "Only in $1"*) # move to FilesToRemove last=`echo $i | sed 's/: /\//' | cut -d ' ' -f 3` #get only path file=${last#$1} #remove folder name from path if [ -f $last ]; then file=${file#./} #remove dot from path echo $last >> DistRemvd.txt filename=$(basename "$last") path=$(dirname "$file") if [ $MoveFile == true ]; then if [ ! -d "./DistRemvd/$path" ]; then mkdir -p "./DistRemvd"$path fi cp $last "./DistRemvd/$file" fi fi ;; "Only in $2"*) # move to DistNewFiles last=`echo $i | sed 's/: /\//' | cut -d ' ' -f 3` file=${last#$2} if [ -f $last ]; then echo $last >> DistNew.txt file=${file#./} echo $file >> AddedOrUpdated.txt filename=$(basename "$last") path=$(dirname "$file") if [ $MoveFile == true ]; then if [ ! -d "./DistNewFiles/$path" ]; then mkdir -p "./DistNewFiles"$path fi cp $last "./DistNewFiles/$file" fi fi ;; "Files $1"*) # move to ModifiedFiles last=`echo $i | cut -d' ' -f 4` #get second path in the line which is the new version one file=${last#$2} if [ -f $last ]; then echo $last >> DistMods.txt file=${file#./} echo $file >> AddedOrUpdated.txt filename=$(basename "$last") path=$(dirname "$file") if [ $MoveFile == true ]; then if [ ! -d "./DistMods/$path" ]; then mkdir -p "./DistMods"$path fi cp $last "./DistMods/$file" fi fi ;; esac done echo "####################_" echo "In the new version :" Nbr=`cat DistMods.txt |wc -l` echo $Nbr " files have been modified in $2" Nbr=`cat DistNew.txt |wc -l` echo $Nbr " files have been added to $2" Nbr=`cat DistRemvd.txt |wc -l` echo $Nbr " files have been removed from $2" echo "####################_" #end of distributions comparison #make list of modified or added files in running version cat .CurrentMods.txt | while read i; do if [[ $i == "Only in $3"* ]]; then # move to SiteAdded last=`echo $i | sed 's/: /\//' | cut -d ' ' -f 3` if [ -f $last ]; then file=${last#$3} echo $last >> SiteAdded.txt file=${file#./} echo $file >> AddOrModOnSite.txt #filename=$(basename "$last") path=$(dirname "$file") if [ $MoveFile == true ]; then if [ ! -d "./SiteAdded/$path" ]; then mkdir -p "./SiteAdded"$path fi cp $last "./SiteAdded$file" fi elif [ -d $last ]; then echo $last >> SiteAdded.txt fi fi if [[ $i == "Only in $1"* ]]; then # move to SiteRemvd last=`echo $i | sed 's/: /\//' | cut -d ' ' -f 3` if [ -f $last ]; then file=${last#$1} echo $last >> SiteRemvd.txt file=${file#./} #filename=$(basename "$last") path=$(dirname "$file") if [ $MoveFile == true ]; then if [ ! -d "./SiteRemvd/$path" ]; then mkdir -p "./SiteRemvd"$path fi cp $last "./SiteRemvd$file" fi elif [ -d $last ]; then echo $last >> SiteRemvd.txt fi fi if [[ $i == "Files $1"* ]]; then # move to SiteMods last=`echo $i | cut -d' ' -f 4` if [ -f $last ]; then file=${last#$3} echo $last >> SiteMods.txt file=${file#./} echo $file >> AddOrModOnSite.txt filename=$(basename "$last") path=$(dirname "$file") if [ $MoveFile == true ]; then if [ ! -d "./SiteMods/$path" ]; then mkdir -p "./SiteMods"$path fi cp $last "./SiteMods$file" fi elif [ -d $last ]; then echo $last >> SiteMods.txt fi fi done RemoveOld ./.CurrentMods.txt RemoveOld ./.NewZCFiles.txt echo "In currently running version" Nbr=`cat SiteAdded.txt |wc -l` echo $Nbr " file(s) have been added in $3" Nbr=`cat SiteMods.txt |wc -l` echo $Nbr " file(s) have been modified in $3" Nbr=`cat SiteRemvd.txt |wc -l` echo $Nbr " file(s) are not in $3" echo "####################_" echo -e "\n" echo "Following files are both been added or updated in your website and new version :" #AWK will review each line of one file to lines of the other and tell if there's a match echo "----" awk ' BEGIN { FS="" } (NR==FNR) { ll1[FNR]=$0; nl1=FNR; } (NR!=FNR) { ss2[$0]++; } END { for (ll=1; ll<=nl1; ll++) if ((ll1[ll] in ss2)) print ll1[ll] }' AddOrModOnSite.txt AddedOrUpdated.txt > FilesToReview.txt cat FilesToReview.txt echo "----" RemoveOld ./AddOrModOnSite.txt RemoveOld ./AddedOrUpdated.txt #set -x #trap read debug # move files to review from patch dir (DistMods or DistNew)to new dir # this can only be done if you said yes to classify files if [ $MoveFile == true ]; then if [ ! -d ./DistToRev ]; then mkdir ./DistToRev fi if [ ! -d ./WebToRev ]; then mkdir ./WebToRev fi cat FilesToReview.txt | while read i; do if [ -f "./DistMods$i" ]; then File="./DistMods$i" elif [ -f "./DistNewFiles$i" ]; then File="./DistNewFiles$i" else echo "file is not there, exiting" exit 0 fi FileDir=$(dirname $i) if [ ! -d ./DistToRev$FileDir ]; then mkdir -p "./DistToRev"$FileDir mkdir -p "./WebToRev"$FileDir fi mv $File ./DistToRev$FileDir cp $3$i ./WebToRev$FileDir done fi echo -e "\n####################_" Nbr=$(cat FilesToReview.txt |wc -l) echo $Nbr " files have been moved from new distribution patch (DistMods or DistNewFiles )to DistToRev directory" echo "For convenience the same files from your website have been copied to WebToRev directory" echo -e "\n" # trap ctrl_c INT # trap 'echo $0 is ending..." ; exit 3 ' 15 # trap 'echo "$0 other signal" ; exit $? ' SIGINT # trap 'echo "$0 other signal" ; exit $? ' SIGHUP # trap 'echo "$0 other signal" ; exit $? ' SIGTERM } main $1 $2 $3 exit 0
then copy/paste the scriptCode:$sudo nano ZCUpgrParser.sh
CTRL-x to exit, and answer yes when it asks to save.
then change permission
To run the script asks for three directories.Code:sudo chmod 755 ZCUpgrParser.sh
For example, in my case it'sCode:$./ZCUpgrParser.sh ./OldDistribution ./NewDistribution ./Website
Code:$./ZCUpgrParser.sh ./ZC-150-Full ./ZC-154-Full ./public_html
Hope this helps
Hubert


Reply With Quote
