Доступ к mercurial репозиторию через http

Ща я расскажу как раздавать mercurial репозиторий через тырнет.
Итак, мы имеем:
- nginx в роли веб-сервера, через который и будем раздавать репозиторий
- mercurial в роли mercurial
- flup в роли клея, с помощью которого мы замутим связь nginx и mercurial
- желание сделать всё с участием минимума скриптов и красиво, так чтобы веб-репозитории располагались на поддомене hg домена проекта.

Далее следовал бы увлекательный рассказ о том, как я читал маны, общался в конференциях, отлаживал бы скрипты, если б у меня тока было желание и время это всё писать ) А так как его нет, то описываю, что получилось в итоге.

Итак, для каждого проекта я добавил в конфиг nginx записи аналогичные следующей:


server {
# это поддомен репозитария
server_name .hg.pybb.zz;
# это обычные настройки для mod_fastcgi
include /etc/nginx/fastcgi.conf;
# а это сокет, на котором слушает наш скрипт-прослойка
location / {
fastcgi_pass unix:/var/run/www/hgweb.sock;
}
}


А вот и скрипт, который будет слушать с “другой” стороны сокета )


#!/usr/bin/env python

import cgitb
cgitb.enable()

from mercurial.hgweb.hgweb_mod import hgweb
from mercurial.hgweb.request import wsgiapplication
from flup.server.fcgi import WSGIServer

config = {'hg.dumpz.zz': '/web/dumpz.org/web_site',
'hg.pybb.zz': '/web/pybb.org/web_site'}

class hgmid(object):
def __init__(self, app):
self.app = app

def __call__(self, environ, start_response):
server_name = environ['SERVER_NAME']
if server_name in config:
self.app.destmaker = lambda: hgweb(config[server_name])
return self.app(environ, start_response)
else:
start_response('404 Not Found', [])
return ['Unknown domain']

WSGIServer(hgmid(wsgiapplication(lambda: None)),
bindAddress='/var/run/www/hgweb.sock', umask=0).run()

Тут надо бы какие-то умные поясняющие вещи написать, но тоже как-то язык не поворачивается ) Надеюсь, завтра повернётся ) Могу лишь заметить, что в переменной config задано соотвествие домена и пути к соотвествующему репозиторию. А hgmid - это middleware, которое настраивает wsgi-приложение на использование нужного репозитория.
Add post to:   Google Slashdot Yahoo Digg Technorati Delicious Bobrdobr.ru Newsland.ru Smi2.ru Rumarkz.ru Vaau.ru Memori.ru Rucity.com Moemesto.ru News2.ru Mister-Wong.ru Yandex.ru Myscoop.ru 100zakladok.ru
Make comment

Comments

  • Просто офигетительно, давно искал как бы это правильно сделать. Сегодня попробую. :-)

  • Вопрос конечно не много не в тему, но как выкачать pybb ?

  • http://hg.pybb.org ) Ну и ещё есть http://trac.pybb.org ) Тока хочу предупредить что проект уже как месяц заморожен. Надеюсь через пару недель приступить к добиванию )

  • Это всё замечательно, но не уж-то ли надо тащить по одному файлу :), может всё таки svn :), я бы с удовольствием выступил в качестве тестера данного форума.

  • Пардон, я не заметил твой последний комментарий ) Про “тащить по одному файлу” не совсем понял )

    Вот отсюда можно вытянуть все исходники http://hg.pybb.org. Это репозитарий mercurial. К сожалению, пока бетатестировать особо нечего т.к. не реализован ряд важных базовых вещей: - система разграничения прав и ещё несколько штук, про которые я забыл за давностью последнего копания в коде )

comment submission form

Required. 30 chars of fewer.

Required.

captcha image Please, enter symbols, which you see on the image