Accéder au contenu.
Menu Sympa

technique - Re: Détection de doublons & nettoyage de code DreamWeaver

Objet : Liste pour les discussions techniques (liste à inscription publique)

Archives de la liste

Re: Détection de doublons & nettoyage de code DreamWeaver


Chronologique Discussions 
  • From: Lucile Fievet <lucile.fievet AT eufar.net>
  • To: technique <technique AT april.org>
  • Subject: Re: Détection de doublons & nettoyage de code DreamWeaver
  • Date: Tue, 18 Mar 2008 18:15:37 +0100
  • Organization: Eufar

Dernière version plus propre des moulinettes bash de nettoyage de codes PHP très très sales.

./doublon.sh REP_DOUBLON REP_SOURCE
./used.sh REP_APACHE REP_SOURCE REP_ORPHANED

Si vous passez les moulinettes doublon.sh et puis used.sh; dans votre répertoire source (REP_SOURCE/):
- Tous les doublons trouvés pointent sur un même fichier dans REP_DOUBLON/.
- Tous les orphelins (non utilisé ou en direct...) pointent vers REP_ORPHANED/.

(Un doulons_orphelin pointent vers REP_ORPHANED/doublon_orphelin qui point vers REP_DOUBLON/doublon_orphelin)

Un commit cvs ne doit pas faire apparaître autre chose que des changement dans les espaces et retours chariots.

* Quand on édite un fichier doublon "linké" du REP_SOURCE on édite tous ses doublons à la fois.
* On peut voir dans le fichier DEV_INFO.txt (laissé dans chaque répertoire) où/comment/par qui sont appelé les fichiers de ce répertoire.
* Le référentiel CVS garde toutes les copies dédoublées, et les met donc toutes à jour.
* L'update dans un autre repository (production) laisse les fichiers dupliqués(mais identiques entre-eux).

Cela doit permettre de repérer des scripts d'administration ou des crons
à mettre en zone protégée.
De repérer les bouts de codes obsolètes.
D'organiser les scripts utilisés et dupliqués à droite à gauche en "librairie"(oui le terme est un peut fort)
De nettoyer la même page de code une seule et même fois (grrr).

Sans faire trop de régressions :o)

TO DO :

Dans la recherche des doublons : on pourrait faire la recherche des doublons avec les versions antérieurs.. si elles ont un ancêtre commun elles sont définies comme identique et on prend la plus récente pour la fusion.

On pourrait peut-être améliorer en faisant une moulinette "spliteuse" de fichier :
* entêtes/pied html
* extraction des fonctions javascripts utilisées,
* extraction des partie css utilisée,
* extraction des (rares) fonctions php utilisées,
* extraction de morceaux choisis (code honteusement dupliqué)

repasser la moulinette de fusion des répliquant.

Faire une moulinette grepeuse/addipeuse :
* remplacer les liens relatifs par des liens "absolus" (à partir d'un répertoire X configurable pour les migrations)
* ajouter des fonctions nécessaires à la récupération et au traitement des variables POST GET ou de SESSION
* ajouter une gestion des droits digne de ce nom :o)
* modifier les requêtes à mysql pour une fonction + générique

Retirer 9/10 du code et migrer vers DRUPAL :o)

a+
lucile

PS : moulinettes en attachement

Lucile Fievet wrote:
La version linkeuse !

Bon si vous aimez vivre dangeureusement ;o) ou que la récupération d'un site développé par des pervers sous Cauchemard-Weaver vous donnes des tendances de Psychopath et que vous en avez marre de voir double :o)

Vous pouvez tester la V2 du script doublon.sh
-> il liste tous les fichiers identiques (même nom et même contenu)
-> si il y'a un répertoire de dépôt en argument il déplace le(s) doublons dedans.
-> et il fait un lien symbolique à la place des doublons.

(il évite les répertoires CVS)

