(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 [[FrenchRepository|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 : * le [[FrenchNodeid|nodeid]] de la version du fichier * les nodeids de ses parents * la taille des données de révision * l'offset dans le revlog pour dire où commencer la lecture * la base de la chaîne du delta * le "rev-lien" pointant sur le [[FrenchChangeSet|changeset]] correspondant 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 [[FrenchManifest|manifests]] et les [[FrenchChangeSet|changesets]]. === Informations relatives === Le [[Source:contrib/|dossier contrib]] dans les sources contient les scripts python [[Source:contrib/dumprevlog|dumprevlog]] et [[Source:contrib/undumprevlog|undumprevlog]] (voir changeset [[Cset:ec5d77eb3431|ec5d77eb3431]]). === Références === * ''"Towards a Better SCM: Revlog and Mercurial"'', Matt Mackall ([[attachment:Presentations/ols-mercurial-paper.pdf|PDF]]) * ''[[http://hgbook.red-bean.com/hgbookch4.html#x8-640004|"Behind the scenes"]]'' dans ''[[http://hgbook.red-bean.com/hgbook.html|"Distributed revision control with Mercurial"]]'', Bryan O’Sullivan Voir aussi : [[Presentations]] ---- FrenchInternals