6

hgweb を使用して多くの mercurial リポジトリへのアクセスを提供し、それらをコレクションとして提供しています。

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

これにより、localhost/projects でそれらが提供されます

私はその場所に約 30 のリポジトリを持っており、ソース ツリーには、水銀で管理されていない他のかなりの数のプロジェクトがあります。

hgweb は応答が非常に遅いです。http://localhost/でリストを提供するのに約 30 秒かかり、プロジェクトを開くのに約 30 秒かかるため、これを共有目的で使用するのは苦痛です。

これを調整して高速化するにはどうすればよいですか?

違いがあれば、OSXで実行しています。

4

4 に答える 4

7

オープンソースの代替手段として、RhodeCode http://rhodecode.comを使用できます。これは完全に Python で書かれた hgweb の代替品です。

  • Mercurial プロトコル要求を処理する独自のミドルウェアがある 各要求をログに記録して認証することができます + スレッド化されたパフォーマンスは hgweb の可能性が低い
  • Mercurial リクエストでも、プロジェクトごとの読み取り/書き込み/管理者アクセスの完全なアクセス許可
  • mako テンプレートを使用すると、アプリケーションのルック アンド フィールをカスタマイズできます。
  • すべてピグメントで色付けされた注釈とソースコードを比較します。
  • mercurial ブランチ グラフと yui-flot を利用したグラフ
  • ユーザー/権限管理とリポジトリ管理を実行するための管理インターフェース。
  • Mercurial Web の追加設定 (管理パネルから編集可能なフック!) もパス、アーカイブ、リモート メッセージを管理します
  • バックアップ スクリプトは、アプリ全体のバックアップを実行し、scp 経由で目的の場所に送信できます
  • ファイルシステム以外の操作を簡単にするために、組み込みのデータベース内にプロジェクトの説明と情報をセットアップします
  • リポジトリ コードの完全な検索テキスト
  • 高いパフォーマンスと常に最新のデータを得るために、プッシュ/レポ管理の無効化を伴うキャッシュを追加しました。
  • rss/atom フィード、gravatar サポート
  • pylons 1.0 / sqlalchemy に基づく
于 2010-08-20T19:37:42.297 に答える
5

AFAIKは、構成ファイル内のエントリhgwebのすべてのサブディレクトリをスキャンします。[collections]そこにはMercurial以外のディレクトリがたくさんあるので、それぞれのサブディレクトリをスキャンする必要があります。対照的に、Mercurialリポジトリを含むディレクトリツリーのトップレベルではスキャンを停止できます。これは、.hgそこにディレクトリが表示されるためです。

新しいMercurialを使用している場合(1.1以降は次のようになります)、代わりにセクションhgweb.configを使用するように変更してみ[paths]て、Mercurialリポジトリごとに明示的なエントリを提供してください。

于 2010-08-10T23:25:18.947 に答える
1

問題はおそらく、サーバーがすべてのリクエスト中にリポジトリを再帰的に検索することです。あなたはそこにかなり大きなディレクトリを持っているように聞こえるので、これは理にかなっています。

この表記はpreferred[paths]属性で機能しますが、属性に役立つかどうかはわかりません[collections]。に変更してみてください

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

したがって、1レベル下のみを検索します。

この問題の詳細については、こちらを確認してください: https ://www.mercurial-scm.org/wiki/HgWebDirStepByStep

それがうまくいかない場合は、表記を変更し[paths]て使用すると間違いなく機能します。*

于 2010-08-10T23:25:46.747 に答える
1

上記の Niall の非常に役立つ回答をフォローアップすると、この [paths] セクションを維持するためのツールが必要であることに気付きました。私はこれに行き着きました(M.Foordによる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()

このスクリプトは、OS X の cron に相当するものによって 15 分ごとに実行され、hgweb が古くならないようにします。

于 2010-08-12T02:20:32.910 に答える