Вопрос

Обычно я бы включил расширения, добавив следующее в .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 - например ,после каждого обновления.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top