{"id":656,"date":"2008-05-09T18:12:26","date_gmt":"2008-05-09T17:12:26","guid":{"rendered":"http:\/\/www.marblestation.com\/blog\/?p=656"},"modified":"2012-04-26T16:27:24","modified_gmt":"2012-04-26T14:27:24","slug":"trac-gestion-documental-e-incidenciasmejoras-con-repositorio-git","status":"publish","type":"post","link":"https:\/\/www.marblestation.com\/?p=656","title":{"rendered":"Trac, gesti\u00f3n documental e incidencias\/mejoras con repositorio Git"},"content":{"rendered":"<p><a href=\"http:\/\/trac.edgewall.org\/\">Trac<\/a> es un sistema de gesti\u00f3n documental (wiki), incidencias\/mejoras (issue tracking system) para proyecto de desarrollo de Software.<\/p>\n<p>Actualmente, en su especialidad es uno de los sistemas m\u00e1s utilizados. La versi\u00f3n original se encuentra dise\u00f1ada para ser integrada con repositorios de control de versiones Subversion, pero existen diversos plugins que nos permiten utilizar otros backends&#8230; como por ejemplo <a href=\"http:\/\/www.marblestation.com\/blog\/?p=654\">Git<\/a>.<\/p>\n<p>Veamos como podemos instalar y poner en marcha el sistema Trac con un repositorio Git&#8230;<br \/>\n<!--more--><\/p>\n<h3>Instalaci\u00f3n en Ubuntu GNU\/Linux<\/h3>\n<p>La versi\u00f3n de Trac disponible en los repositorios de Ubuntu es la 0.10 actualmente y personalmente, prefiero instalar de forma manual Trac para as\u00ed utilizar la \u00faltima versi\u00f3n. Para ello, primero tendremos que instalar varias dependencias:<\/p>\n<pre>\r\n$ sudo aptitude install python-setuptools\r\n$ sudo aptitude install python-pysqlite2\r\n<\/pre>\n<p>Acto seguido, bajamos la versi\u00f3n que nos interese de <a herf=\"http:\/\/trac.edgewall.org\/wiki\/TracDownload\">Trac<\/a>, descomprimimos e instalamos:<\/p>\n<pre>\r\n$ cd Trac-0.11rc1\/\r\n$ sudo python setup.py install\r\n<\/pre>\n<p>A continuaci\u00f3n, descargamos <a href=\"http:\/\/trac-hacks.org\/wiki\/GitPlugin\">Git Plugin<\/a> y descomprimimos. En mi caso particular me he encontrado con un peque\u00f1o bug en el plugin que me imped\u00eda visualizar versiones antiguas del repositorio Git desde Trac, para arreglarlo simplemente tuve que modificar el fichero &#8216;gitplugin\/0.11\/tracext\/git\/git_fs.py&#8217;, l\u00ednea 252:<\/p>\n<pre>\r\ndef previous_rev(self, rev, path='');\r\n<\/pre>\n<p>La modificaci\u00f3n consiste en a\u00f1adir el tercer argumento &#8216;path&#8217;. El bug lo he <a href=\"http:\/\/trac-hacks.org\/ticket\/3008\">reportado<\/a> e imagino que el autor lo validar\u00e1 y corregir\u00e1 (si aplica) en algun momento. <\/p>\n<p>Es posible que cuando le\u00e1is este art\u00edculo, ya se encuentre corregido y por tanto podemos olvidarnos y pasar directamente a instalar el plugin:<\/p>\n<pre>\r\n$ cd gitplugin\/0.11\r\n$ sudo python setup.py install\r\n<\/pre>\n<h3>Instalaci\u00f3n en Microsoft Windows XP<\/h3>\n<p>En Windows me gusta trabajar directamente desde la terminal <a href=\"http:\/\/www.marblestation.com\/blog\/?p=649\">Cygwin<\/a> y por tanto, doy por supuesto que tenemos instalada esa herramienta con los paquetes que <a href=\"http:\/\/www.marblestation.com\/blog\/?p=649\">listo en este art\u00edculo sobre Cygwin<\/a> m\u00e1s el paquete para soportar Python.<\/p>\n<p>Para instalar Trac, previamente necesitaremos instalar varias dependencias: <a href=\"http:\/\/pypi.python.org\/pypi\/setuptools\/#downloads\">setuptools<\/a> y <a href=\"http:\/\/genshi.edgewall.org\/wiki\/Download\">Genshi<\/a>. Descargaremos los &#8220;.egg&#8221; y los instalaremos mediante los siguientes comandos:<\/p>\n<pre>\r\nsh setuptools-0.6c8-py2.5.egg \r\neasy_install Genshi-0.4.4-py2.5.egg \r\n<\/pre>\n<p>Por otra parte, tambi\u00e9n necesitaremos descargar <a href=\"http:\/\/oss.itsystementwicklung.de\/trac\/pysqlite\/\">PySQLite<\/a>, descomprimir e instalar:<\/p>\n<pre>\r\ncd pysqlite-2.4.1\/\r\npython setup.py install\r\n<\/pre>\n<p>Finalmente, bajamos la versi\u00f3n que nos interese de <a herf=\"http:\/\/trac.edgewall.org\/wiki\/TracDownload\">Trac<\/a>, descomprimimos e instalamos:<\/p>\n<pre>\r\ncd Trac-0.11rc1\/\r\npython setup.py install\r\n<\/pre>\n<h3>Configuraci\u00f3n b\u00e1sica<\/h3>\n<p>Trac funciona de forma que necesitamos generar una instancia para cada proyecto, imaginemos que ya tenemos un repositorio <a href=\"http:\/\/www.marblestation.com\/blog\/?p=654\">Git<\/a> en el directorio &#8216;\/home\/usuario\/repo\/&#8217; y queremos generar la interfaz web Trac.<\/p>\n<p>En primer lugar generaremos una instancia de Trac en el directorio que nos interese:<\/p>\n<pre>\r\nmkdir test\r\ntrac-admin test\/ initenv\r\n<\/pre>\n<p>Trac-admin nos realizar\u00e1 diversas preguntas, en general podemos dejar todo por defecto excepto el sistema de control de versiones que ser\u00e1 &#8216;git&#8217; y el path del repositorio, el cual debe apuntar al directorio &#8216;.git\/&#8217;, por ejemplo: &#8216;\/home\/usuario\/repo\/.git&#8217;.<\/p>\n<p>A continuaci\u00f3n, editamos el fichero &#8216;test\/conf\/trac.ini&#8217; y validamos que el archivo incluye la siguiente informaci\u00f3n (en caso de que haya algo diferente o ausente, deberemos modificarlo o a\u00f1adirlo):<\/p>\n<pre>\r\n[git]\r\ncached_repository = true\r\ngit_bin = \/usr\/bin\/git\r\npersistent_cache = true\r\nshortrev_len = 7\r\n\r\n[components]\r\n# for plugin version 0.11.0.1+\r\ntracext.git.* = enabled\r\n<\/pre>\n<p>A continuaci\u00f3n, crearemos un usuario con su respectivo password. Para ello necesitamos primer generar un <a href=\"http:\/\/trac.edgewall.org\/wiki\/TracStandalone\">script<\/a> que nos ayude, creamos el fichero &#8216;trac-digest.py&#8217; con el siguiente contenido:<\/p>\n<pre>\r\nfrom optparse import OptionParser\r\nimport md5\r\n\r\n# build the options\r\nusage = \"usage: %prog [options]\"\r\nparser = OptionParser(usage=usage)\r\nparser.add_option(\"-u\", \"--username\",action=\"store\", dest=\"username\", type = \"string\",\r\n                  help=\"the username for whom to generate a password\")\r\nparser.add_option(\"-p\", \"--password\",action=\"store\", dest=\"password\", type = \"string\",\r\n                  help=\"the password to use\")\r\n(options, args) = parser.parse_args()\r\n\r\n# check options\r\nif (options.username is None) or (options.password is None):\r\n   parser.error(\"You must supply both the username and password\")\r\n   \r\n# Generate the string to enter into the htdigest file\r\nrealm = 'trac'\r\nkd = lambda x: md5.md5(':'.join(x)).hexdigest()\r\nprint ':'.join((options.username, realm, kd([options.username, realm, options.password])))\r\n<\/pre>\n<p>A continuaci\u00f3n generamos el usuario y lo guardamos en el fichero &#8216;digest.txt&#8217;:<\/p>\n<pre>\r\n$ python trac-digest.py -u usuario -p password > digest.txt\r\n<\/pre>\n<p>Al usuario generado, le daremos permisos de administraci\u00f3n total:<\/p>\n<pre>\r\n$ trac-admin test\/ permission add usuario TRAC_ADMIN\r\n<\/pre>\n<p>Y finalmente, ejecutaremos el servidor web integrado <a href=\"http:\/\/trac.edgewall.org\/wiki\/TracStandalone\">Tracd<\/a> para que escuche por el puerto 8080, utilice nuestro fichero de usuarios y permita acceso a la instancia de Trac que acabamos de generar:<\/p>\n<pre>\r\n$ tracd --port 8080 --auth=test,digest.txt,trac test\/\r\n<\/pre>\n<p>Para acceder a Trac simplemente tendremos que visitar la URL <a href=\"http:\/\/127.0.0.1:8080\/test\/\">http:\/\/127.0.0.1:8080\/test\/<\/a>, identifiarnos y empezar a jugar con el \ud83d\ude09<\/p>\n<p>Para entornos estables lo ideal es configurar un servidor web Apache, para esto lo mejor es consultar directamente la <a href=\"http:\/\/trac.edgewall.org\/wiki\/TracGuide\">documentaci\u00f3n de Trac<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Trac es un sistema de gesti\u00f3n documental (wiki), incidencias\/mejoras (issue tracking system) para proyecto de desarrollo de Software. Actualmente, en su especialidad es uno de los sistemas m\u00e1s utilizados. La versi\u00f3n original se encuentra dise\u00f1ada para ser integrada con repositorios de control de versiones Subversion, pero existen diversos plugins que nos permiten utilizar otros backends&#8230; &hellip; <a href=\"https:\/\/www.marblestation.com\/?p=656\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Trac, gesti\u00f3n documental e incidencias\/mejoras con repositorio Git<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,6],"tags":[],"class_list":["post-656","post","type-post","status-publish","format-standard","hentry","category-espanyol","category-tecnologia"],"_links":{"self":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts\/656","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=656"}],"version-history":[{"count":1,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts\/656\/revisions"}],"predecessor-version":[{"id":1248,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts\/656\/revisions\/1248"}],"wp:attachment":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=656"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=656"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=656"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}