Конфигурация расширения с контролем версий в Mercurial
-
21-08-2019 - |
Вопрос
Обычно я бы включил расширения, добавив следующее в .hg/hgrc
:
[extensions]
hgext.win32text=
[encode]
** = cleverencode:
[decode]
** = cleverdecode:
Однако я хочу, чтобы эта конфигурация была версионной, т. е.часть репозитория, чтобы она была включена для всех остальных (коллег, сборочных машин), клонирующих репозиторий.Обратите внимание, что от того, кто клонирует репозиторий, не требуется выполнять что угодно чтобы включить эти расширения.
Похоже, что это невозможно из документация, но знает ли кто-нибудь какие-нибудь хитрые приемы, которые могут мне здесь помочь?
Решение
Вы хотите, чтобы mercurial делал что-то автоматически при клонировании репозитория (обновлял хуки или конфигурацию). Документация говорит, что это невозможно, и приводит несколько очень веских причин:
Hooks do not propagate
In Mercurial, hooks are not revision controlled, and do not propagate when you clone,
or pull from, a repository. The reason for this is simple: a hook is a completely
arbitrary piece of executable code. It runs under your user identity, with your
privilege level, on your machine. No comments
It would be extremely reckless for any distributed revision control system to
implement revision-controlled hooks, as this would offer an easily exploitable way to
subvert the accounts of users of the revision control system. No comments
Итак, очевидно, что mercurial сам по себе не решит вашу проблему.Вы четко заявляете, что для решения вашей проблемы вам не нужно ничего, кроме mercurial, поэтому ответ таков:то, о чем вы просите, невозможно.
Единственный способ решить вашу проблему заключается в том, что все ваши пользователи должны будут хотя бы один раз запустить / установить данный скрипт, который выполняет нужные вам действия, что-то вроде установки правильных хуков.
Если ты хочешь быть умным в этом вопросе:
- создайте одноразовый скрипт для запуска, который установит перехват для копирования нужной конфигурации в .hg или пользователя
- убедитесь, что перехват после установки может обновлять скрипт для распространения обновлений конфигурации среди пользователей
- заставьте хук добавить какую-нибудь специальную маркировку для фиксации сообщений
- отклонить фиксацию в центральном репозитории, которая не содержит специального сообщения
Немного сложно, но это самое близкое, что я могу себе представить, к вашим требованиям:
- пользователь запускает скрипт один раз, и они забывают
- вы можете убедиться, что если вы не запустили его, они не смогут зафиксировать его в вашем центральном репозитории
Другие советы
Текущая версия Mercurial для разработки (будет выпущена как Mercurial 1.3 1 июля) поддерживает %include
директива в его конфигурационных файлах.
Это означает, что вы можете попросить людей поместить
%include ../common-hgrc
в .hg/hgrc
.Сделав это, вы сможете эффективно управлять их настройками Mercurial, внося изменения в common-hgrc
.Когда они внесут изменения, новые настройки вступят в силу.
Имейте в виду, что это опасно:любой, кто может заставить вас вносить изменения в ваш репозиторий, теперь может вставлять произвольные перехваты в common-hgrc
и вы выполните их в следующей команде Mercurial (даже в "безопасной" командной строке hg status
).
Возможно, вы сможете решить эту проблему с помощью Расширение ProjRC.
“Это расширение позволяет Mercurial искать и анализировать .hg /projrc для получения дополнительных параметров конфигурации.Файл передается при клонировании и извлечении (но никогда при push)”
Как насчет создания ссылки из .hg/hgrc
например , для customhg/hgrc
так что он становится версионным.Затем вам нужно создать какой-нибудь хук, который копирует его обратно в .hg/hgrc
- например ,после каждого обновления.