deltamesh

Как работает

Никакого волшебства: устойчивый обход дерева, хеши поддеревьев и совпадение по ним.

Три шага

1. Разбор в поток

Документ читается как поток событий, целиком в память не поднимается.

2. Хеш поддеревьев

Для каждого узла считается хеш. Совпал — поддерево пропускается целиком.

3. Сборка патча

Различия выписываются в компактный бинарный формат с обратной совместимостью.

Обход и совпадение поддеревьев.

Пример

import deltamesh as dm

stream = dm.Differ(prev_snapshot)
for chunk in source:                 # источник отдаёт документ по кускам
    for patch in stream.feed(chunk): # патчи появляются по ходу
        transport.send(patch)
stream.close()

Патчи можно отправлять не дожидаясь конца документа — получатель применяет их по порядку.