Differences between revisions 34 and 35
Revision 34 as of 2008-01-13 23:14:11
Size: 2494
Editor: abuehl
Comment: DirState
Revision 35 as of 2008-04-07 22:09:45
Size: 2519
Editor: abuehl
Comment: +cat
Deletions are marked like this. Additions are marked like this.
Line 67: Line 67:
----
CategoryInternals

(for details from a source code point of view, see WhatGoesWhere)

TableOfContents

Data structures

Nodeids are unique ids that represent the contents of a file and its position in the project history. See ["Nodeid"].

A revlog, for example .hg/data/somefile.d, is the most important data structure and represents all versions of a file. See ["Revlog"].

A manifest describes the state of a project by listing each file and its nodeid to specify which version. See ["Manifest"].

A changeset lists all files changed in a checkin along with a change description and metadata like user and date. See ["ChangeSet"].

Putting it all together

We now have enough information to see how this all works together. To look up a given revision of a file:

  • look up the changeset in the changeset index
  • reconstruct the changeset data from the revlog
  • look up the manifest nodeid from the changeset in the manifest index
  • reconstruct the manifest for that revision
  • find the nodeid for the file in that revision
  • look up the revision of that file in the file's index
  • reconstruct the file revision from the revlog

If we want to go the other way and find the changeset associated with a given file revision, we follow the linkrev.

   .--------linkrev-------------.
   v                            |
.---------.    .--------.    .--------.
|changeset| .->|manifest| .->|file    |---.
|index    | |  |index   | |  |index   |   |--.
`---------' |  `--------' |  `--------'   |  |
    |       |      |      |     | `-------'  |
    V       |      V      |     V    `-------'
.---------. |  .--------. |  .---------.
|changeset|-'  |manifest|-'  |file     |
|data     |    |data    |    |revision |
`---------'    `--------'    `---------'

Tracking Working Directory State

The other piece of Mercurial is the [:WorkingDirectory:working directory]. Mercurial tracks various information about the working directory. See DirState.

Merging

See ["Merge"].

Rollback

See ["Rollback"].

References

see also: ["Presentations"]


CategoryInternals

Design (last edited 2013-10-08 10:26:58 by MattiJagula)