Rev 1765 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#!/bin/bash# @author Raphaël Droz <raphael@tela-botanica.org># @license GPL v3 <http://www.gnu.org/licenses/gpl.txt># @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt># @copyright © 2013, Tela Botanica# Met à jour les appels à la database via l'instance $this de Cel# pour y substituer le singleton Cel::db()# À lancer dans le répertoire racine.# fichiers à traiter (dans jrest/)fichiers=$(grep -rl 'extends Cel' jrest)# liste des fonctions à substituer, obtenue à partir de:# grep -A1 'delete wrappers' jrest/lib/Cel.php |grep 'function.*()'|awk -F '[ (]' '{print $3}'wrappers=( requeter executer protegerRequete proteger executerRequeteSimple executerRequete getTxt )chaine=$(export IFS='|'; echo "${wrappers[*]}");# Les fichiers qui définissent ou redéfinissent l'une de ces fonctions doivent être modifiés à la main# car il est légitime pour eux d'utiliser $thisa_exclure=$(grep -rEl "function ($chaine)\(" jrest)# (ils représentent 10 occurences du pattern)# en réalité les fichiers dans scripts/ n'ont pas besoin d'être modifiés# la liste refiltrée des fichiersfichiers=$(echo "$fichiers"|fgrep -v -f <(echo "$a_exclure"))echo -e "a modifier manuellement:\n$a_exclure" >&2# 3 backslashes:# 1 pour ne pas interpréter $this par bash entre les ""# 1 autre en tant que simple bashslash (donc doublé) pour éviter que sed ne considère '$' comme fin de ligne# Première regexp:# 0 substitutions, car seuls les fichiers dans scripts/ l'utilisent# or ils n'étendent pas la classe Cel# sed -E "s;\\\$this->bdd->($chaine)\(;Cel::db()->\1(;g" $fichiers# Seconde regexp# 489 substitutions:# sed -nE "s;\\\$this->($chaine)\(;Cel::db()->\1(;gp" $fichierssed -i -E "s;\\\$this->($chaine)\(;Cel::db()->\1(;g" $fichiers# Troisième passe: substitution de $this->bdd->quote()# 25 substitutionsfichiers_quote=$(grep -rl '$this->bdd->quote(' jrest/services)sed -i -E 's;\$this->bdd->quote\(;Cel::db()->quote(;g' $fichiers_quote