Nom de répertoire de lib externe #2100

Closed
opened 12 years ago by yffic · 2 comments
yffic commented 12 years ago

Lorsqu'un zip de lib externe contient un dossier racine, c'est le nom de ce dossier qui est utilisé pour créer le dossier d'installation. Par exemple jquery.fancybox-1.3.4.zip contient une racine jquery.fancybox-1.3.4 et est donc installé dans le dossier lib/jquery.fancybox-1.3.4

Par contre, si le zip ne contient pas de racine, la recherche de la plus longue racine commune a tous les fichiers du zip (ligne 220 ecrire/inc/charger_plugin.php) renvoie une chaine vide. Et du coup l'extraction ne se fait pas sur basename($racine) comme pour fancybox mais sur basename($fichier, '.zip') qui est constitué au début par les 8 premiers caracteres du md5 du fichier zip (ligne 71 de ecrire/action/charger_plugin.php)... Par exemple tablesorter s'installe dans lib/hfcb2ad58-jquery.tablesorter

Ce n'est pas vraiment un bug, mais il est du coup difficile de prédire le dossier d'install... En fait l'idéal serait que ce dossier d'install soit enregistré dans la base, plutot que de creer un define vers un repertoire au nom aléatoire dans un mes_options du plugin nécessitant la lib

Lorsqu'un zip de lib externe contient un dossier racine, c'est le nom de ce dossier qui est utilisé pour créer le dossier d'installation. Par exemple jquery.fancybox-1.3.4.zip contient une racine jquery.fancybox-1.3.4 et est donc installé dans le dossier lib/jquery.fancybox-1.3.4 Par contre, si le zip ne contient pas de racine, la recherche de la plus longue racine commune a tous les fichiers du zip (ligne 220 ecrire/inc/charger_plugin.php) renvoie une chaine vide. Et du coup l'extraction ne se fait pas sur basename($racine) comme pour fancybox mais sur basename($fichier, '.zip') qui est constitué au début par les 8 premiers caracteres du md5 du fichier zip (ligne 71 de ecrire/action/charger_plugin.php)... Par exemple tablesorter s'installe dans lib/hfcb2ad58-jquery.tablesorter Ce n'est pas vraiment un bug, mais il est du coup difficile de prédire le dossier d'install... En fait l'idéal serait que ce dossier d'install soit enregistré dans la base, plutot que de creer un define vers un repertoire au nom aléatoire dans un mes_options du plugin nécessitant la lib
Owner

Il faudrait améliorer cela, en effet. Mais le stockage en base me parait peut possible. Il faut éviter que le dezippage de deux archives differentes ne tombe dans le même dossier. A ce titre le md5 devrait porter sur toute l'url du zip plutot que sur le basename, et on pourrait fournir une fonction qui donne le nom du dossier en fonction de l'url de la lib, ce qui permettrait de l'utiliser plus simplement dans le define
Version cible mise à 3.0

Il faudrait améliorer cela, en effet. Mais le stockage en base me parait peut possible. Il faut éviter que le dezippage de deux archives differentes ne tombe dans le même dossier. A ce titre le md5 devrait porter sur toute l'url du zip plutot que sur le basename, et on pourrait fournir une fonction qui donne le nom du dossier en fonction de l'url de la lib, ce qui permettrait de l'utiliser plus simplement dans le define **Version cible mise à 3.0**
Owner

Appliqué par commit r18298.
Statut changé à Fermé

Appliqué par commit r18298. **Statut changé à Fermé**
Sign in to join this conversation.
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: spip/spip#2100
Loading…
There is no content yet.