Les versions "Classic" 3.0, 3.1 et 3.2

, par James

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)
svadmin 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"

 [3] [4]

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;
done

On 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.2

Ré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.

Notes

[1Des dépôts Git dans le cadre de cette maquette. Cf. https://git-spip.lerebooteux.fr/spip

[2L’option --compatible-version 1.9 indique le format de la base de données du dépôt qui sera produit et garantit son interprétation par la version de git qui a été utilisée par la suite.

[3Pas besoin des plugins-dist et des squelettes par défaut, puisqu’ils sont déjà distribués sur SPIPRemix, d’où svn co --ignore-externals ...

[4On ne conserve que les versions maintenues et les tags seront produits qu’après l’ajout de fichiers composer.json

[5où origin correspondrait à l’adresse d’un dépôt Git accessible en lecture seule

[6Il y a peut-être plus subtil et précis ...