Nodeids

Nodeids are unique ids that represent the contents of a file and its position in the project history. For now they are computed using the [http://en.wikipedia.org/wiki/SHA_hash_functions SHA1 hash function], which generates 160 bits (40 hex digits). If you modify a file, [:Commit:commit] the change, and then modify it to restore the original contents, the contents are the same but the history is different, so the file will get a new nodeid. This history-sensitivity is obtained by calculating the nodeid from the concatentation of the [:Parent:parent] nodeids with the file's contents.

Nodeids are typically presented to the user as shortened hex strings, like this:

$ hg id
8d43f8c0b836 tip

The nodeid 00000... is special and is known as the nullid. It serves as the empty root [:Revision:revision]. This has the nice property that otherwise unrelated revisions have a common empty ancestor.

Nodeids are used in [:Revlog:revlogs].