2025-06-17 13:05:20 +02:00

17 lines
840 B
Markdown
Vendored

# 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.