Я предоставляю доступ ко многим ртутным репозиториям с помощью hgweb, предоставляя их в виде коллекции:
[collections]
/home/me = /home/me/projects
Это обслуживает их на localhost/projects
У меня есть около 30 репозиториев в этом месте, в дереве исходного кода с большим количеством других проектов, не управляемых ртутью.
hgweb действительно отвечает медленно; требуется около 30 секунд, чтобы предоставить список на http://localhost/, и около 30 секунд, чтобы открыть проект, что делает его больно использовать это для обмена.
Как я могу настроить это, чтобы сделать его быстрее?
Я работаю на OSX, если это имеет значение.
Ответ 1 · рейтинг 5 · Niall C.
Насколько я знаю, hgweb будет сканировать все подкаталоги записи [collections] в своем файле конфигурации. Поскольку у вас там много каталогов, отличных от Mercurial, он должен сканировать каждый подкаталог каждого из них. Напротив, он может остановить сканирование на верхнем уровне дерева каталогов, содержащего репозиторий Mercurial, потому что он увидит там каталог .hg.
Если вы используете более новый Mercurial (похоже, после 1.1), попробуйте изменить hgweb.config, чтобы вместо этого использовать раздел [paths], и предоставить явные записи для каждого из репозиториев Mercurial.
Ответ 3 · рейтинг 1 · Chris R
Следуя очень полезному ответу Найла выше, я понял, что мне нужен инструмент для поддержки этого раздела [пути]. В итоге я остановился на этом (который использует configobj М. Фурда.
#!/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 никогда не устареет.
Ответ 4 · рейтинг 1 · jwsample
Проблема, вероятно, заключается в том, что сервер рекурсивно ищет репозитории во время каждого запроса. Похоже, у вас там довольно большой каталог, так что это имеет смысл.
Эта нотация будет работать с предпочтительным атрибутом [paths], но я не уверен, поможет ли она атрибуту [collections]. Попробуйте изменить на
[collections]
/home/me = /home/me/projects/*
поэтому он будет искать только на один уровень ниже.
Подробнее об этой проблеме читайте здесь: https://www.mercurial-scm.org/wiki/HgWebDirStepByStep
Если это не сработает, то обязательно сработает, если вы измените на [paths] и будете использовать нотацию *.