lunes, 14 de julio de 2008

Efectuar un CVS update desatentido disparado desde SQL Server

El requerimiento:
Hacer un update de un repositorio de CVS utilizando el protocolo pserver con usuario y constreñas conocidas.
Es necesario que el update se pueda efectuar "desatendidamente" desde un procedimiento de SQL Server 2000/2005/2008

El problema:
Al hacer el login al CVS, la constraseña del pserver es guardada en algún lugar del registro asociado con la sesión de usuario, así que si se dispara el update desde otra sesión o desde otro usuario (por ejemplo desde un job de SQL Server) surge el problema de que la contraseña no queda guardada y el update no puede ser efectuado.
Aunque se cree la credencial y el proxy adecuado en SQL, el problema sigue existiendo.

La solución:
Efectuar el checkout del módulo localmente.
Crear un archivo de texto plano que sólo contenga la contraseña del usuario del CVS y un archivo .bat que haga el login y el update.

El contenido de UpdateCVS.bat es el siguiente:


:Asigno el PATH a la carpeta que contiene el archivo CVS.exe
PATH = C:\Program Files\TortoiseCVS

:Voy a la carpeta que tiene el checkout
C:
CD \repositorio\Carpeta

:Seteo la configuracion del CVS
SET CVSROOT = :pserver:usuario@cvs.miempresa.com:2401/home/cvs

:Intruduzco el password redireccionando el stdin
:Es necesario que el password esté en el archivo c:\passw
cvs.exe login<c:\passw

:Disparo el Update
cvs.exe -q update -d -P


Dentro del .bat, el comando CVS Login preguntará la contraseña. Para que ésta sea introducirla automáticamente, se redirecciona el standard input al archivo que contiene la contraseña. Esto se hace con el caracter "<".
El archivo passw debe terminar con un retorno (enter).

Luego, para ejecutar el .bat desde T-SQL:
Exec xp_CMDShell 'UpdateCVS.bat'

Este exec puede ponerse dentro en un Job para automatizar completamente el proceso.