Differences between revisions 32 and 33
Revision 32 as of 2008-01-13 20:03:56
Size: 2443
Editor: abuehl
Comment: Moved "Merging" to page ["Merge"]
Revision 33 as of 2008-01-13 20:16:17
Size: 2482
Editor: abuehl
Comment: Re-add a "Rollback" section with a link to ["Rollback"]
Deletions are marked like this. Additions are marked like this.
Line 58: Line 58:
== Rollback ==

See ["Rollback"].

(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 working directory. Mercurial tracks various information about the working directory. See WorkingDirectory.

Merging

See ["Merge"].

Rollback

See ["Rollback"].

References

see also: ["Presentations"]

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