Du coup le site fonctionne toujours mais avec un exemplaire unique de chaque fichier.
Au commit CVS n'y vois que du feu, par exemple si vous avez passé vôtre plate-forme de développement au script et puis "commité" cela ne changera rien pour l'update en testing ou en prod.

c'est un script verbeux qui dit tout ce qu'il fait. Personnellement je ne le testerais pas en tant que root :o) et je ne m'amuserais pas à nommer mes fichiers n'importe comment...et sans avoir un bon CVS

Exemple :
si mon site est publié dans /home/www/sitedbl
que je veux mettre les sources dans /home/www/link
et que j'ai copié mon script dans /home/room

chmod 755 doublon.sh
./doublon.sh /home/www/link /home/www/sitedbl /home/room >> toto

Le script est pas interactif, il faut faire Ctrl C pour sortir, il n'évite pas les répertoires SUBVERSION ou autres gestionnaires de version ... il suffit pour cela de changer la ligne 84

la version linkeuse est en attachement

lucile
a+

Lucile Fievet wrote:
J'avais zappé la réponse pour fdups, je l'ai testé hier, il est vraiment très bien.

Il y'en a aussi des graphiques comme fslint et un autre dans la suite KDE qui sont pas mal.

il y'a one.sh qui est sympath aussi :

http://www.kde-apps.org/content/show.php/one.sh+search+&+delete+duplicate+files?content=51992

Mais ils sont tous orientés administration système; perso je cherche un outil me permettant de nettoyer du code php généré par dreamweawer:

*nombreux fichiers carrément dupliqués ou trèèèès légèrement modifiés (espace, ligne, commentaires, un nom)

*nombreux entêtes javascripts identiques.

*promène de liens relatifs.

*copier coller de pavé de code moisis dans toutes les pages.

*pas de vérification des variables passées.

*très peut de fonctions (0 objet).

*imbrication abusive du PHP/HTML/style.

La sécurité ne me semble pas problématique car je suis dans un contexte où le nommage/présence/contenu des fichiers est déjà contrôlé et sous CVS.(En tout cas mes deux trois moulinettes bash ne me posent pas de problèmes particuliers "chez moi ca marche" je n'appelle pas mes fichiers `rm -rf :o) je ne bosse pas en root).

C'est pour cela que j'aimerais pouvoir adapter les scripts de nettoyage pour prendre en comptes les fichiers qui se ressemblent du point de vue code (ignorer les différences de retours chariots ou espaces...).

Et les fusionner en un seul fichier :
0- solution crade mais rapide: Les remplacer par un lien symbolique ou direct,

1- solution plus propre:
-Trouver où ses fichiers sont appelés (apache, cron, include php, liens html, actions javascript, css, base de donnée)

-Remplacer leur chemin d'accès dans le "code" (php/html/javascript/css/crontab/httpd.conf)

-Faire un résumer, pour pouvoir tester les pages impactées et éviter les régressions.

-Mettre CVS à jour pour pas qu'il remette les fichiers en place à l'update..

3- solution entre les deux: les remplacer par un fichier du même nom qui ferait un "require_once",location,include ou @import (php, html, js, css) du fichier élu; et au passage y coller une fonction qui comptabilise et note où et comment il est appelé... (ne fonctionne pas pour les images mais cause moins d'ennuis avec CVS...)


Je pourrais remplacer l'appel au checksum par un diff avec les options qui conviennent dans un des nombreux scripts de détection de doublons. Puis y greffer la moulinnette dependance.sh (grep+sed) pour lister les fichiers à passer à une autre moulinnette (sed)... pour mettre à jour les chemins(include,require,href=,action=...)

Mais déjà si j'avais un "fdups" qui ne suprime pas les fichier mais me fasse un lien symbolique ou directe à la place ça serait pas mal...

lucile

Attachment: doublon.sh
Description: application/shellscript

Attachment: used.sh
Description: application/shellscript




Archives gérées par MHonArc 2.6.16.

Haut de le page