Mercurial hooks - передавать информацию между крючками? - PullRequest
2 голосов
/ 08 марта 2012

В настоящее время у меня есть хук pre-commit в моем проекте Mercurial, который дает пользователю возможность обновить номер версии проекта, если он пожелает (например, 1.0 до 1.0.1 или 1.1 или 2.0) , Они выбирают один из этих параметров, и ловушка обновляет номер версии в одном из файлов проекта до того, как происходит фиксация.

Когда я запускаю hg commit, эта ловушка запускается и обновляет соответствующий файл с новым номером версии, а затем выполняет фиксацию.

Я бы хотел добавить к хуку так, чтобы он также вызывал hg tag <new_verson_number>.

Однако я не могу добавить это к хуку pre-commit, потому что тогда тег будет добавлен до вызова коммита, в результате чего тег будет на одну ревизию устаревшим.

Я бы хотел добавить команду hg tag к хуку commit (запустить после коммита), чтобы последовательность событий была такой:

  • hg commit -m "my commit message"
  • пользователь говорит да, я хотел бы изменить номер версии
  • номер версии обновляется в соответствующем файле
  • коммит происходит [все до этого в порядке]
  • если пользователь изменил номер версии, запустите ловушку коммита: hg tag <new_version_number>.

Теперь я мог бы добавить ловушку фиксации, которая считывает новый номер версии из файла, в котором он хранится, и запускает hg tag <new_version_number>, , но , что если пользователь решил не менять номер версии? В этом случае я не хочу добавить тег, и если я буду слепо запускать hg tag <new_version_number>, я получу теги, которые мне не нужны.

Итак, есть ли какой-то способ, которым я могу сказать хуку pre-commit оставить некоторую информацию для хука commit (да / нет того, нужно ли добавлять тег), и хук commit может использовать это для определить, добавлять тег или нет?

веселит.

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

Как насчет хука commit, который проверяет, изменил ли последний коммит файл, в котором вы сохранили версию? Что-то вроде:

[hooks]
commit.tagversion = if hg log -r $HG_NODE --template '{files}' | grep -q VERSION_FILE ; then hg tag $(hg cat -r $HG_NODE VERSION_FILE) ; fi

Я не проверял, но это или что-то подобное должно работать.

1 голос
/ 08 марта 2012

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

...