<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Diario de Programación &#187; Subversion</title>
	<atom:link href="http://blog.chuidiang.com/tag/subversion/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.chuidiang.com</link>
	<description>Programación e informática en general</description>
	<lastBuildDate>Wed, 25 Jan 2012 23:17:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Hooks en subversion</title>
		<link>http://blog.chuidiang.com/2011/09/09/hooks-en-subversion/</link>
		<comments>http://blog.chuidiang.com/2011/09/09/hooks-en-subversion/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 14:38:05 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[Subversion]]></category>
		<category><![CDATA[hooks]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=972</guid>
		<description><![CDATA[Hace ya un par de a&#241;os que me convert&#237; en el administrador del repositorio de subversion de nuestro departamento. Incluso prestamos servicio de subversion a otros departamentos para sus proyectos. Uno de los problemas que me he encontrado es que la gente por despiste, por &#34;pasotismo&#34; &#160;o por no saber d&#243;nde guardar las cosas, mete [...]]]></description>
			<content:encoded><![CDATA[<p>Hace ya un par de a&ntilde;os que me convert&iacute; en el administrador del repositorio de subversion de nuestro departamento. Incluso prestamos servicio de subversion a otros departamentos para sus proyectos.</p>
<p>Uno de los problemas que me he encontrado es que la gente por despiste, por &quot;pasotismo&quot; &nbsp;o por no saber d&oacute;nde guardar las cosas, mete en subversion ficheros binarios (.exe, .dll, etc) documentos (.doc, .docx, .pdf), etc, etc que no es el sitio adecuado para guardarlos, adem&aacute;s que abusar de ello puede llenar el disco en un pis-pas. Y no es un problema espec&iacute;fico de un administrador de subversion, pero tampoco me gusta que la gente suba a subversion sin poner el correspondiente comentario en el commit.</p>
<p>As&iacute; que me puse a investigar c&oacute;mo evitarlo y descubr&iacute; los &quot;<a href="http://svnbook.red-bean.com/en/1.1/ch05s02.html">hooks</a>&quot; de subversion. Son scripts que se guardan en el servidor y que se ejecutan cuando ocurren ciertas acciones en subversion, como un commit, un bloqueo, etc.</p>
<p>En el directorio /path/REPOSITORIO_SVN/hooks de un proyecto basta con poner un script de nombre pre-commit.bat (en windows tambi&eacute;n vale un pre-commit.exe o pre-commit.com, para unix bastar&iacute;a un fichero de nombre pre-commit, sin extensi&oacute;n, con permisos de ejecuci&oacute;n) que se ejecutar&aacute; siempre que se intente hacer un commit y se ejecutar&aacute; antes del commit, pudiendo rechazarlo en un momento dado. Ese directorio ya est&aacute; lleno de scripts con extensi&oacute;n .tmpl, no ejecutables por tanto. Cada uno corresponde a uno de los posibles &quot;hooks&quot; y nos bastar&iacute;a con copiarlo poniendo extensi&oacute;n .bat (o d&aacute;ndole permisos de ejecuci&oacute;n en linux) y modificarlo por dentro para que haga lo que queramos.</p>
<p>Este script debe salir de forma normal (exit 0) si el commit se acepta, y salir con error (exit 1) si no se acepta el commit. En este &uacute;ltimo caso, lo que el script saque por la salida de error est&aacute;ndar, ser&aacute; lo que subversion le muestre al usuario como mensaje de error.</p>
<p>El que yo he puesto, pre-commit.bat, verifica las extensiones de los ficheros que se quieren subir y verifica que hay un comentario. El script es el siguiente y me disculpareis si hay forma mejor de hacerlo (seguro que la hay), pero se m&aacute;s bien nada de &quot;scripts&quot; en windows.</p>
<blockquote>
<p>&nbsp;</p>
<div>set REPOS=%1</div>
<div>set TXN=%2</div>
<div>svnlook changed %REPOS% -t %TXN% | findstr &quot;.\exe \.dll \.o \.lib \.a \.so \.jar \.class \.doc \.docx \.pdf \.zip&quot; &gt;&amp;2</div>
<div>if %errorlevel% equ 0 (goto err)</div>
<div>&nbsp;</div>
<div>svnlook log %REPOS% -t %TXN% | findstr . &gt; nul</div>
<div>if %errorlevel% gtr 0 (goto err2)</div>
<div>&nbsp;</div>
<div>exit 0</div>
<div>&nbsp;</div>
<div>:err</div>
<div>echo No se admiten ficheros binarios &gt;&amp;2</div>
<div>exit 1</div>
<div>&nbsp;</div>
<div>:err2</div>
<div>echo Como no metas un comentario &#8230;. &gt;&amp;2</div>
<div>exit 1</div>
<p>&nbsp;</p>
</blockquote>
<p>Como par&aacute;metros del script, subversion nos pasar&aacute; el repositorio y una &quot;cosa extra&ntilde;a&quot; que contiene la informaci&oacute;n de lo que se est&aacute; pretendiendo meter. Nos guardamos esos dos par&aacute;metros %1 y %2 en las variables REPOS y TXN.</p>
<p>El comando de subversion <a href="http://svnbook.red-bean.com/en/1.1/ch09s03.html">svnlook</a>, pas&aacute;ndole estas dos cosas, es capaz de darnos informaci&oacute;n sobre el commit. As&iacute;, <a href="http://svnbook.red-bean.com/en/1.1/re44.html">svnlook changed</a> nos da un listado de los ficheros que se pretenden modificar/a&ntilde;adir/borrar. <a href="http://svnbook.red-bean.com/en/1.1/re51.html">svnlook log</a> nos da el comentario del commit.</p>
<p>El comando <a href="http://ss64.com/nt/findstr.html">findstr</a> de windows nos permite buscar una cadena. En el primer uso buscamos extensiones de ficheros no permitidos. En el segundo caso, buscamos cualquier caracter (el punto de findstr equivale a cualquier caracter). Este comando findstr da un error si no encuentra la cadena, por lo que inmediatamente detr&aacute;s pongo un if de %errorlevel% (que es donde se guarda si ha habido error) para decidir si se acepta el commit (exit 0) o saco alg&uacute;n error.</p>
<p>En fin, las posibilidades ser&iacute;an muchas, como verificar si el comentario lleva un n&uacute;mero de incidencia para admitirlo, analizar el contenido del fichero que se va a meter buscando cosas no permitidas (c&oacute;digo sin comentar, que no cumpla m&eacute;tricas, paths absolutos dentro, etc) o incluso &iquest;por qu&eacute; no? si compila o no compila y pasa los test.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2011/09/09/hooks-en-subversion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Migrando a Subversion</title>
		<link>http://blog.chuidiang.com/2009/06/04/migrando-a-subversion/</link>
		<comments>http://blog.chuidiang.com/2009/06/04/migrando-a-subversion/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 17:12:41 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[Subversion]]></category>
		<category><![CDATA[CVS]]></category>
		<category><![CDATA[cvs2svn]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=603</guid>
		<description><![CDATA[&#160; &#161;&#161; Por fin tenemos nuestro primer proyecto migrado a subversion !!. La historia ha sido una verdadera odisea. Normalmente usamos CVS, pero en el momento de empezar a trabajar con ramas un poco en serio, el tema se hac&#237;a demasiado pesado. CVS crea las ramas recorriendo todos los ficheros del repositorio y marcando la [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>&iexcl;&iexcl; Por fin tenemos nuestro primer proyecto migrado a <a href="http://www.chuidiang.com/chuwiki/index.php?title=Categor%C3%ADa:Subversion">subversion </a>!!.</p>
<p>La historia ha sido una verdadera odisea. Normalmente usamos <a href="http://www.chuidiang.com/chuwiki/index.php?title=Categor%C3%ADa:CVS">CVS</a>, pero en el momento de empezar a trabajar con ramas un poco en serio, el tema se hac&iacute;a demasiado pesado. CVS crea las ramas recorriendo todos los ficheros del repositorio y marcando la rama para cada uno de ellos. Crear una rama en CVS tardaba cerca de media hora en cada proyecto implicado. Subversion, al tener todo el repositorio con un n&uacute;mero de versi&oacute;n &uacute;nico, no necesita recorrer todos los ficheros uno a uno para hacer la rama, le basta con marcar en alg&uacute;n sitio que en ese n&uacute;mero de versi&oacute;n comienza una rama. Tarda como la mitad de medio segundo (es un decir) en hacer la rama de un repositorio, independientemente de la cantidad de ficheros que haya almacenados. </p>
<p>Por otro lado, nuestro servidor de CVS se estaba quedando &quot;viejito&quot;. Una estaci&oacute;n solaris del a&ntilde;o del &quot;catap&uacute;m&quot; con 128 megas de ram (al que hace poco se le estropeo un m&oacute;dulo de 64 y creo que de esos ya no hay ni el rastro), con el disco duro (de pocos gigas) permanentemente al 99%. Total, que se impon&iacute;a tambi&eacute;n un cambio de m&aacute;quina.</p>
<p>As&iacute; que aprovechando lo uno con lo otro, decid&iacute; que nos pasabamos a Subversion en un servidor nuevo. Dicho&#8230;.. y a esperar.</p>
<p>Primero convencer a la gente de las excelencias de Subversion sobre CVS. Como siempre, a unos pocos les parece estupendo, a muchos les importa tres pepinos y a algunos lo de &quot;&iquest;Para qu&eacute; vamos a cambiar si ahora funciona?&quot;. A base de dar la paliza, consegu&iacute; convencer (o al menos dejaron de protestar) a todos.</p>
<p>Despu&eacute;s lo de conseguir el servidor nuevo. Ni el departamento ni los proyectos para los que trabajamos estaban dispuestos a comprar un servidor (pens&eacute; seriamente en ir a tomar los caf&eacute;s encima del servidor actual, para que ocurriera &quot;una desgracia&quot;). As&iacute; que a negociar con el departamento de inform&aacute;tica de la empresa, a ver cu&aacute;nto nos cobran por darnos un subversion en uno de sus servidores. Tras mucho tira y afloja (y sobre todo gracias a la persona que nos hizo de intermediaria en la software lab con la que trabajamos), nos dieron el subversion gratis. Entre pedir el servidor a los proyectos, intentar convencerles y hablar con el departamento de inform&aacute;tica pasaron casi dos meses.</p>
<p>Y hoy, por fin, la primera migraci&oacute;n. Me baj&eacute; el <a href="http://cvs2svn.tigris.org/">cvs2svn</a> e intent&eacute; migrar uno de nuestros proyectos. Desgraciadamente, intent&eacute; hacerlo sobre windows y no hubo manera. Ten&iacute;a el cygwin y te&oacute;ricamente todo lo necesario, pero me fallaba en un punto en el que se hace una llamada al comando &quot;sort&quot;. El de windows no vale, porque funciona distinto del de unix. El de cygwin aparentemente me daba problemas porque se liaba con las \ de los directorios (al ser unix, espera / de directorio). Me baj&eacute; los <a href="http://unxutils.sourceforge.net/">UnxUtils</a>, pero al ejecutar el comando sort daba un error muy raro (insuficiente espacio en disco, o algo as&iacute;, habiendo m&aacute;s de 20 Gigas libres). As&iacute; que reinici&eacute; el ordenador para arrancar en linux y ah&iacute; fue todo rodado a la primera.</p>
<p>Total, ya tenemos nuestro primer proyecto en subversion. El primero de una larga lista de ellos que debemos ir migrando poco a poco.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2009/06/04/migrando-a-subversion/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Apaches como setas</title>
		<link>http://blog.chuidiang.com/2008/11/21/apaches-como-setas/</link>
		<comments>http://blog.chuidiang.com/2008/11/21/apaches-como-setas/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 16:36:26 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[varios]]></category>
		<category><![CDATA[bitnami]]></category>
		<category><![CDATA[gdt]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[trac]]></category>
		<category><![CDATA[tracks]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=423</guid>
		<description><![CDATA[&#160; Ultimamente me ha dado por probar algunas herramientas nuevas e incluso volver a probar algunas que ya hab&#237;a probado. En concreto, me he vuelto a instalar un servidor de subversion, he vuelto a intentar instalar trac, tambi&#233;n otra cosa que he encontrado por equivocaci&#243;n y que se llama traks (una aplicaci&#243;n web para usar [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Ultimamente me ha dado por probar algunas herramientas nuevas e incluso volver a probar algunas que ya hab&iacute;a probado. En concreto, me he vuelto a instalar un servidor de <a href="http://subversion.tigris.org/">subversion</a>, he vuelto a intentar instalar <a href="http://trac.edgewall.org/">trac</a>, tambi&eacute;n otra cosa que he encontrado por equivocaci&oacute;n y que se llama <a href="http://www.rousette.org.uk/projects/">traks</a> (una aplicaci&oacute;n web para usar <a href="http://es.wikipedia.org/wiki/Getting_Things_Done">GDT</a>, con lo cual me result&oacute; interesante), etc, etc.</p>
<p>Como soy vago y encima estoy mal acostumbrado a Windows, para todas ellas me he buscado instaladores de windows, de esos que se instala todo solo con un par de clicks. En concreto, he usado los instaladores de <a href="http://bitnami.org/">bitnami</a>, u otros del estilo, cuya principal ventaja es que con un par de clicks instalan TODO lo necesario para tener la aplicaci&oacute;n funcionando.</p>
<p>Y la ventaja de estos instaladores es precisamente su problema.</p>
<p>Casi todo lo que he instalado son aplicaciones web, as&iacute; que creo que tengo todos los puertos desde el 8080 al 9999 ocupados con servidores apache, cada uno para su aplicaci&oacute;n. Debo tener como tres o cuatro versiones de python instaladas en distintos directorios (que adem&aacute;s ya ten&iacute;a instaladas previamente), varios servidores MySql y sabe Dios cu&aacute;ntas cosas m&aacute;s por tripitido.</p>
<p>Menos mal que despu&eacute;s de probada un poco la aplicaci&oacute;n, se desinstala igual de f&aacute;cil que se ha instalado.</p>
<p>Por cierto, los tra* no me van bien. trac me sigue pareciendo demasiado complejo de configurar sin el instalador, aparte de que me da errores al ejecutar los python. Y el bitnami stack de track, despu&eacute;s de la instalaci&oacute;n, me ha fallado en el arranque, por lo que no he podido siquiera verlo en marcha.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2008/11/21/apaches-como-setas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Más de Subversion</title>
		<link>http://blog.chuidiang.com/2008/11/12/mas-de-subversion/</link>
		<comments>http://blog.chuidiang.com/2008/11/12/mas-de-subversion/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 20:37:27 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[CVS]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[control de versiones]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=421</guid>
		<description><![CDATA[Hace poco me toc&#243; hacer una rama CVS de los proyectos para estabilizar una versi&#243;n para unas pruebas con el cliente. Ya se sabe, rama del repositorio del proyecto y rama de todos los repositorios con librer&#237;as que utilice el proyecto. Pues bien, ha sido horrible. Son cuatro o cinco repositorios y cada uno de [...]]]></description>
			<content:encoded><![CDATA[<p>Hace poco me toc&oacute; hacer una rama CVS de los proyectos para estabilizar una versi&oacute;n para unas pruebas con el cliente. Ya se sabe, rama del repositorio del proyecto y rama de todos los repositorios con librer&iacute;as que utilice el proyecto.</p>
<p>Pues bien, ha sido horrible. Son cuatro o cinco repositorios y cada uno de los proyectos/librer&iacute;as a &quot;enramar&quot; tienen f&aacute;cilmente tres mil ficheros java. Ech&eacute; toda la tarde en hacer las dichosas ramas. Primero un update, luego el cvs tag para poner una etiqueta justo en el punto donde comienza la rama y luego el cvs tag -b para crear la rama. Al hacerlo CVS fichero a fichero, media hora larga con algunos de los repositorios mientras cvs hace el trabajo.</p>
<p>Se me ocurri&oacute;, harto de ello, <a href="http://www.chuidiang.com/chuwiki/index.php?title=Montar_un_servidor_subversion_en_Windows">montar un servidor de subversion</a>, migrar alguno de los repositorios CVS a subversion (usando <a href="http://cvs2svn.tigris.org/">cvs2svn</a>) y mirar a ver cu&aacute;nto tarda subversion en hacer la rama (svn cp). Es casi inmediato, ya que realmente no realiza la copia real de todos los ficheros (lo har&aacute; cuando se vayan modificando si se van modificando) y tampoco tiene que andar recorriendo todos los ficheros para ver su versi&oacute;n actual (CVS tienen un n&uacute;mero de versi&oacute;n para cada fichero, mientras que subversion tiene un &uacute;nico n&uacute;mero para todo el repositorio).</p>
<p>Todo el mundo habla que los sistemas de control de versiones distribuidos, estilo <a href="http://bazaar-vcs.org/">Bazaar</a> o <a href="http://git.or.cz/">Git</a> son maravillosos. Tambi&eacute;n se habla mejor de Subversion que de CVS, <a href="http://blogs.vertigosoftware.com/teamsystem/archive/2006/01/18/Why_Linus_Torvalds_Hates_Subversion.aspx">aunque no todos lo hacen</a>. A m&iacute; realmente todo eso me parece bien, pero mientras no veo una necesidad real o una mejora importante, no veo tampoco necesidad de cambiar. Ahora s&iacute; he encontrado un motivo, as&iacute; que es cuesti&oacute;n de empezar a mirar en serio la posibilidad de migrarlo todo a Subversion.</p>
<p>De momento descarto Bazaar o Git por tener menos soporte para los IDEs habituales (eclipse en concreto). Tampoco tengo muy claro lo veloz que puede ser hacer un branch de un repositorio grande si eso implica la copia completa de todo el repositorio, con su historia (ya digo, repositorios de tres mil clases java con cuatro o cinco a&ntilde;os de historia y alrededor de veinte desarrolladores de media desarrollando d&iacute;a a d&iacute;a).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2008/11/12/mas-de-subversion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

