Важная вещь помнить вот состоит в том, что методы Ruby могут быть (ООН), определенная в любой точке, таким образом, для интеллектуального разрешения неоднозначности каждое присвоение должно будет выполнить код, чтобы проверить, существует ли метод с присвоенным - для именования во время присвоения.
Считаются ли эти расширения первоклассными гражданами командой разработчиков Mercurial и, следовательно, частью общего подхода Mercurial к DVCS?
Да, хотя мы обычно не будем рекомендовать их использование новым пользователям. , они очень полезны для продвинутого использования. Я думаю, что у всех в команде разработчиков включены расширения (по крайней мере, mq, patchbomb, а иногда и запись).
Расширения, принятые в hgext /
, проверяются до включения, и мы обычно требуем от них предоставления тестов . Но они часто принадлежат сторонним участникам и не обновляются командой разработчиков, за исключением изменений API в ядре hg.
Почему они реализованы вне функций по умолчанию и отключены по умолчанию?
] Обычно мы думаем, что hg должен оставаться простым, и добавление дополнительных команд может запутать пользователей (например, если у вас простой рабочий процесс, вам не нужно изучать mq). Но если команда считается полезной для большинства пользователей, ее можно перенести из расширения в ядро (это было в случае bisect, и это было в случае функциональности subrepo).
Почти сразу после публикации я узнал о следующей команде hg:
hg help extensions
Она содержала некоторую информацию, которая, как мне кажется, недоступна в справочной документации Mercurial:
Расширения не загружаются по умолчанию по разным причинам: они могут увеличить нагрузку на запуск; они могут быть предназначены только для расширенного использования; они могут предоставлять потенциально опасные возможности (например, позволять вам уничтожать или изменять историю); они могут быть не готовы к прайм-тайм; или они могут изменить обычное поведение стандартного Mercurial. Таким образом, пользователь должен активировать расширения по мере необходимости.
Это помогает ответить на часть моего вопроса.