Mercurial Server на Apache / Windows - PullRequest
5 голосов
/ 09 февраля 2010

Я ищу информацию для настройки Mercurial Server для Windows (7 или XP) с Apache (xampp, если это полезно знать) с моделью Push, как в этот вопрос но моя команда состоит из 5-8 (неплатежеспособных) парней, каждый из которых работает в разных местах, поэтому я не думаю, что это решение для битового сегмента или какое-либо другое не частное репо.

Я думаю этот пост справился бы с задачей, но я ничего не испытывал с cgi,

Кто-нибудь делал это раньше? где я могу найти более подробное объяснение? заранее спасибо

[РЕДАКТИРОВАТЬ]

Теперь я получаю эту ошибку: преждевременный конец заголовков скриптов: hgwebdir.cgi

В сообщении об ошибке указано, что «нет модуля с именем mercurial»

это мой файл hgwebdir.cgi

#!c:/python24/python.exe
#
# An example CGI script to export multiple hgweb repos, edit as necessary

# adjust python path if not a system-wide install:
import sys
sys.path.insert(0, "c:/mercurial_library")

# enable importing on demand to reduce startup time
from mercurial import demandimport; demandimport.enable()

# Uncomment to send python tracebacks to the browser if an error occurs:
#import cgitb
#cgitb.enable()

# If you'd like to serve pages with UTF-8 instead of your default
# locale charset, you can do so by uncommenting the following lines.
# Note that this will cause your .hgrc files to be interpreted in
# UTF-8 and all your repo files to be displayed using UTF-8.
#
#import os
#os.environ["HGENCODING"] = "UTF-8"

from mercurial.hgweb.hgwebdir_mod import hgwebdir
import mercurial.hgweb.wsgicgi as wsgicgi
application = hgwebdir('hgweb.config')
wsgicgi.launch(application)

Ответы [ 3 ]

9 голосов
/ 10 февраля 2010

Я использовал инструкции HgWebDir :

Вот мой кусок httpd.conf для ртутных сайтов (слегка отредактированный):

<VirtualHost *:88>
    ServerName hg.example.com
    DocumentRoot c:/apache_sites/hg
    RewriteEngine on

    RewriteRule ^/$ /public [R]
    RewriteRule ^/public(.*) /public/hgwebdir.cgi$1 [L]
    RewriteRule ^/private(.*) /private/hgwebdir.cgi$1 [L]

    # mod_alias alternative (pretty url's)
    <Directory c:/apache_sites/hg >
        Order allow,deny
        Allow from all
        AllowOverride All
        Options ExecCGI
        AddHandler cgi-script .cgi
    </Directory>
    <Location /private/>
        AuthType Digest
        AuthName "hg.example.com"
        AuthDigestProvider file
        AuthUserFile c:/apache_sites/hg/hgusers
        AuthGroupFile c:/apache_sites/hg/hggroup
        AuthDigestDomain /private/
        Require group owner
    </Location>
    <Location /public/>
        AuthType Digest
        AuthName "hg.example.com"
        AuthDigestProvider file
        AuthUserFile c:/apache_sites/hg/hgusers
        AuthGroupFile c:/apache_sites/hg/hggroup
        AuthDigestDomain /public/
        <LimitExcept GET>
            Require group developer
        </LimitExcept>
    </Location>

    LogLevel debug
    ErrorLog "c:/apache/logs/hg-error.log"
    CustomLog "c:/apache/logs/hg-access.log" combined
    LogLevel debug
</VirtualHost>
# vim:se ft=apache:

Мне также пришлось включить несколько модулей для Auth Digest и т. Д.

Я помещаю hgwebdir.cgi в корень публичных и личных папок и просто помещаю каждое из моих репозиториев hg в подпапку репозитория под соответствующими папками.

Проверка подлинности Apache позаботилась о моей авторизации.

Затем я просто поместил файл hgweb.config в те же места, как это:

[collections]
repos = repos

[web]
allow_archive = bz2 gz zip
style = gitweb
baseurl = /public

Обновленный вопрос

Ртутные пакеты должны быть на PYTHON_PATH

Этот ответ дает более подробную информацию.

8 голосов
/ 11 февраля 2010

Ответ Джона Уэлдона верен, я просто хотел предоставить небольшую информацию о широком спектре возможностей, которые могут вас заинтересовать.

hgwebdir - это просто wsgi приложение, поэтому вы можете запустить его как любое другое приложение wsgi, используя mod_wsgi в apache2. mod_wsgi также будет работать лучше, чем cgi, поскольку накладные расходы на загрузку интерпретатора python выполняются один раз, а не для каждого запроса.

Кроме того, благодаря тому, что приложение wsgi означает, что вы также можете обернуть его в middleware или повесить его на другой URL более крупного веб-сайта и т. Д ...

Например, допустим, вы используете trac (другое приложение wsgi) и хотите разделить схему авторизации между trac и hgwebdir, это можно сделать, поместив их обоих за промежуточное ПО авторизации, например repoze.who например.

Наконец, поскольку python paste позволяет создавать веб-приложения из небольших кусков, я написал этот фрагмент кода, чтобы запустить hgwebdir с помощью paste.

"""
Wsgi wrapper of hgweb that is paste compatible
"""
import os
from mercurial import demandimport
demandimport.enable()
from mercurial.hgweb.hgwebdir_mod import hgwebdir

CONFIG_FILE_KEY = "hgwebdir.config"

def hgweb_paste(global_config, **local_conf):
    """
    looking for a config file setting in global or local
    """
    cfg = global_config
    cfg.update(local_conf)
    config_file = cfg.get(CONFIG_FILE_KEY)
    if config_file and os.path.exists(config_file):
        return hgwebdir(config_file)
    else:
        raise KeyError, "%s not set or %s does not exist" % (CONFIG_FILE_KEY,config_file)

И соответствующая часть файла конфигурации для его загрузки ...

[server:main]
use = egg:Paste#http
host = 0.0.0.0
port = 6543

[app:main]
use = egg:hg.paste#hgweb
hgwebdir.config = %(here)s/hg.config
0 голосов
/ 15 июня 2012

Я нашел этот пост особенно полезным: http://blog.riverside -software.fr / 2011/02 / quick-and-easy-setup-of-mercurial.html .

Все просто, к тому же, и я получил работу менее чем за 15 минут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...