Mercurial: проверьте, вносили ли последние изменения / изменения последние изменения - PullRequest
9 голосов
/ 19 января 2012

Я занимаюсь написанием скрипта обновления, который извлекает последнюю версию из ряда репозиториев и перестраивает проекты.Я хотел сделать сборку условной, поэтому попробовал

hg pull -u && ant clean build

и вариант

hg pull; hg update && ant clean build

Однако сборка муравья всегда вызывается, даже если ничего не изменилось.Я знаю, что могу использовать hg incoming для проверки изменений перед выполнением проверки, но мне это кажется расточительным.

Как я могу проверить наличие новых изменений, не обращаясь к серверу дважды (один раз для hg incoming, один раз для hg pull)?

ОБНОВЛЕНИЕ: Теперь это мой сценарий сборки:

update() {
  TIP=$(hg tip --template "{node"})
  hg pull -u
  if test "$TIP" != $(hg tip --template "{node}"); then
    ant clean build
  fi
}

(cd repo1; update )
(cd repo2; update )

И для людей, которые задаются вопросом, почему я делаю чистую сборкукаждый раз для этого есть две причины:

  1. Репозитории зависят друг от друга, и когда API в одном из них изменяется, мне нужно выполнить полную перестройку, чтобы найти места, где эти API изменяютсякод прерывания
  2. Компилятор Java содержит встроенные константы, также из других файлов классов.Теперь, когда я изменяю константу в классе обратно на поле, которое можно изменить, все остальные файлы классов, использующие эту константу, остаются неизменными при сборке, и это может привести к незначительным ошибкам, которых я хочу избежать.

Ответы [ 2 ]

9 голосов
/ 19 января 2012

Вы не должны просто запускать hg incoming дважды, так как на самом деле загружает все наборы изменений дважды . Это потому, что вы не можете просто заглянуть в удаленный репозиторий, не запустив полный hg pull.

Так что сохраните входящие наборы изменений в связке и извлеките их вместо этого:

hg incoming --bundle incoming.hg && hg pull --update incoming.hg && echo "Go!"

Команда hg incoming действует как защита для следующих команд: && имеет короткое замыкание, поэтому первая команда, которая возвращает ненулевой код выхода, приведет к сбою всей конструкции с этим кодом выхода. Это означает, что hg pull и любые последующие команды вообще не выполняются, когда hg incoming сигнализирует, что тянуть нечего.

3 голосов
/ 19 января 2012

Следуйте до @ Адам

Цитаты из hg help incoming

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

...

Возвращает 0, если есть входящие изменения, в противном случае 1.

...