Content hashing

Entity hashing is done in content_hash#getEntityHashes.

  • It works by looking at the entity_changes table and going through each of the entity names/types:
    • blobs
    • attributes
    • revisions
    • attachments
    • notes
    • branches
    • etapi_tokens
    • options
  • For some reason note_reordering entities are ignored specifically.
  • All the rows in entity_changes are then ordered alphabetically, based on their entityId.
  • Every entity row is then grouped by entityName and then by sector. The sector is defined as the first character of the id.
  • The hash is altered to add the isErased value as well since the hash of deleted entries is not updated.
  • For each sector, the hash is calculated using utils.hash, using SHA1 encoded as Base64.