Mercurial Server sur Apache / Windows

Je recherche des informations pour configurer un serveur Mercurial pour Windows (7 ou XP) avec un Apache (xampp si cela est utile pour le savoir) avec le modèle Push, comme dans cette question mais mon équipe est composée de 5 à 8 (non-solvables) des gars qui travaillent chacun dans des endroits séparés, donc je ne pense pas que la solution Bitbucket ou toute autre solution non-privée existe.

Je pense que ce post ferait l’affaire, mais je n’ai rien vécu avec cgi auparavant,

Quelqu’un a-t-il déjà fait ça? Où puis-je trouver une explication plus détaillée? Merci d’avance

[MODIFIER]

Je reçois maintenant cette erreur: Fin des en-têtes de script prématurés: hgwebdir.cgi

L’erreur de journal indique “aucun module nommé mercurial

c’est mon fichier 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) 

J’ai utilisé les instructions HgWebDir :

Voici mon morceau httpd.conf pour les sites mercurial (légèrement modifié):

  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)  Order allow,deny Allow from all AllowOverride All Options ExecCGI AddHandler cgi-script .cgi   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   AuthType Digest AuthName "hg.example.com" AuthDigestProvider file AuthUserFile c:/apache_sites/hg/hgusers AuthGroupFile c:/apache_sites/hg/hggroup AuthDigestDomain /public/  Require group developer   LogLevel debug ErrorLog "c:/apache/logs/hg-error.log" CustomLog "c:/apache/logs/hg-access.log" combined LogLevel debug  # vim:se ft=apache: 

J’ai aussi dû allumer quelques modules pour Auth Digest, etc.

Je mets le fichier hgwebdir.cgi à la racine du dossier public et du dossier privé et je mets juste chacun de mes repos dans le sous-dossier repos sous les dossiers appropriés.

L’authentification Apache s’est chargée de mon autorisation.

Ensuite, je mets juste un fichier hgweb.config dans les mêmes endroits comme ceci:

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

Question mise à jour

Les paquets mercuriels doivent être sur le PYTHON_PATH

Cette réponse donne plus de détails.

La réponse de John Weldons est correcte, je voulais juste donner un petit détail sur le large éventail de possibilités qui pourraient vous intéresser.

hgwebdir est juste une application wsgi , vous pouvez donc l’exécuter comme n’importe quelle autre application wsgi en utilisant mod_wsgi dans apache2. mod_wsgi fonctionnera également mieux que cgi car le chargement de l’interpréteur python se fait une fois plutôt que pour chaque requête.

En outre, en tant qu’application wsgi, vous pouvez également envelopper un middleware ou le suspendre à une autre URL d’un site plus grand, etc.

Par exemple, disons que vous utilisez trac (une autre application wsgi) et que vous souhaitez partager le schéma d’autorisation entre trac et hgwebdir, vous pouvez les placer tous les deux derrière un middleware d’autorisation tel que repoze.qui par exemple.

Enfin, puisque python paste permet de créer des applications Web à partir de pièces plus petites, j’ai écrit cet extrait de code pour démarrer hgwebdir via 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) 

Et la partie correspondante du fichier de configuration pour le charger …

 [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 

J’ai trouvé cet article particulièrement utile: http://blog.riverside-software.fr/2011/02/quick-and-easy-setup-of-mercurial.html .

C’est simple, au point, et je me suis mis au travail en moins de 15 minutes.