Comment configurer Mercurial et hgwebdir sur IIS?

J’ai cherché partout des instructions correctes sur la façon de faire fonctionner hgwebdir sur IIS mais je n’ai pas trouvé beaucoup de valeur.

Il y a cette étape par étape sur le wiki Mercurial, mais ce n’est pas très bon. Il y a aussi ceci et cela , mais encore une fois, je ne peux pas trouver de bonnes étapes pour mener là où ils commencent.

J’ai juste dû installer une nouvelle instance Mercurial hier, voici les instructions mises à jour pour la version 1.7:

  1. Installez Mercurial (ces instructions ont été testées avec 1.7)
  2. Installez Python (pour Mercurial 1.7, vous devez utiliser la version x86 de Python 2.6.6)
  3. Vous devrez télécharger le fichier hgweb.cgi à partir de la source Mercurial. Vous pouvez télécharger le source en exécutant: hg clone https://www.mercurial-scm.org/repo/hg/
  4. Créez un dossier qui sera votre dossier d’application Web. Vous devrez copier trois choses dans ce dossier:

    • Le fichier hgweb.cgi
    • Le contenu de la bibliothèque.zip de votre dossier “C: \ Program Files \ Mercurial”
    • Le dossier Modèles de votre “C: \ Program Files \ Mercurial”
  5. Vous devrez vous assurer que Python est configuré dans IIS.

    • Activez CGI via les éléments suivants: Panneau de configuration -> Activer ou désactiver les fonctionnalités Windows -> Rôles -> Serveur Web (IIS) -> Ajouter des services de rôle -> Vérifier les CGI
    • Créez un nouveau site Web dans IIS et assurez-vous que le chemin d’access physique correspond au dossier que vous avez créé ci-dessus
    • Dans les mappages de gestionnaires du nouveau site Web, sélectionnez “Ajouter une mappe de script”. Entrez * .cgi pour le chemin de la demande, c: \ Python26 \ python.exe -u “% s” pour l’exécutable et Python pour le nom.
  6. Vous devrez également créer un fichier nommé “hgweb.config” avec un contenu similaire à celui ci-dessous. Le chemin dans le fichier doit être l’emplacement sur votre lecteur où vous souhaitez stocker les référentiels Mercurial:

    [collections]
    c: \ Mercurial \ repos = c: \ Mercurial \ repos

  7. Modifiez le fichier hgweb.cgi et modifiez la ligne où il définit le chemin d’access à votre hgweb.config à quelque chose comme ce qui suit (où que se trouve le fichier hgweb.config):

    config = “C: \ Mercurial \ hgweb.config”

  8. Maintenant, ouvrez un navigateur et accédez à http: //localhost/mercurial/hgweb.cgi (ou quel que soit le chemin d’URL approprié que vous avez configuré dans IIS) et vous devriez voir la page Référentiels Mercurial.

Aussi, consultez le blog de Jeremy Skinners . C’est un peu désuet, mais il y a quelques étapes supplémentaires comme la réécriture d’URL pour des URL plus propres.

Il semble que depuis la sortie de Mercurial 1.5.2, ces tutoriels ne fonctionnent pas correctement. D’une part, hgwebdir.cgi a été supprimé et est maintenant remplacé par hgweb.cgi.

Les instructions qui ont fonctionné le mieux pour moi sont sur eworldui.net :

http://www.eworldui.net/blog/post/2010/04/08/Setting-up-Mercurial-server-in-IIS7-using-a-ISAPI-module.aspx

Ces instructions sont destinées à IIS 7 ou supérieur. Si vous configurez ceci sur IIS 6, j’ai écrit des instructions similaires orientées vers Win2k3 et IIS 6.0:

http://partialclass.blogspot.com/2010/05/setting-up-mercurial-server-on-win2k3.html

MISE À JOUR: Peu de temps après avoir obtenu ce travail, j’ai appris que BitBucket avait modifié son système de tarification pour offrir un hébergement gratuit, illimité et privé: https://bitbucket.org/ . J’aurais opté pour ça quand je travaillais sur ce projet.

J’ai trouvé que le billet de blog de Vampire Basic était un bon début, mais il n’a pas été assez détaillé pour ce que j’étais après.

J’ai créé un article de blog en 4 parties qui vous permet de démarrer à partir de rien avec IIS, y compris l’intégration d’Active Directory, la configuration de privilèges de sécurité pour push / pull, la personnalisation du modèle, mais Il est vrai que Mercurial a été conçu pour être hébergé sur Linux / Apache:

http://www.endswithsaurus.com/2010/05/setting-up-and-configuring-mercurial-in.html

Voici ce que j’ai fait après avoir fait pas mal de recherches pour obtenir la configuration de hgwebdir.cgi sur IIS6. Il est basé sur les sites suivants:

Vous devrez installer les éléments suivants sur le serveur:

  • Mercurial (j’ai utilisé la version 1.5)
  • Python 2.6. La version de Python dépend de la version de Mercurial installée. Mercurial 1.5 utilise Python 2.6. Installez x86 même si vous exécutez x64.

