Gmane
From: Antoine <antoine <at> pitrou.net>
Subject: Re: versioning
Newsgroups: gmane.comp.web.spip.devel
Date: 2005-01-08 21:44:10 GMT (4 years, 25 weeks, 2 days, 19 hours and 52 minutes ago)

Le samedi 08 janvier 2005 à 16:38 +0100, Mathieu Lecarme a écrit :
> comment fait-on pour purger le versioning des articles pour ne garder 
> que les n dernières versions, ou pour bazarder les versions de plus de n 
> mois?

On écrit le code pour !
Tu as un accès CVS ;)

> Il y a bien la fonction supprimer_versions() dans lab_revision.php, mais 
> les numéros de versions ne sont pas décalé aprés nettoyage, du coup, 
> aprés un permier nettoyage, il n'y a plus moyen de garder simplement les 
> n dernières versions.

Comment ça ? Il y a une entrée par version et par article dans
spip_versions, datées et numérotées par ordre croissant. Ca ne devrait
pas être difficile de savoir quelles sont les N plus récentes...

> Existe-t-il un bout de doc pour expliquer la liaison entre article, 
> version et versions_fragments?

Non, mais c'est pas très difficile à comprendre.
Un article (id_article) peut avoir k versions. Un fragment suit
l'évolution d'un morceau de l'article (un paragraphe) au fil des
versions. Une version (id_version) d'un article (id_article) est
constituée d'un agencement des différents fragments correspondant à
cette version de cet article. Cela permet de gérer efficacement le
déplacement de paragraphes, car seul l'agencement des fragments est
modifié.

Le format de stockage des fragments est un peu spécial : un certain
nombre de versions successives d'un même fragment sont stockés dans un
tableau PHP qui sera sérialisé puis compressé, ce qui donne un taux de
compression très efficace : en effet, les fragments sont en général
assez courts et ils changent peu d'une version à l'autre, ce qui donne
une forte redondance à des intervalles assez proches. De plus, les
versions d'un fragment ne présentant pas de changement ne sont pas
répétées, c'est-à-dire que le tableau PHP n'a pas d'entrée correspondant
à l'id_version correspondant : il faut alors utiliser la version
antérieure la plus proche.

Tout cela se retrouve assez clairement dans le code.

a+

Antoine.