Как создать псевдоним 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
НТН