Как создать псевдоним revset для тегов, имена которых следуют шаблону?

В моем хранилище у меня есть теги вида version-1.2.3, Я хотел бы сделать псевдоним revset new() это называется так:

hg log -r 'new(1.2.3, 1.2.4)'

... и расширяется до этого:

hg log -r '::version-1.2.4 - ::version-1.2.3'  # What's new in 1.2.4?

Когда я попытался сделать это:

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

... Mercurial интерпретировал это как вычитание ревизии $2 (например 1.2.3) из ревизии versionчто не было моим намерением.

Я также попробовал это, используя ## оператор конкатенации:

new($1, $2) = ::"version-" ## $2 - ::"version-" ## $1

Но потом hg log -r 'new(1.2.3, 1.2.4)' дает мне эту ошибку:

hg: parse error at 13: syntax error

Я также пытался использовать ancestors() вместо :: синтаксис, но все еще получил ошибку синтаксиса. Возможно ли это сделать?

2 ответа

Решение

Я проверил следующее, что работает:

new($1, $2) = (::"version-" ## $2) - (::"version-" ## $1)

Для справки $1::$2 не даст вам то же самое, это означает пересмотр между $1 а также $2Эквивалент, который я бы предпочел:

new($1, $2) = only("version-" ## $2, "version-" ## $1)

Согласно документу это строго эквивалентно тому, что вы хотите:

"only(set, [set])"
      Changesets that are ancestors of the first set that are not ancestors of
      any other head in the repo. If a second set is specified, the result is
      ancestors of the first set that are not ancestors of the second set
      (i.e. ::<set1> - ::<set2>).

Примечание стороны: $1::$2будет более читабельным и даст вам ту же часть DAG Only only() дает правильный результат во всех случаях, DAG может не сработать в соответствии с обсуждением в ответе @lc2817)

Я почти добился успеха в получении ответа, но у меня возникли некоторые проблемы (и я не знаю способов отладки) на последнем этапе: объединение всего в [revsetalias]

Предисловие

Поскольку параметры являются тегами, а предикат tag() позволяет использовать регулярные выражения в параметре - я буду использовать их

Revset tag("re:version\-") показать все теги, начинающиеся с "version-"

Revset с жестко запрограммированным номером в виде строки, показывающей один набор изменений

hg log -r "tag('re:version\-1.7$')
changeset:   2912:454a12f024f3

(трейлинг $ обязателен, иначе это будут все теги 1.7*)

Моя лучшая попытка в revsetalias была tag('re:version\-\$1$') - без ошибок и без вывода: я не могу получить полностью развернутую команду, чтобы увидеть все обработки и замены и обнаружить мои ошибки с помощью параметризованных revsetalias

НТН

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