Les versions "Classic" 3.0, 3.1 et 3.2
Même si le nom de cette distribution n’est pas définitif, on entend, dans le cadre de cette démonstration, par "Classic" la distribution historique de SPIP.
Elle comprend l’espace privé, accessible via le répertoire physique ./ecrire qui contient aussi les mécanismes de base du CMS, et dont l’habillage se trouve dans le répertoire ./prive, une collection de plugins historiquement associés aux premières versions du logiciel et un squelette par défaut, qui fait la démonstration des fonctionnalités potentielles d’un site public.
Pour introduire les principes fondamentaux de Composer, il a été proposé de simuler une version 3.3 basée sur un nouveau découpage du code en divers composants installables par cet outil.
Cet article propose de transformer le dépôt subversion historique en divers dépôts [1] pour fournir à l’installation et à la mise à jour les 3 versions 3.x actuellement maintenues (ainsi que la branche de développement) sur le modèle déjà présenté.
Subversion
Il n’est pas nécessaire de transformer le dépôt actuel qui peut rester actif, en lecture seule de préférence, afin de laisser le temps aux utilisateurs svn de basculer vers les nouvelles méthodes de mise à jour.
En récupérant une copie du dépôt, par l’intermédiaire d’un dump, on reconstruit un dépôt localement, par exemple avec la version 1.10 de subversion :
WORKING_ROOT=$(pwd)
svnadmin create --compatible-version 1.9 spip
svnadmin load --normalize-props -F spip.dump spip[2]
Les dépôts de SPIPRemix ont été produits aux alentours du 13 mai dernier sur la base d’un dump effectué après le commit 23986. Merci Fil ! ;-)
On applique le script ci-dessous sur ce dépôt local pou effectuer les transformations liées à la mise en place du standard layout et de semver :
svn co --ignore-externals file://${WORKING_ROOT}/spip svnwc && cd svnwc
svn rm shelves/
svn rm archivelist.txt
svn ren tags museum
for maintenue in 3.0 3.1 3.2; do
svn ren branches/spip-$maintenue branches/$maintenue;
done
svn rm --force branches/r16004+plugins
for nonmaintenue in `ls -1 branches/ | grep spip-`; do
svn rm --force branches/$nonmaintenue;
done
svn mkdir classic
svn ren spip classic/trunk
svn mv branches classic/
svn mkdir classic/tags
svn ci -m "Grand ménage de printemps"Ainsi, on dispose d’un clone subversion temporaire prêt à être migré vers Git sans perturber les copies locales des utilisateurs du dépôt historique.
Fichier authors
En s’appuyant, par exemple et au hasard, sur cet article on peut générer un fichier authors pour les réattribuer dans les fururs dépôts Git.
authors=$(svn log -q file:/${WORKING_ROOT}//spip | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2 }' | sort | uniq)
echo>authors.lst
for author in ${authors}; do
echo "${author} = ${author%@*} <${author}>">>authors.lst;
doneOn peut éventuellement faire quelques modifications à la marge avant l’étape suivante. Exemple : james@rezo.net = james <james@rezo.net> pourrait devenir james@rezo.net = JamesRezo <james@rezo.net>
Git
Toujours en suivant les précieux conseils de Cédric, il sera possible de néttoyer les messages de log :
cd ${WORKING_ROOT}
git svn clone --authors-file=authors.lst -s ${WORKING_ROOT}/spip gitwc && cd gitwc
git filter-branch --msg-filter '
sed -e "/git-svn-id:/d"
'Sur les dépôts officiels, la vie continue. Les étapes de récupération des auteurs et de nettoyage des messages de commit seront à reproduire le moment venu. Elle n’ont pas été appliquées sur la maquette pour gagner du temps.
Récupérer les branches
On peut, si on le souhaite, et pour des raisons historiques, conservé les anciens tags subversion dans un dépôt Git
cd ${WORKING_ROOT} && git svn clone file:/${WORKING_ROOT}//spip/museum && cd museum && git push -u origin master [5]
On s’occupe des branches de spip/classic :
cd ${WORKING_ROOT}/gitwc
git remote add origin https://git-spip.lerebooteux.fr/spip/classic.git
git push -u origin master
git ck -b 3.0 origin/3.0
git push -u origin 3.0
git ck -b 3.1 origin/3.1
git push -u origin 3.1
git ck -b 3.2 origin/3.2
git push -u origin 3.2Récupérer les répertoires ./ecrire et ./prive
git remote add origin https://git-spip.lerebooteux.fr/spip/ecrire.git
git ck master
git ck -b ecrire-master
git filter-branch --prune-empty --subdirectory-filter ecrire ecrire-master
git push -u origin master
git ck 3.0
git ck -b ecrire-3.0
git filter-branch --prune-empty --subdirectory-filter ecrire ecrire-3.0
git push -u origin 3.0
git ck 3.1
git ck -b ecrire-3.1
git filter-branch --prune-empty --subdirectory-filter ecrire ecrire-3.1
git push -u origin 3.1
git ck 3.2
git ck -b ecrire-3.2
git filter-branch --prune-empty --subdirectory-filter ecrire ecrire-3.2
git push -u origin 3.2
git remote add origin https://git-spip.lerebooteux.fr/spip/prive.git
git ck master
git ck -b prive-master
git filter-branch --prune-empty --subdirectory-filter prive prive-master
git push -u origin master
git ck 3.0
git ck -b prive-3.0
git filter-branch --prune-empty --subdirectory-filter prive prive-3.0
git push -u origin 3.0
git ck 3.1
git ck -b prive-3.1
git filter-branch --prune-empty --subdirectory-filter prive prive-3.1
git push -u origin 3.1
git ck 3.2
git ck -b prive-3.2
git filter-branch --prune-empty --subdirectory-filter prive prive-3.2
git push -u origin 3.2[6]
Composer
- Ajout des fichiers composer.json et .gitignore,
- Executer les
composer install(pour générer le fichier composer.lock) de chaque branche, - ajouter éventuel d’un fichier LICENSE,
- ajouter éventuel d’un fichier README.md,
- pousser branches et générer les tags.
Mettre à jour les dépôts spip/spip et spip/cms
Voir les dépots spip/spip et spip/cms sur le serveur git de la maquette, puis sur le dépôt Composer
Sur SPIPRemix
Voir les dépots spip/ecrire et spip/prive sur le serveur git de la maquette, puis sur le dépôt Composer
| commande | résultat |
composer create-project --repository=https://composer-spip.lerebooteux.fr spip/spip spip-3.0 3.0.27 |
Installe la version 3.0.27 dans le répertoire ./spip-3.0 |
composer create-project --repository=https://composer-spip.lerebooteux.fr spip/spip spip-3.1 3.1.* |
Installe la dernière version stable de la branche 3.1 (ici, la 3.1.8) dans le répertoire ./spip-3.1 |
composer create-project --repository=https://composer-spip.lerebooteux.fr spip/spip |
Installe la dernière release stable (ici, la 3.2.1) dans un répertoire ./spip |
composer create-project --repository=https://composer-spip.lerebooteux.fr --stability=dev --prefer-source --keep-vcs spip/spip |
Installe la version de développement dans un répertoire ./spip en conservant l’attachement aux dépôts de la gestion de source |
Il est à noter que si le seul composant spip/spip était distribué sur Le référentiel principal de Composer, l’option --repository=https://composer-spip.lerebooteux.fr serait inutile.