параметр mercurial pre-push hook для получения пути удаленного репо

Я пытаюсь реализовать крючок mercurial pre-push, который проверяет путь целевого репо и добавляет соответствующий идентификатор с помощью ssh-add. Не очень хорошим решением будет проверка параметров командной строки, и если путь не принудительный, то чтение значения по умолчанию из файла hgrc, но есть ли более чистый способ просто получить удаленный путь?

Я напечатал kwargs, переданные в метод ловушки, но, похоже, нет ни одного, который содержал бы то, что мне нужно. Я также пробовал гуглить, но доступной информации почти ничего нет, и это действительно похоже на черную магию. Таким образом, любая ссылка на достойную документацию и/или примеры также будет оценена.

Ваше здоровье,


person abdus_salam    schedule 23.03.2015    source источник


Ответы (2)


Глядя на hg help config, кажется, что вы можете использовать хук prechangegroup и переменную окружения HG_URL:

"prechangegroup"
  Run before a changegroup is added via push, pull or unbundle. Exit
  status 0 allows the changegroup to proceed. Non-zero status will cause
  the push, pull or unbundle to fail. URL from which changes will come is
  in "$HG_URL".
person Mathiasdm    schedule 23.03.2015
comment
Несмотря на то, что это выглядит многообещающе, к сожалению, этот хук не вызывается ни до, ни после обычного нажатия. - person abdus_salam; 23.03.2015
comment
Хм, наверное, меня смутила документация. Этот хук запускается, если изменения добавляются в текущий репозиторий (например, другие подталкивают вас или вы получаете от других). Вам это точно не пригодится. - person Mathiasdm; 23.03.2015

Вы должны иметь возможность использовать хук «pre-changegroup» и «pre-push» (обратите внимание на тире). Который предоставляет аргументы командной строки как $HG_ARGS.

Если $HG_ARGS является допустимым URL-адресом, вы можете использовать этот URL-адрес. Если ничего не указано, используйте объект пользовательского интерфейса, указанный в качестве аргумента ключевого слова для хука.

Используйте следующее, чтобы получить путь по умолчанию из конфигурации: ui.config('paths', 'default')

Поскольку вы также можете написать другие именованные URL-адреса/пути в файле конфигурации, вы также должны иметь возможность проверить $HG_ARGS, если он не содержит действительного URL-адреса и ключевого слова для объекта путей ui.config.

person rfkortekaas    schedule 23.03.2015
comment
это тоже не вызывается, и даже если это так, я не хочу полагаться на $HG_ARGS, потому что, если аргументы не предоставлены, мы получим значение по умолчанию для .hgrc. - person abdus_salam; 23.03.2015
comment
Прости. Этот крючок находится на удаленном репо. Я не понял, что вы хотите, чтобы это было локально - person rfkortekaas; 23.03.2015
comment
На самом деле мне нужно что-то для обоих, и я попытался с удаленным репо, но он все еще не вызывается в моей настройке Ubuntu, я не знаю, имеет ли какое-либо значение среда. - person abdus_salam; 23.03.2015
comment
Согласно документу, вы можете использовать «предварительную отправку» (не проверял). И снова посмотрите на $HG_ARGS, чтобы получить URL-адрес. И используйте ui.config, чтобы получить путь по умолчанию из .hgrc, если аргумент не указан. - person rfkortekaas; 23.03.2015
comment
Мне потребовалось некоторое время, чтобы вернуться к этому, но вот мой способ python (не люблю говорить pythonic) достижения этого. Если метод получает 'ui' в качестве параметра, ui.config('paths', 'default') выполняет эту работу. @rfkortekaas предложил использовать ui.config, но я не совсем понял, как это сделать, и понял это после того, как немного поиграл. Если он обновит свой ответ, я буду рад проголосовать за него. - person abdus_salam; 08.05.2015