Ответ 1
Как упоминалось в комментарии выше, я дал ему выстрел, вот что получилось:
Интересно, есть ли команда или расширение mercurial, которая просто проверяет, находится ли данный набор изменений в ветке. Команда будет выглядеть примерно так:
hg contains [-r branch] changeset_id
и должен проверить, находится ли данный набор изменений в текущей/заданной ветке, возвращая только "Да" или "Нет".
Я знаю о команде "debugancestor", но ответ "Да/Нет" легче читать.
И если есть, можно ли также проверять наличие пересаженных наборов изменений?
EDIT: сценарий расположен в репо, где названные ветки имеют несколько глав. Допустим, что ветвь называется "dev-X" , имеющая более 1 главы и более длинную историю, слишком долго, чтобы отслеживать ее с помощью различных графических визуализаций. Я хочу выяснить, был ли набор изменений X в ветке "dev-X" объединен с другим главой "dev-X" . Поэтому я не могу использовать имена ветвей, но только номера наборов изменений/хэшей для указания ветки.
И, прежде всего, я пытаюсь выяснить, был ли там пересажен набор изменений X, возможно, взяв более 1 шаг трансплантации. Я знаю, что необходимая информация хранится в mercurial (я видел ее при вмешательстве в меркуриальную внутренность), она просто недоступна через интерфейс командной строки.
Как упоминалось в комментарии выше, я дал ему выстрел, вот что получилось:
Как насчет этого:
hg log -r changeset_id -b branchname
Это даст некоторый вывод, если changeid_id
содержит изменения в ветке branchname
, в противном случае вывод не возвращается.
Вы можете обернуть его в bash, если хотите:
function contains() {
if [ "$(hg log -r $1 -b $2)" == "" ]
then
echo no
else
echo yes
fi
}
который делает это:
$ contains 0 default
yes
$ contains 0 other
no
с использованием 1.6 и более поздних версий с возможностями набора ревизий все, что вам нужно, это
hg log --rev "ancestors(.) and <revNum>"
например,
hg log --rev "ancestors(.) and 1234"
blank означает нет, выход означает "да", это в вашей истории. Некоторые из других решений, размещенных здесь, не будут работать, если набор изменений был создан в именованной ветке, даже если он был позже скомпонован.
Довольно легко преобразовать результаты debugancestor в да или нет (но там определенно нет встроенного способа сделать это, напишите script уже!). Имейте в виду, что ответ может быть неправильным, если ветка имеет более одной ветки головки.
(Написание расширения для добавления команды для этого также должно быть почти тривиальным, BTW.)
Вы всегда можете просто распечатать имя ветки для этой версии (оно будет пустым, если оно по умолчанию), а затем проверить это на все, что вы хотите (в bash или на каком-то языке скриптов):
hg log --template '{branches}' -r <revision name/number>
Я тестировал большинство вышеперечисленных подходов, не работал. Расширение "содержит" каким-то образом принимает неверную ревизию (я думаю, что это ошибка), hg log --rev "предки (.) И 1234" работают, но я нашел еще более простой подход для этого:
hg merge -P <changeset>
Покажет вам, останется ли что-нибудь несвязанное (оно также будет включать в себя изменения, которые не объединены родителями соответствующего набора изменений)