Mercurial: как найти последний раз, когда моя ветка была объединена с дефолтом - PullRequest
1 голос
/ 06 июня 2019

Есть ли какая-то магия Mercurial для ревизий, которая может быть использована для поиска последнего набора изменений в ветви default, которая объединила определенную ветку (назовем это mybranch)?

Или не менее удачно найтипоследняя ревизия mybranch, которая была объединена с настройкой по умолчанию`?

Кроме того, было бы неплохо получить список ревизий, перенесенных с mybranch на default.

1 Ответ

2 голосов
/ 07 июня 2019

hg help revsets как источник, начиная с последнего вопроса

Список привитых ревизий

"destination([set])" 
Changesets that were created by a graft, transplant or rebase operation, with the given
revisions specified as the source.
Omitting the optional set is the same as passing all().

Для "... наборов изменений, перенесенных из mybranch в default" revset будет

destination(branch("mybranch")) & branch("default")

Еще лучше: вы можете сохранить его как revsetalias (TBT!)

[revsetalias]
grafted(from, to) = destination(branch(from)) & branch(to)

и используйте его для любой пары ветвей (расширение до произвольного количества источников будет вашей будущей задачей).

Последняя слитая ревизия

Шаг за шагом * * тысячу двадцать-одна

  • "... последний набор изменений в ветви по умолчанию, которая объединила определенную ветвь" - это а) набор слияний б) последний, если объединены более одного раза в) один из его родителей принадлежит рассматриваемой ветви
  • вам нужно проверить revset, и если я перепутал родителей, поменяйте p1 & p2 в revset (сейчас не могу отладить)
  • Необходимо подготовить Revset к наиболее распространенной задаче «Получить последнюю точку слияния от ветви к ветви К»

merge() & branch("to") - все точки слияния в TO

p2(merge() & branch("to")) & branch("from") - слияния родителей только из

child(p2(merge() & branch("to")) & branch("from")) & branch("to") - дети вышеуказанных родителей только в ТО (потому что они могут иметь детей и в других филиалах)

last(child(p2(merge() & branch("to")) & branch("from")) & branch("to")) - последняя точка слияния, если слияния произошли несколько раз.

Набор revsetaliases (для лучшей читаемости) в результате

[revsetalias]
ms(to) = merge() & branch(to)

ms2b (до, от) = (дочерний (p2 (мс (до))) и ответвление (с)) и ответвление (до)

fp_ms(to,from) = p2(ms(to)) & branch(from)

и ваш revset для:

  • последняя точка слияния last(ms2b("default","mybranch"))
  • последний иностранный родитель last(fp_ms("default","mybranch"))

Дополнение и демонстрация

Я исправил свой ms2b (), как показано на скриншоте репозитория THG ниже. Сливается из стабильного в стандартное состояние "как есть"

children(p2(merge() & branch(default)) & branch(stable)) & branch(default)

С параметрами и предварительно подготовленными revsetaliases

ms2b(to,from) = children(p2(ms(to)) & branch(from)) & branch(to)

RepoBrowser w/filter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...