(Traduction du texte original en anglais : Revlog)

Revlog

Un nouveau format revlog est employé depuis Mercurial 0.9 : voir RevlogNG.

Un revlog, par exemple .hg/data/unfichier.d, est la structure de donnée la plus importante et représente toutes les versions d'un fichier dans un dépôt. Chaque version est sauvée compressée dans son intégralité ou stockée comme delta (différence) binaire compressé relatif à la version précédente dans le revlog. Le choix de sauvegarder une version complète est déterminé par la quantité de données nécessaire pour reconstituer le fichier. Ce système permet de s'assurer que Mercurial n'aura pas besoin d'une importante quantité de données pour reconstituer chaque version d'un fichier, indépendamment de la façon dont les versions sont sauvegardées.

La reconstitution ne nécessite qu'une lecture, si Mercurial sait où et quand lire. Chaque revlog a cependant un index, par exemple .hg/store/data/unfichier.i, qui contient un enregistrement de taille fixe pour chaque version. L'enregistrement contient :

Voici un exemple :

$ hg debugindex .hg/store/data/README.i
   rev    offset  length   base linkrev nodeid       p1           p2
     0         0    1125      0       0 80b6e76643dc 000000000000 000000000000
     1      1125     268      0       1 d6f755337615 80b6e76643dc 000000000000
     2      1393      49      0      27 96d3ee574f69 d6f755337615 000000000000
     3      1442     349      0      63 8e5de3bb5d58 96d3ee574f69 000000000000
     4      1791      55      0      67 ed9a629889be 8e5de3bb5d58 000000000000
     5      1846     100      0      81 b7ac2f914f9b ed9a629889be 000000000000
     6      1946     405      0     160 1d528b9318aa b7ac2f914f9b 000000000000
     7      2351      39      0     176 2a612f851a95 1d528b9318aa 000000000000
     8      2390       0      0     178 95fdb2f5e08c 2a612f851a95 2a612f851a95
     9      2390     127      0     179 fc5dc12f851b 95fdb2f5e08c 000000000000
    10      2517       0      0     182 24104c3ccac4 fc5dc12f851b fc5dc12f851b
    11      2517     470      0     204 cc286a25cf37 24104c3ccac4 000000000000
    12      2987     346      0     205 ffe871632da6 cc286a25cf37 000000000000
...

En une lecture de l'index pour récupérer l'enregistrement, puis une seule lecture du revlog, Mercurial peut reconstituer chaque version d'un fichier dans un laps de temps proportionnel à la taille du fichier.

Donc l'ajout d'une nouvelle version ne nécessite qu'une recherche d'ordre O(1), les revlogs et leurs indices sont en ajout seul (append-only).

Des revlogs sont également utilisés pour les manifests et les changesets.

Informations relatives

Le dossier contrib dans les sources contient les scripts python dumprevlog et undumprevlog (voir changeset ec5d77eb3431).

Références

Voir aussi : Presentations


FrenchInternals

FrenchRevlog (last edited 2012-02-24 16:19:16 by WagnerBruna)