mercurial (hg) эквивалент git description --contains <commit> для поиска тега, у которого <commit> является предком в его истории.

Я пытаюсь использовать mercurial, чтобы дать мне тег, содержащий конкретную фиксацию, какgit describe --contains, как описано в документации :

       --contains

Instead of finding the tag that predates the commit, find
the tag that comes after the commit, and thus contains it.
Automatically implies --tags.

hg log -r <rev> --template '{latesttag}\n'не отвечает всем требованиям, поскольку возвращает самый последний тег, доступный из<rev>.

Имеет mercurial простой способ найти тег, который содержитrev?

1 ответ

Есть ли у mercurial простой способ найти тег, содержащий rev?

Да, ключевое слово для поиска "revsets"

Хотя ваше (и git-doc) определение довольно грязное (какой тег из возможного набора), я покажу пошаговое решение для случая «первый тег, включающий CSID набора изменений»

Полигон для испытаний

Условия

Дабы удовлетворить большую часть требований задачи, для такого списка тегов (часть полного) я решил использовать ревизию между 2084 и 2089 и хочу иметь1.0.0b1в результате

      hg-git> hg tags
tip                             2167:b963d11cc1c8
1.0.0                           2137:6f22e3887d82
1.0.0b2.post1                   2106:ff6274c7c614
1.0.0b2                         2104:d31a72cf70bd
1.0.0b1                         2089:311e9a57959e
0.10.4                          2084:bc5339fcea1e
...

наш ассортимент

      hg-git> hg log -r 2084:2089 -T compact
2084[0.10.4]:2082   bc5339fcea1e   2022-01-26 18:40 +0100   danchr
  NEWS: 0.10.4 release

2085   da261c503c13   2022-01-26 18:40 +0100   danchr
  Added tag 0.10.4 for changeset bc5339fcea1e

2086   ec721ee0f93b   2022-01-26 18:40 +0100   danchr
  Added signature for changeset bc5339fcea1e

2087:2083,2086   729775377f6b   2022-01-26 18:49 +0100   danchr
  merge with branch 0.10.x

2088   08347725306b   2021-12-24 13:23 +0100   danchr
  versioning: create branch 1.0.x

2089[1.0.0b1]   311e9a57959e   2021-12-24 13:21 +0100   danchr
  NEWS: 1.0b1 release

Я буду использовать 2086 для CSID

Решение

Получить всех потомков CSID

hg log -r "descendants(2086)"или можно корочеhg log -r 2086:, но я хочу ревсеты со старта (вывод пропущен из-за очевидности результата)

Сократите вывод, оставив только теги

      hg-git> hg log -r "descendants(2086) and tag()" -T compact
2089[1.0.0b1]   311e9a57959e   2021-12-24 13:21 +0100   danchr
  NEWS: 1.0b1 release

2104[1.0.0b2]   d31a72cf70bd   2022-03-10 15:58 +0100   danchr
  NEWS: 1.0b2 release

2106[1.0.0b2.post1]   ff6274c7c614   2022-03-10 16:11 +0100   danchr
  Added signature for changeset d31a72cf70bd

2137[1.0.0]   6f22e3887d82   2022-04-01 16:54 +0200   danchr
  NEWS: 1.0.0 release!

Сократите вывод, оставив только первый тег

      hg-git> hg log -r "first(descendants(2086) and tag())" -T compact
2089[1.0.0b1]   311e9a57959e   2021-12-24 13:21 +0100   danchr
  NEWS: 1.0b1 release

Сократите вывод, оставив только необходимые данные (changeset+tag+date fe)

      hg-git> hg log -r "first(descendants(2086) and tag())" -T "{node|short}:{tags} {date|shortdate}\n"
311e9a57959e:1.0.0b1 2021-12-24

Бонусная игра

Сократите команду для повторного использования позже:

revset (данные-rвариант) переехал в[revsetalias]раздел () repo-hgrc или глобальной конфигурации (hg help revsets) и один параметрcsдобавлено для использования с любым CSID

        [revsetalias]
  ft(cs) = first(descendants(cs) and tag())

шаблон вывода (данные-Tвариант) переехал в[templates](hg help templating) часть...

        [templates]
  tagid = "{node|short}:{tags} {date|shortdate}\n"

и последняя команда превращается в что-то вроде

      hg log -r "ft(ec721ee0f93b)" -T tagid

PS С TortoiseHG вы можете легко отлаживать и визуализировать свои наборы изменений, используя панель инструментов фильтра для определения наборов изменений вручную и|или визуальный редактор запросов для графического интерфейса пользователя.

Другие вопросы по тегам