Конфигурация с управлением версиями в Mercurial - PullRequest
7 голосов
/ 13 мая 2009

Обычно я бы включил расширения, добавив следующее к .hg/hgrc:

[extensions]
hgext.win32text=
[encode]
** = cleverencode:
[decode]
** = cleverdecode:

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

Похоже, что это невозможно из документации , но кто-нибудь знает какие-нибудь хитрые уловки, которые могут помочь мне здесь?

Ответы [ 4 ]

9 голосов
/ 13 мая 2009

Вы хотите, чтобы 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 не решит вашу проблему. Вы четко заявляете, что не хотите ничего, кроме меркуриала, решить вашу проблему, поэтому ответ таков: то, что вы просите, невозможно.

Единственный способ решить вашу проблему - это то, что все ваши пользователи должны будут хотя бы раз запустить / установить данный скрипт, выполняющий нужные вам действия, что-то вроде установки правильных хуков.

Если вы хотите быть умным об этом:

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

Немного сложнее, но это самое близкое, что я могу себе представить, к вашим требованиям:

  • пользователь запускает скрипт один раз и забывает
  • вы можете быть уверены, что если он не запустится, они не смогут выполнить ваше центральное репо
6 голосов
/ 22 мая 2009

Текущая версия разработки Mercurial (которая будет выпущена как Mercurial 1.3 1 июля) поддерживает директиву %include в своих файлах конфигурации.

Это означает, что вы можете попросить людей поставить

%include ../common-hgrc

в .hg/hgrc. Сделав это, вы можете эффективно контролировать их настройки Mercurial, внося изменения в common-hgrc. Когда они получат изменения, новые настройки вступят в силу.

Обратите внимание, что это опасно: любой, кто может заставить вас внести изменения в ваш репозиторий, теперь может вставить произвольные хуки в common-hgrc, и вы выполните их при следующей команде Mercurial (даже в «безопасной» командной строке hg status).

1 голос
/ 02 июля 2012

Вы можете решить эту проблему с помощью расширения ProjRC .

«Это расширение заставляет Mercurial искать и анализировать .hg / projrc для дополнительных настроек конфигурации. Файл передается по клону и по запросу (но никогда по нажатию) ”

0 голосов
/ 13 мая 2009

Как насчет создания ссылки от .hg/hgrc, например, customhg/hgrc, чтобы получить версионность. Затем вам нужно создать некоторый хук, который копирует его обратно в .hg/hgrc - например, после каждого обновления.

...