2010-11-18 4 views
5

У меня есть сценарий, который находится на верхнем уровне моей рабочей копии и хотел бы использовать его как крюк Mercurial. Если я использую абсолютный путь к крючку, тогда все в порядке, но я хочу относительный путь, чтобы все это можно было легко перемещать, использовать в других рабочих копиях, а другие разработчики могут скопировать hgrc как есть.Как использовать относительный путь к крюку Mercurial

/space/project/.hg/hgrc содержит

[hooks] 
update = genid 

genid скрипт в/пространства/проекта/genid

Крюк вызывается просто отлично, если я нахожусь в/пространстве/проект но если мой текущий каталог - это/space/project/src/tools, тогда «hg update» выдаст ошибку, поскольку невозможно найти крючок.

+0

Что произойдет, если кто-то сделает «hg update null», тем самым освободив рабочий каталог? Когда вы попытались запустить любую команду 'hg', она попытается загрузить несуществующее расширение. Конечно, это все еще может быть проблемой с абсолютными путями, но гораздо вероятнее, если скрипт расширения находится в репо, над которым вы активно работаете. –

+1

Ну не делай этого! Крюки пусты по умолчанию и должны быть проактивно добавлены, поэтому, если не будет никакой рабочей копии, тогда не добавляйте крючок. Это не будет проблемой для других разработчиков, работающих над проектом. –

+1

@TimDelaney, который не имеет каких-либо катастрофических эффектов - запуск крюка будет просто терпеть неудачу, но фиксация все равно произойдет –

ответ

2

крючками Python не может использовать относительный путь. Сценарий может выглядеть так:

[hooks] 
update = ./genid 
+0

это работает просто отлично! – pyfunc

+1

не могли бы вы уточнить - я не мог получить эту работу. Я хочу каталог, расположенный выше каталога .hg. Не могли бы ./something просто обратиться к текущему каталогу? –

+0

* Крюки Python не могут использовать относительный путь * - не могли бы вы предоставить ссылку? –

2

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

[hooks] 
update = $MercurialHooks/genid 

См Faq (12) в https://www.mercurial-scm.org/wiki/TipsAndTricks

+0

Нет переменной окружения, указывающей на действующий в настоящее время репозиторий. –

+0

@Roger Binns: Я имел в виду, что вы можете установить его и использовать. – pyfunc

+0

Да, я понял, что вы это понимаете. Но это не сработает для моего сценария, например, если есть проверки в нескольких разных местах или если вы перемещаете репозиторий в другой каталог. Если вам нужно поддерживать переменную окружения, то она также может быть $ PATH. Если Mercurial установил один такой, как $ HG_REPO_DIR, тогда это было бы замечательно. –

0

У меня была такая же проблема и cannt решить проблему. Обходной путь был легко! Я вернул файл в репо и просто скопировал его в мою .hg папку! Не идеально, но это не так, что это может измениться, и другие пользователи репо все еще могут получить копию файла

Смежные вопросы