Я подаю доступ ко многим подвижным репозиториям с помощью hgweb, если их как набор:
[collections]
/home/me = /home/me/projects
Это подает их в localhost/projects
У меня есть приблизительно 30 репозиториев в том местоположении, в исходном дереве с достаточным количеством другого, non-mercurial-managed проекты.
hgweb действительно не спешит отвечать; требуется приблизительно 30 секунд для обеспечения списка по http://localhost/, и приблизительно 30 секунд для открытия проекта, делая это болезненным для использования этого для совместного использования целей.
Как я могу настроить это для создания его быстрее?
Я работаю на OSX, если это имеет значение.
AFAIK, hgweb
будет сканировать все подкаталоги записи [collections]
в своем конфигурационном файле. Поскольку у вас там много немеркурианских каталогов, ему придется просканировать каждый подкаталог каждого из них. Напротив, он может прекратить сканирование на верхнем уровне дерева каталогов, содержащего репозиторий Mercurial, поскольку увидит там каталог .hg
.
Если вы используете более новую версию Mercurial (похоже, после 1.1), попробуйте изменить hgweb.config
, чтобы вместо него использовать раздел [paths]
, и обеспечить явные записи для каждого из репозиториев Mercurial.
В продолжение очень полезного ответа Niall, приведенного выше, я понял, что мне нужен инструмент для поддержания этого раздела [paths]. В итоге я остановился на этом (который использует configobj от M. Foord.
#!/usr/bin/env python
from __future__ import print_function
import os
from configobj import ConfigObj
hgweb_path = os.path.join(os.path.expanduser("~"), "Library", "Preferences", "hgweb.config")
projects = os.path.join(os.path.expanduser("~"), "projects")
config = ConfigObj(hgweb_path)
paths = []
def add_mercurial(arg, dirname, names):
if '.hg' in names:
paths.append(dirname[len(projects) + 1:])
os.path.walk(projects, add_mercurial, None)
config['paths'] = {}
for path in paths:
config['paths']["projects/" + path] = os.path.join(projects, path)
config.write()
Этот скрипт запускается эквивалентом cron в OS X каждые 15 минут и гарантирует, что мой hgweb никогда не устареет.
В качестве альтернативы с открытым исходным кодом вы можете использовать RhodeCode http://rhodecode.com , это замена hgweb, полностью написанная на Python.
Проблема, вероятно, в том, что сервер рекурсивно ищет репозитории при каждом запросе. Похоже, что у вас довольно большой каталог, так что это имеет смысл.
Эта нотация будет работать с предпочтительным атрибутом [paths]
, но я не уверен, поможет ли она атрибуту [collections]
. Попробуйте изменить на
[collections]
/home/me = /home/me/projects/*
чтобы поиск осуществлялся только на один уровень вниз.
Подробнее о проблеме читайте здесь: https://www.mercurial-scm.org/wiki/HgWebDirStepByStep
Если это не сработает, то точно поможет, если вы измените [paths]
и будете использовать обозначение *
.