CREA TU PROPIO REPOSITORIO [MERCURIAL]
Prólogo
Tengo la total certeza, de que la mayoría de la gente que pulula por aquí, o son DEV’s o son admin de server con emuladores, y casi seguro que muchos tienen sus repos en server ajenos por no saber como hacerse uno, o cuando menos les gustaría tener uno donde guardar de manera privada sus desarrollos.
Que hubiese dado yo, por haber encontrado en mis búsquedas a los largo y ancho de esta red, con alguien que me hubiese explicado como hacerlo, pero no, solo he encontrado un montón de especialistas en el “copy/paste”, que no son capaces de responder a las dudas o problemas que le surge a la gente, cuando llevan a cabo sus “copy/paste”, con ello solo demuestran su arrogancia, y en la ignorarían en la que se columpian.
Que suerte vas tener “mamón” que has dado con el sitio y la persona que te va a enseñar como hacerlo, (ya me hubiese gustado tener esa suerte).
Introducción
En este tutorial voy ha explicar como crear un repositorio de Mercurial HG con soporte SSL en un servidor privado, direccionado a la misma raíz del servidor WEB que tengamos del tipo Apache o similares (con el mod_ssl instalado), ejemplo:
(https://www.tuwebsite.com/hg/tu_repositorio)
Y no en uno virtual del tipo
(https://www.hg.tuwebsite.com/tu_repositorio)
Ya que este ultimo es más complicado direccionar si tienes IP dinámica y lo quieres hacer público con un servicio del tipo Dyndns, pues dichos servicios, cuando son gratuitos, no te permiten direccionar subdominios a no ser que pases por caja. Aclarado esto, he de decir que si lo quieres en uno virtual (subdominio), la mayoría de los “tutos” que hay en la red explican llegado al apartado de la configuración de Apache, como hacerlo, (y a lo demás no le prestes caso si no quieres liarte) no difiere mucho de lo que vamos a hacer. Dicho esto, verás que en este tutorial explico como hacerlo en un CentOS 5.5, pero hacerlo en un Debían o en un Open Suse lleva el mismo proceso, solo tienes que cambiar ciertos comandos por los correspondientes a tu "distro".
(https://www.tuwebsite.com/hg/tu_repositorio)
Y no en uno virtual del tipo
(https://www.hg.tuwebsite.com/tu_repositorio)
Ya que este ultimo es más complicado direccionar si tienes IP dinámica y lo quieres hacer público con un servicio del tipo Dyndns, pues dichos servicios, cuando son gratuitos, no te permiten direccionar subdominios a no ser que pases por caja. Aclarado esto, he de decir que si lo quieres en uno virtual (subdominio), la mayoría de los “tutos” que hay en la red explican llegado al apartado de la configuración de Apache, como hacerlo, (y a lo demás no le prestes caso si no quieres liarte) no difiere mucho de lo que vamos a hacer. Dicho esto, verás que en este tutorial explico como hacerlo en un CentOS 5.5, pero hacerlo en un Debían o en un Open Suse lleva el mismo proceso, solo tienes que cambiar ciertos comandos por los correspondientes a tu "distro".
Para levantarlo he usado los siguientes paquetes:
Python 2.7.2
SQLite3
PyPi Setup Tools 0.6c11
mod_wsgi 3.3
Docutils 0.8.1
Mercurial 2.0
SQLite3
PyPi Setup Tools 0.6c11
mod_wsgi 3.3
Docutils 0.8.1
Mercurial 2.0
En primer lugar descargar todos los archivos mencionados anteriormente en la carpeta /usr/local/src
cd /usr/local/src
wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz
wget http://www.sqlite.org/sqlite-autoconf-3070800.tar.gz
wget http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg
wget http://modwsgi.googlecode.com/files/mod_wsgi-3.3.tar.gz
wget http://prdownloads.sourceforge.net/docutils/docutils-0.8.1.tar.gz
wget http://mercurial.selenic.com/release/mercurial-2.0.tar.gz
wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz
wget http://www.sqlite.org/sqlite-autoconf-3070800.tar.gz
wget http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg
wget http://modwsgi.googlecode.com/files/mod_wsgi-3.3.tar.gz
wget http://prdownloads.sourceforge.net/docutils/docutils-0.8.1.tar.gz
wget http://mercurial.selenic.com/release/mercurial-2.0.tar.gz
Los descomprimimos u_n_o por u_n_o:
tar zxf Python-2.7.2.tgz
tar zxf sqlite-autoconf-3070800.tar.gz
tar zxf mod_wsgi-3.3.tar.gz
tar zxf docutils-0.8.1.tar.gz
tar zxf mercurial-2.0.tar.gz
tar zxf sqlite-autoconf-3070800.tar.gz
tar zxf mod_wsgi-3.3.tar.gz
tar zxf docutils-0.8.1.tar.gz
tar zxf mercurial-2.0.tar.gz
Instalamos dependencias:
Es posible que necesites algunas dependencias, y otras ya las tengas, así que no te preocupes, si ya las tienes, no las instalará, pero por si acaso…
yum -y install gcc gdbm-devel readline-devel ncurses-devel zlib-devel bzip2-devel sqlite-devel db4-devel openssl-devel tk-devel bluez-libs-devel make
Instalación de los paquetes
....oooO.................
.....(....)... Oooo.......
....\..(......(....).....
......\_)......)../.......
..............(_/........
.....(....)... Oooo.......
....\..(......(....).....
......\_)......)../.......
..............(_/........
Recuerda que las fuentes las tenemos en /usr/local/src
SQLite3:
Montar e instalar:
cd sqlite-autoconf-3070800
./configure
make
make install
cd ..
./configure
make
make install
cd ..
....oooO.................
.....(....)... Oooo.......
....\..(......(....).....
......\_)......)../.......
..............(_/........
.....(....)... Oooo.......
....\..(......(....).....
......\_)......)../.......
..............(_/........
Python:
CentOS 5.5 viene con Python 2.4, que va bien con antiguas revisiones de Mercurial, pero no para la 2.0, con esta, hay que usar Python 2.7.
Ahora explicaré cómo instalar Python 2.7 junto al 2,4 existente (seria un lio desinstalar este ultimo debido a la enorme cantidad de dependencias que tiene - yum, por ejemplo). En cualquiera de las otras “distro” es posible que lo tengas así que te aconsejo si es así, que siguas estas instrucciones y no lo desinstales si no quieres verte en un lio de dependencias como te he dicho.
Montar e instalar:
cd Python-2.7.2
./configure --prefix=/opt/python2.7.2 --with-threads --enable-shared
make
make install
cd ..
./configure --prefix=/opt/python2.7.2 --with-threads --enable-shared
make
make install
cd ..
Dependiendo de tu “distro” (en mi caso me ocurrió), casi al final de la instalación es posible que leas este mensaje:
Python build finished, but the necessary bits to build these modules were not found:
bsddb185 dl imageop
sunaudiodev
bsddb185 dl imageop
sunaudiodev
No te preocupes, Python ha sido montado con éxito, ese mensaje dice que esos módulos no serán soportados (porque no los tienes), pero para nuestros propósitos (y además de que no corrompa nada por tenerlos), son innecesarios e obsoletos.
Seguidamente necesitamos decirle al ld donde encontrar nuestras librerias compartidas de Python 2.7:
touch /etc/ld.so.conf.d/opt-python2.7.2.conf
echo "/opt/python2.7.2/lib/" >> /etc/ld.so.conf.d/opt-python2.7.2.conf
ldconfig
echo "/opt/python2.7.2/lib/" >> /etc/ld.so.conf.d/opt-python2.7.2.conf
ldconfig
Ahora creamos un enlace a Python 2.7 en /usr/bin y arreglarmos nuestro bash_profile para usar Python 2.7:
ln -sf /opt/python2.7.2/bin/python /usr/bin/python2.7
echo "alias python=/opt/python2.7.2/bin/python" >> ~/.bash_profile
echo "alias python2.7=/opt/python2.7.2/bin/python" >> ~/.bash_profile
echo "PATH=$PATH:/opt/python2.7.2/bin" >> ~/.bash_profile
source ~/.bash_profile
echo "alias python=/opt/python2.7.2/bin/python" >> ~/.bash_profile
echo "alias python2.7=/opt/python2.7.2/bin/python" >> ~/.bash_profile
echo "PATH=$PATH:/opt/python2.7.2/bin" >> ~/.bash_profile
source ~/.bash_profile
Si todo ha salido bien, deberías ver lo siguiente al lanzar Python:
Python 2.7.2 (default, Oct 21 2011, 10:46:56)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-51)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
[GCC 4.1.2 20080704 (Red Hat 4.1.2-51)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Pulsa Ctrl + D para salir hacia el interprete de comandos.
Seguidamente cambiaremos la codificación que python trae por defecto (ascii) para así no tener problemas con la representación de acentos y la “ñ”, se puede comprobar la te tiene de la siguiente forma al lanzar python:
python
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
Pulsa Ctrl + D para salir hacia el interprete de comandos.
Para modificar la codificación, simplemente crea un fichero llamado “sitecustomize.py” dentro de la carpeta “site-packages” de python 2.7 (en mi instalación estaba en /opt/python2.7.2/lib/python2.7/site-packages,) y añadimos al fichero el siguiente contenido:
import sys
sys.setdefaultencoding('iso-8859-15')
sys.setdefaultencoding('iso-8859-15')
Con esto hemos terminado con Python
....oooO.................
.....(....)... Oooo.......
....\..(......(....).....
......\_)......)../.......
..............(_/........
.....(....)... Oooo.......
....\..(......(....).....
......\_)......)../.......
..............(_/........
PyPi, pip, virtualenv (opcional):
Aunque no es de obligada instalación, estos son para darle más “consistencia” al entorno de desarrollo Python, seguimos en /usr/local/src, si no es así cambiamos.
cd /usr/local/src
sh setuptools-0.6c11-py2.7.egg --prefix=/opt/python2.7.2
/opt/python2.7.2/bin/easy_install pip
ln -sf /opt/python2.7.2/bin/pip /usr/bin/pip
pip install virtualenv
ln -sf /opt/python2.7.2/bin/virtualenv /usr/bin/virtualenv
sh setuptools-0.6c11-py2.7.egg --prefix=/opt/python2.7.2
/opt/python2.7.2/bin/easy_install pip
ln -sf /opt/python2.7.2/bin/pip /usr/bin/pip
pip install virtualenv
ln -sf /opt/python2.7.2/bin/virtualenv /usr/bin/virtualenv
....oooO.................
.....(....)... Oooo.......
....\..(......(....).....
......\_)......)../.......
..............(_/........
.....(....)... Oooo.......
....\..(......(....).....
......\_)......)../.......
..............(_/........
Docutils:
Mercurial necesita Docutils. Cuando se instale por primera vez tenemos que llamar explícitamente a python 2.7 para asegurarnos de que Docutils se instala en /opt/python2.7.2, y no en el directorio por defecto de Python 2.4, que teníamos.
cd docutils-0.8.1
python2.7 setup.py install
cd ..
python2.7 setup.py install
cd ..
....oooO.................
.....(....)... Oooo.......
....\..(......(....).....
......\_)......)../.......
..............(_/........
.....(....)... Oooo.......
....\..(......(....).....
......\_)......)../.......
..............(_/........
Mercurial:
Nos metemos en el directorio donde descomprimimos Mercurial, y lo montamos e instalamos
cd mercurial-2.0
make PYTHON=/opt/python2.7.2/bin/python PREFIX=/opt/python2.7.2 all
make PYTHON=/opt/python2.7.2/bin/python PREFIX=/opt/python2.7.2 install
cd ..
make PYTHON=/opt/python2.7.2/bin/python PREFIX=/opt/python2.7.2 all
make PYTHON=/opt/python2.7.2/bin/python PREFIX=/opt/python2.7.2 install
cd ..
Observa que con make, he puesto los argumentos PYTHON=/opt/python2.7.2/bin/python y PREFIX=/opt/python2.7.2 para asegurarme de que mercurial será montado con Python 2.7 y se instala en el sitio correcto, en la carpeta “site-packages”.
Ahora teclea hg versión y pulsa intro, si todo ha salido bien veremos el siguiente mensaje:
Mercurial Distributed SCM (version 2.0)
(see http://mercurial.selenic.com for more information)
Copyright (C) 2005-2011 Matt Mackall and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
(see http://mercurial.selenic.com for more information)
Copyright (C) 2005-2011 Matt Mackall and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
....oooO.................
.....(....)... Oooo.......
....\..(......(....).....
......\_)......)../.......
..............(_/........
.....(....)... Oooo.......
....\..(......(....).....
......\_)......)../.......
..............(_/........
mod_wsgi:
Para montar el mod_wsgi es necesario asegurarse de que el paquete httpd-devel está instalado, (asumiendo de que tienes apache instalado), este seria el comando para instalarlo:
yum install httpd-devel
A continuación montamos el mod y nos aseguramos de que se haga con python 2.7 (recuerda que seguimos en /usr/local/src)
cd mod_wsgi-3.3
./configure --with-python=/opt/python2.7.2/bin/python
make
make install
./configure --with-python=/opt/python2.7.2/bin/python
make
make install
Tras esto, si todo está correcto, deberíamos ver el mod_wsgi.so en la carpeta de módulos de apache, con el siguiente comando:
ll /usr/lib/httpd/modules/mod_wsgi.so
Nos responderá lo siguiente:
-rwxr-xr-x 1 root root 303801 nov 12 15:15 /usr/lib/httpd/modules/mod_wsgi.so
Bueno, ya tenemos instaladas todas las herramientas necesarias para que Mercurial pueda funcionar de forma correcta, ahora pasaremos a la configuración de estas para crear un repositorio operativo.
Configuración del Servidor
....oooO.................
.....(....)... Oooo.......
....\..(......(....).....
......\_)......)../.......
..............(_/........
.....(....)... Oooo.......
....\..(......(....).....
......\_)......)../.......
..............(_/........
Configurando Mercurial + mod_wsgi:
Vamos a crear los directorios donde almacenaremos el repositorio y los archivos de configuración de este. Estos directorios no los crearemos en la raíz del servidor web, sino en la carpeta var, Apache, configurándolo para que haga uso de este mod, será el que se encargue en re-direccionarlos como si estuviesen en dicha raíz.
mkdir -p /var/hg/repositorios
mkdir -p /var/hg/cgi-bin
mkdir -p /var/hg/cgi-bin
Ahora copiamos el script de hgwed que más adelante usaremos con apache (ahora no lo tocamos), este se encuentra en donde descomprimimos los archivos de mercurial, dentro de la carpeta /contrib/, nos lo copiamos en la carpeta de documentos del repositorio /cgi-bin/ , con la siguiente orden:
cp /usr/local/src/mercurial-2.0/contrib/hgweb.wsgi /var/hg/cgi-bin
Seguidamente creamos el archivo de configuración del repositorio llamándolo hgweb.config
touch /var/hg/hgweb.config
Lo editamos, con el editor que usemos, en mi caso usé el que trae WinSCP (doble click al archivo en cuestión), os recuerdo que con wine, podemos ejecutar esta útil aplicación de Windows, en un Linux, lo editamos, e introducimos lo siguiente (incluidos los “tips” que he puesto):
[web]
#Indicamos la codificación por defecto
encoding = ISO-8859-15
#Aquí deberemos poner los user que tienen permiso de escritura en nuestro repo,
#separados por comas [Cambia el asterisco por el nombre]
allow_push=*
#Si es necesario “pushear” con encriptación SSL, True, sino false
push_ssl=True
[paths]
#Ruta de nuestro repositorio [Cambia los asteriscos por el nombre]
* = /var/hg/repositorios/*
#Indicamos la codificación por defecto
encoding = ISO-8859-15
#Aquí deberemos poner los user que tienen permiso de escritura en nuestro repo,
#separados por comas [Cambia el asterisco por el nombre]
allow_push=*
#Si es necesario “pushear” con encriptación SSL, True, sino false
push_ssl=True
[paths]
#Ruta de nuestro repositorio [Cambia los asteriscos por el nombre]
* = /var/hg/repositorios/*
Guárdalo, recuerda que este es el archivo de configuración de permisos de escritura en nuestro repo, que siempre tendremos que editarlo para añadir un usuario con acceso de escritura, si no lo hacemos, sólo podrá leerlo, aunque se halla autentificado, porque te recuerdo que el repo que estamos creando no es público, y Mercurial lleva por defecto deshabilitada la opción de escritura.
Ahora debemos crear el archivo de credenciales del repositorio, en dicho archivo se guardarán las credenciales de todos los usuarios que demos de alta en el repositorio:
touch /var/hg/passwd.dav
Damos permisos a las carpetas que hemos creado, y a su contenido, para que los usuarios que se acrediten en apache tengan permisos de acceso a dichas carpetas:
chown -R apache:apache /var/hg
Ahora reiniciamos Apache para que tome los cambios que hemos hecho
service httpd restart
....oooO.................
.....(....)... Oooo.......
....\..(......(....).....
......\_)......)../.......
..............(_/........
.....(....)... Oooo.......
....\..(......(....).....
......\_)......)../.......
..............(_/........
Configurando Apache + mod_wsgi + ssl:
Manos a la obra; editamos el archivo de configuración de apache httpd.conf con el editor que usamos antes. El mencionado archivo en mi CentOS 5 se encuentra en /etc/httpd/conf ,y justo al final de las lista de módulos que carga añadimos:
#
#Config mod_wsgi
#
LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome /opt/python2.7.2
#Config mod_wsgi
#
LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome /opt/python2.7.2
Con la última línea nos aseguramos de que Apache usará para el mod_wsgi lo versión de Python correcta.
Seguidamente editamos el archivo de configuración del servidor ssl, ssl.conf este, en CentOS 5 se encuentra en /etc/httpd/conf.d y justo antes del comando que habilita el servidor ssl insertamos las siguientes líneas:
WSGIScriptAlias /hg /var/hg/cgi-bin/hgweb.wsgi
<Directory /var/hg/cgi-bin>
Options ExecCGI
AddHandler wsgi-script .wsgi
AllowOverride None
Order allow,deny
Allow from all
DAV On
AuthType Basic
AuthName "Repositorio Mercurial"
AuthUserFile /var/hg/passwd.dav
Require valid-user
</Directory>
<Directory /var/hg/cgi-bin>
Options ExecCGI
AddHandler wsgi-script .wsgi
AllowOverride None
Order allow,deny
Allow from all
DAV On
AuthType Basic
AuthName "Repositorio Mercurial"
AuthUserFile /var/hg/passwd.dav
Require valid-user
</Directory>
Como he dicho antes del siguiente comando que debemos activar:
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
# Enable/Disable SSL for this virtual host.
SSLEngine on
Os recuerdo que nuestro router (si es que lo hacemos tras un router), debe tener direccionado el puerto 443 tcp, a la IP que tengamos en nuestro servidor ssl, ya que dicho puerto es el que por defecto usará Apache para le protocolo https.
Volvemos a reiniciar Apache para que acepte los cambios que hemos hecho
service httpd restart
....oooO.................
.....(....)... Oooo.......
....\..(......(....).....
......\_)......)../.......
..............(_/........
.....(....)... Oooo.......
....\..(......(....).....
......\_)......)../.......
..............(_/........
Configurando el scritp del mod_wsgi:
En el punto [Configurando Mercurial + mod_wsgi] hicimos una copia del archivo de configuración hgweb.wsgi de dicho mod en /var/hg/cgi-bin, ahora toca editarlo para configurar el mod.
Cámbiate a dicho directorio si no estas en el
cd /var/hg
Al edítalo, en dicho archivo por defecto se encuentran esto:
# An example WSGI for use with mod_wsgi, edit as necessary
# See http://mercurial.selenic.com/wiki/modwsgi for more information
# Path to repo or hgweb config to serve (see 'hg help hgweb')
config = "/path/to/repo/or/config"
# Uncomment and adjust if Mercurial is not installed system-wide:
#import sys; sys.path.insert(0, "/path/to/python/lib")
# Uncomment to send python tracebacks to the browser if an error occurs:
#import cgitb; cgitb.enable()
# enable demandloading to reduce startup time
from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb import hgweb
application = hgweb(config)
# See http://mercurial.selenic.com/wiki/modwsgi for more information
# Path to repo or hgweb config to serve (see 'hg help hgweb')
config = "/path/to/repo/or/config"
# Uncomment and adjust if Mercurial is not installed system-wide:
#import sys; sys.path.insert(0, "/path/to/python/lib")
# Uncomment to send python tracebacks to the browser if an error occurs:
#import cgitb; cgitb.enable()
# enable demandloading to reduce startup time
from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb import hgweb
application = hgweb(config)
Lo vamos a dejar de la siguiente forma:
# Path to repo or hgweb config to serve (see 'hg help hgweb')
config = "/var/hg/hgweb.config"
# Uncomment and adjust if Mercurial is not installed system-wide:
#import sys; sys.path.insert(0, "/path/to/python/lib")
# Uncomment to send python tracebacks to the browser if an error occurs:
#import cgitb; cgitb.enable()
# enable demandloading to reduce startup time
import os
os.environ["HGENCODING"] = "ISO-8859-15"
from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb import hgweb
application = hgweb(config)
config = "/var/hg/hgweb.config"
# Uncomment and adjust if Mercurial is not installed system-wide:
#import sys; sys.path.insert(0, "/path/to/python/lib")
# Uncomment to send python tracebacks to the browser if an error occurs:
#import cgitb; cgitb.enable()
# enable demandloading to reduce startup time
import os
os.environ["HGENCODING"] = "ISO-8859-15"
from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb import hgweb
application = hgweb(config)
Lo guardamos y cerramos
CREANDO UN REPOSITORIO
....oooO.................
.....(....)... Oooo.......
....\..(......(....).....
......\_)......)../.......
..............(_/........
.....(....)... Oooo.......
....\..(......(....).....
......\_)......)../.......
..............(_/........
Con todo lo hecho hasta ahora ya podemos publicar nuestro repositorio, solo nos queda crearlo, dar los permisos oportunos a la carpeta del repo, y dar de alta algún usuario para que podamos hacer un push para ver si funciona, así que manos a la obra.
Nos situamos en la carpeta raíz ce los repositorios:
cd /var/hg/repositorios
Creamos la carpeta con el nombre del repositorio:
mkdir repo_test
Nos metemos en ella
cd repo_test
Iniciamos el repositorio con HG
hg init
Editamos el archivo /var/hg/hgweb.config localizamos el enunciado donde ponemos el nombre del repo que hemos creado:
[paths]
#Ruta de nuestro repositorio
#[cambia los asteriscos por el nombre]
* = /var/hg/repositorios/*
#Ruta de nuestro repositorio
#[cambia los asteriscos por el nombre]
* = /var/hg/repositorios/*
Cambiamos los asteriscos por el repositorio de prueba que hemos hecho:
repo_test = /var/hg/repositorios/repo_test
Ahora es necesario asegurarse de que los usuarios que se autentifiquen en el servidor Apache, puedan acceder al repositorio. En CentOS esto se hace del siguiente modo, creo que en las demás “distros” diferirá poco.
chown -R apache:apache /var/hg/repositorios
chmod -R g+rw /var/hg/repositorios
chmod -R g+rw /var/hg/repositorios
Seguidamente, crearemos un usuario con acceso de lectura en el repo con el siguiente comando,
recuerda que esto que te describo, es el método que hay que seguir para dar de alta a un usuario siempre:
htpasswd /var/hg/passwd.dav nombre-usuario
Bueno, pues ahora si en la barra de nuestro navegador, escribiéramos https://www.tuwebsite.com/hg/repo_test nos saldrá, primero un aviso del navegador diciendo que el site no está autentificado, cosa que ya sabemos porque es nuestro, y que si queremos continuar, a lo cual contestamos que si, entonces nos saltará la ventana de credenciales, que es donde debemos escribir el nombre de usuario y contraseña que acabamos de crear, para a continuación ver nuestro repositorio de Mercurial en la carpeta que hemos creado, dentro como es lógico no habrá nada, aún.
Procedemos a crear un clon de nuestro flamante repo, usando por ejemplo el TortoiseHG que es el que suelo usar, creo que si te has metido en estos “berenjenales” ya sabes como se hace un clon.
TIPS:
Si pones en TortoiseHG la dirección que tienes en el navegador precedida de tu nombre con un @ , o sea, https://nombre-usuario@tuwebsite.com/hg/repo_test solo te pedirá el password cuando hagas push.
Vamos a comprobar que funciona el push, claro está. Primero debemos autorizar el “pusheo” a este usuario, que si te acuerdas, te señalé donde teníamos que meter los usuarios con acceso de escritura al repo.
Editamos de nuevo /var/hg/hgweb.config y localizamos la línea donde dábamos permisos de escritura:
#Aquí deberemos poner los user que tienen permiso de escritura en nuestro repo, separados por comas
#[cambia el asterisco por el nombre]
allow_push=*
#[cambia el asterisco por el nombre]
allow_push=*
Pues eso cambia el asterisco por el nombre del usuario que le queremos dar permiso de escritura. Guárdalo, y ahora probemos hacer un commit en nuestro repo, metemos un archivo cualquiera dentro de la carpeta que hallamos creado para el clon y procedamos, (es solo para probar, así que crea un archivo de texto vacío y llámalo test.txt), ahora lanza el sincronizador y haces el push. TortoiseHG solo nos pedirá nuestro password y lo subirá al repo, si todo funciona correctamente, y nos dirigimos de nuevo a la dirección de repo, debemos ver nuestro commit.
Con esto ya tenemos funcional un Mercurial que ya quisieran las web’s de pago que pululan por la red tenerlo.
® Mrbytes to Eswow2 2011