2010-08-10 18 views
6

Ich diene den Zugang zu vielen Mercurial Repositories hgweb verwenden, sie als eine Sammlung bietet:Warum ist mein hgweb Server so langsam?

[collections] 
/home/me = /home/me/projects 

Dies dient sie auf localhost nach oben/Projekte

Ich habe rund 30 Repositories an dieser Stelle, in ein Source-Tree mit einer großen Anzahl anderer, nicht-quecksilberorientierter Projekte.

hgweb ist wirklich langsam zu reagieren; Es dauert etwa 30 Sekunden, um einen Eintrag unter http://localhost/ bereitzustellen, und etwa 30 Sekunden, um ein Projekt zu öffnen, was die Verwendung für gemeinsame Zwecke erschwert.

Wie kann ich dies tun, um es schneller zu machen?

Ich laufe auf OSX, wenn es einen Unterschied macht.

+0

Haben Sie versucht stattdessen 'hgwebdir' verwenden? – Amber

Antwort

5

AFAIK, hgweb scannt alle Unterverzeichnisse des [collections] Eintrags in seiner Konfigurationsdatei. Da Sie viele Nicht-Mercurial-Verzeichnisse dort haben, muss es ein Untersuchen jedes Unterverzeichnisses von jedem von ihnen tun. Im Gegensatz dazu kann das Scannen auf der obersten Ebene einer Verzeichnisbaumstruktur gestoppt werden, die ein Mercurial-Repository enthält, da dort das Verzeichnis .hg angezeigt wird.

Wenn Sie ein neueres Mercurial verwenden (nach 1.1 sieht es so aus), versuchen Sie stattdessen hgweb.config zu ändern, um einen Abschnitt [paths] zu verwenden, und geben Sie explizite Einträge für jedes der Mercurial-Repositorys ein.

+1

Das funktioniert wie ein Zauber. Ich werde meine eigene Antwort auf diese Frage hinzufügen, die ein Skript enthält, das diesen Abschnitt [Pfade] verwaltet. –

1

Das Problem ist wahrscheinlich der Server rekursiv für Repos bei jeder Anfrage suchen. Klingt so, als hättest du ein ziemlich großes Verzeichnis, also macht das Sinn.

Diese Notation funktioniert mit dem bevorzugten [paths] Attribut, aber ich bin mir nicht sicher ob es dem [collections] Attribut helfen wird. Versuchen Sie, zu

[collections] 
/home/me = /home/me/projects/* 

so ändern, dass es nur eine Ebene nach unten suchen wird.

prüfen, um mehr über das Thema: https://www.mercurial-scm.org/wiki/HgWebDirStepByStep

Wenn das nicht funktioniert es auf jeden Fall, wenn Sie die * Notation [paths] und verwenden ändern.

1

Nachdem ich Nialls sehr hilfreiche Antwort oben gelesen hatte, erkannte ich, dass ich ein Werkzeug brauchte, um diesen Abschnitt [Pfade] zu pflegen. Ich landete mit diesem gehen (was configobj von M. Foord verwendet.

#!/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() 

Dieses Skript von OS X-Äquivalent von cron alle 15 Minuten ausgeführt wird und stellt sicher, dass meine hgweb nie veralten wird.

7

Als Open-Source-Alternative können Sie RhodeCode http://rhodecode.com verwenden es ist hgweb Ersatz vollständig in Python geschrieben.

  • hat seine eigene Middleware ist jede Anfrage Quecksilber-Protokoll Anforderung verarbeiten kann unwahrscheinlich + Gewinde Leistung protokolliert und authentifiziert werden
  • vollständige Berechtigungen pro Projekt Lesen/Schreiben/admin Zugriff auf hgweb auch auf Quecksilber-Anfrage
  • Mako-Vorlagen können Sie Aussehen und Verhalten der Anwendung anpassen.
  • Diffs Annotationen und Quellcode alle von Pygmente gefärbt.
  • Merkurial Branch Graph und Yui-Flot Powered Graphs
  • Admin-Schnittstelle für die Durchführung von Benutzer-/Berechtigungsverwaltung sowie Repository-Management.
  • Zusätzliche Einstellungen für Quecksilber-Bahn, (Haken von Admin-Panel bearbeitet werden!) Auch verwalten Pfade, Archivierung, Remote-Nachrichten
  • Backup-Skripte kann Backup ganzer App tun und es über scp an den gewünschten Ort
  • Setup Projektbeschreibung senden und info innerhalb db für einfache, nicht Dateisystem-Operationen
  • Voller Suchtext auf Repository-Codes
  • hinzugefügt Cache mit Ungültigkeitserklärung auf Push/Repo-Management für hohe Leistung und immer up to Date-Daten.
  • rss/Atom-Feeds, Gravatar Unterstützung
  • basierend auf Pylonen 1.0/sqlalchemy