Журнал Mercurial, который включает происхождение окончательной ревизии, но исключает что-либо в ветви по умолчанию до начальной ревизии

Я работаю над сценарием, который анализирует ртутный журнал и генерирует отчет обо всех изменениях между любыми двумя ревизиями. Для обработки ветвей я считаю, что мне нужно использовать revsets для генерации предков окончательной ревизии, но я хочу ограничить область видимости, чтобы исключить любые ревизии, которые являются предками для начальной ревизии.

   10
  /
 / 
9
|\
| \
|  \
8   | 
|   7
| 6 |
|/  |   
5   4
|  / 
| /
|/
3 
|   
| 
|
2
|
|
|
1

На этапе 3 ветвь объекта создается из ветви по умолчанию.

На 5 ветвь релиза (6) создается из ветви по умолчанию.

На этапе 9 ветвь функций объединяется со значением по умолчанию и создается новый выпуск (10).

Я хочу список всех изменений, начиная с 5, которые влияют на 10 => 4,5,7,8,9,10

Трудность, с которой я сталкиваюсь, заключается в ограничении поиска предков, когда 3 достигается через ветвь функций. Я не хочу этого, так как 3 уже был частью 5.

Другие обсуждения, которые я рассмотрел:

Закрыть, но не помогло с ограничением объема.

Это подразумевает, что вы знаете ветку, но мне нужно найти их все динамически.

1 ответ

Решение

Хорошо, если ваша бизнес-задача "Что нового в релизе", лучшая итерация revset будет ancestors(LAST) - ancestors(PREVIOUS)т.е. для вашего образца

hg log -r "ancestors(10) - ancestors(6)"

(обратите внимание на отсутствие r5 в выходных данных, потому что это было в 6)

возможно revset будет более пригоден для использования в [revsetalias] с добавленным псевдонимом для лучшей читабельности, что-то вроде (не проверено!!!)

[revsetalias]
new($1,$2) = ancestors($1) - ancestors($2)

[alias]
cl = log -r "new($1,$2)" --style changelog
Другие вопросы по тегам