Les étapes pour moi étaient:

  • Créez un répertoire pour le site Web. J’ai utilisé c: \ inetpub \ wwwroot \ hg.
  • Dans IIS, cliquez avec le bouton droit sur le dossier pour hg, sélectionnez Propriétés, sélectionnez l’onglet Répertoire de base.
  • Cliquez sur le bouton Créer une application. Définissez les permissions d’exécution sur “scripts”.
  • Toujours dans l’onglet Répertoire de base, cliquez sur le bouton Configuration. Dans la fenêtre “Configuration de l’application”, cliquez sur le bouton Ajouter pour append une extension d’application. Le fichier exécutable est c: \ Python26 \ python.exe -u “% s” “% s”. L’extension est .cgi. Définissez les “verbes” pour “limiter à: GET, HEAD, POST”. Vérifiez le moteur de script et vérifiez que le fichier existe.
  • Dans l’onglet Sécurité du répertoire, cliquez sur le bouton Modifier dans la section Authentification et contrôle d’access. Désélectionnez toutes les méthodes d’authentification et cochez la méthode “Authenication de base”. Définissez le domaine par défaut si vous le souhaitez sur votre domaine Active Directory.
  • Dans IIS, cliquez sur le dossier Extensions du service Web dans le panneau de gauche. Cliquez sur le lien “Ajouter une nouvelle extension de service Web”. Le nom de l’extension doit être Python, le fichier requirejs est c: \ Python26 \ python.exe -u “% s” “% s”. Assurez-vous que la nouvelle extension est “Autorisée”.

Le moment est venu de tester le fonctionnement de Python. Créez un fichier dans votre nouveau dossier HG appelé test.cgi. Collez le code python suivant:

 print 'Status: 200 OK' print 'Content-type: text/html' print print '' print '' print '

It works!

' print '' print ''

Ouvrez le navigateur sur votre site, par exemple, http: //localhost/hg/test.cgi

Vous devriez voir “Ça marche!” dans le navigateur.

Suivons le fonctionnement du hgwebdir.

  • Supprimer test.cgi
  • cloner le repo hg dans un nouveau répertoire: https://www.mercurial-scm.org/repo/hg/
  • copier hgwebdir.cgi dans votre répertoire web: c: \ inetpub \ wwwroot \ hg \ du repo hg cloné
  • Modifier le fichier et modifier
 application = hgwebdir('hgweb.config') wsgicgi.launch(application) 

à

 application = hgwebdir('c:\inetpub\wwwroot\hg\hgweb.config') wsgicgi.launch(application) 
  • Décompressez le fichier Library.zip dans le répertoire Mercurial, c: \ Program Files \ Mercurial \, dans votre répertoire Web, c: \ inetpub \ wwwroot \ hg \
  • Copiez le répertoire templates de c: \ Program Files \ Mercurial \ templates \ vers c: \ inetpub \ wwwroot \ hg \ templates \
  • Créez un fichier appelé hgweb.config dans votre répertoire Web.

C’est le bon moment pour le tester. Accédez à l’URL suivante dans le navigateur, http: //localhost/hg/hgwebdir.cgi

  • Modifiez hgweb.config et collez les éléments suivants:
 [collections] \\server\share$\Hg\ = \\server\share$\Hg\ [web] allow_push = * push_ssl = false 

Ce sont toutes mes préférences, par exemple nous avons nos repos dans les sous-répertoires à \\ server \ share $ \ Hg. L’application Web s’exécutera sous les permissions de l’utilisateur connecté via le navigateur, de sorte qu’ils auront besoin d’permissions de lecture / écriture sur le partage.

La dernière étape consiste à permettre de longues connexions qui peuvent se produire lorsque vous clonez un repo pour la première fois. Exécutez la commande suivante pour augmenter le délai d’attente à 50 minutes:

 cd \inetpub\AdminScripts\ cscript adsutil.vbs GET /W3SVC/CGITimeout cscript adsutil.vbs SET /W3SVC/CGITimeout 3000 

Utilisez mercurial pour cloner le repository mercurial:

 hg clone https://www.mercurial-scm.org/repo/hg/ 

Vous trouverez hgwebdir.cgi au premier niveau. Il devrait installer comme n’importe quel autre script cgi.

Je me suis battu avec cette configuration pour mercurial 1.7.2 depuis une semaine environ, je devais faire les choses légèrement différemment que les articles ci-dessus pour le faire fonctionner.

Poster ici parce que Google a continué à me ramener ici ….

Instructions complètes affichées ici

J’ai suivi une combinaison de ces instructions et celles – ci (dans la source)

Les principales différences sont que je devais faire l’ installation “pure python” de mercurial, sinon il se serait plaint de l’absence de DLL, et j’ai trouvé important d’utiliser les “installateurs python” pour pywin et isapi-wsgi. (peut-être est-ce évident pour les développeurs de python expérimentés, mais je suis un débutant en python, donc c’était une nouvelle pour moi)

J’espère que cela aide quelqu’un et je ne fais pas que des choses (je pourrais être, comme je l’ai dit, python newbie)

Le livre rouge HG contient des instructions générales bien meilleures que celles que j’ai vues ailleurs. Ils ne sont pas spécifiques à IIS, mais ils sont très bons:

http://hgbook.red-bean.com/read/collaborating-with-other-people.html#sec:collab:cgi

Je courais dans une erreur de type “… impossible de charger le module …” et après quelques lectures, la clé pour moi était d’ignorer le fichier Library.zip dans le dossier Mercurial, et d’utiliser plutôt celui de C: \ Dossier Program Files (x86) \ TortoiseHg.

Ce conseil que j’ai trouvé comme # 6 dans ce guide:

http://www.endswithsaurus.com/2010/05/setting-up-and-configuring-mercurial-in.html

J’espère que ça aide quelqu’un …

Vous pouvez essayer HgLab . Ce n’est pas exactement hgwebdir; c’est plutôt une implémentation Mercurial purement gérée avec un serveur push and pull et un navigateur de référentiels.