Существует команда hg debug "hg debugdata -m REV", которая может вам помочь. Вот как это работает:
- Я фиксирую 3 файла a.txt / b.txt / c.txt в наборе изменений 0/1/2 / соответственно. И я изменяю a.txt в Rev 3. DAG выглядит так:
------- 0 -------> 1 --------> 2 -------> 3
a.txt b.txt c.txt a.txt
So the newest rev for a/b/c should be 3/1/2;
После этого записи журнала:
рт.ст. -q
3:31308f74291a
2:8d438b01dfd4
1:fcc0f041df56
0:c53934933136
a.txt имеет две версии, которые связаны с наборами изменений 0 и 3 соответственно. Для каждой версии a.txt Mercurial создаст для него уникальный хеш (nodeid). Эти nodeid относятся только к a.txt и отличаются от хеша changeset. Мы можем использовать другую команду отладки, чтобы увидеть, что это за версии:
~ / work / hg / a / .hg / store / data $ hg debugindex a.txt.i
rev offset length base linkrev nodeid p1 p2
0 0 3 0 0 b789fdd96dc2 000000000000 000000000000
1 3 6 1 3 a9ecbd92f818 b789fdd96dc2 000000000000
Мы можем видеть, что эти два "nodeid" (b789fdd96dc2 / a9ecbd92f818) соответствуют версии changeset (linkrev) 0/3 соответственно. Поскольку эти nodeid хэшируются на основе содержимого файла и родительской информации (p1 / p2), они являются «уникальными» в смысле хранилища. поэтому «b789fdd96dc2» идентифицирует a.txt@version-0, а a9ecbd92f818 идентифицирует a.txt@version-3.
- Наконец, давайте посмотрим, как работает "hg debugdata -m REV".
Эта команда выводит список "манифеста" версии REV. Манифест - это моментальный снимок каталога для всех файлов @ версии, существующих в конкретном наборе изменений REV. Давайте посмотрим, что такое манифест в версии 3:
~ / work / hg / a $ hg debugdata -m 3
a.txt^@a9ecbd92f8182efd8eeb5396468fd70884650395
b.txt^@1e88685f5ddec574a34c70af492f95b6debc8741
c.txt^@149da44f2a4e14f488b7bd4157945a9837408c00
Для a.txt вы можете видеть, что его nodeid - это "a9ecbd92f8182efd8eeb5396468fd70884650395", что соответствует короткому варианту nodeid, упомянутому на шаге 3. Такой nodeid должен хорошо служить вашему "URL перезаписи"
Теперь у вас есть текстовое имя и его идентификатор узла в ревизии 3. Для генерации всего, что вы хотите, требуется всего одна команда отладки. Я думаю, что это лучшее решение.
Если вас интересуют команды отладки, предоставляемые Mercurial, сделайте следующее:
hg debugcomplete debug (список всех команд отладки)
hg help debugdata
hg help debugindex