Pour le détail de la construction de la commande sed (qui est le truc compliqué de l’affaire...) voir :
http://www.commentcamarche.net/faq/...
- #!/bin/bash
- #
- # générer un sh avec les "svn checkout" ou "git clone" de tous les plugins d'un SPIP
- #
- # chaque ligne du fichier généré est de la forme:
- # svn co svn://zone.spip.org/spip-zone/_plugins_/nom_plugin nom_plugin
- # ou
- # git clone https://github.com/nom_repo/nom_plugin.git nom_plugin
- #
- # ce fichier sera lancé dans le rep plugins/ d'un SPIP que l'on veut munir des mêmes plugins
- #
- # chemin du répertoire des plugins du SPIP
- REP_PLUGINS=/var/www/mon_spip/plugins
- # chemin du fichier sh à créer
- FICHIER_SH=./dupliquer_plugins.sh
- # initialiser le fichier
- echo "# commandes des plugins a installer" > $FICHIER_SH
- for i in `ls $REP_PLUGINS`; do
- if [ -d $REP_PLUGINS/$i/.svn ]; then
- svn info $REP_PLUGINS/$i |sed -r -n '/^URL.?:/{h;G;s/\n/ /;s/URL.?:/svn co/1;s/\/trunk$//;s/\/branches\/[^\/]*$//;s/URL.*\///;p}' >> $FICHIER_SH
- fi
- if [ -d $REP_PLUGINS/$i/.git ]; then
- grep "url" $REP_PLUGINS/$i/.git/config |sed 's/.*url = /git clone /;s/.*\/\([^\/]*\).git$/\0 \1/' >> $FICHIER_SH
- fi
- done
- # passer le fichier sh en executable
- chmod +x $FICHIER_SH
Une fois ce script lancé, on récupère le fichier dupliquer_plugins.sh généré dont le contenu ressemblera à :
- svn co svn://zone.spip.org/spip-zone/_plugins_/acces_restreint/trunk acces_restreint
- svn co svn://zone.spip.org/spip-zone/_plugins_/adaptive_images/trunk adaptive_images
- git clone https://github.com/nursit/home.git home
- svn co svn://zone.spip.org/spip-zone/_plugins_/agenda/trunk agenda
- svn co svn://zone.spip.org/spip-zone/_plugins_/alias alias
- git clone https://github.com/nursit/bank.git bank
- ...
Il ne reste plus qu’a transférer ce fichier dans le répertoire plugins/ du nouveau SPIP, et le lancer en ligne de commande pour avoir les mêmes plugins installés.
On peut également décider de supprimer un certain nombre de lignes correspondantes aux plugins que l’on ne souhaite pas installer.
TODO :
- ajouter la récupération de la branch git en cours : cf https://stackoverflow.com/a/11868440
- git rev-parse --abbrev-ref HEAD
- ou
- git status | head -1
et intégrer l’appel de branche dans le git clone :
- git clone --branche xxxx url
Alternative si vos plugins ne sont pas installés en ligne de commande :
voir l’astuce d’Eliaz blog : Migrer facilement ses plugins d’un SPIP à un autre