Parches, haciendo de Drupal algo mejor

2 Comentarios
Fecha: 
23 de Noviembre de 2009

Seguramente habrá escuchado hablar de “la comunidad” de Drupal. Esto es simplemente un conjunto de personas que ayudan a mejorar cosas o a resolver problemas dentro del mundo de este CMS.

Una de las formas más interesantes y a la vez complicadas de participación en la comunidad es creando parches.

¿Qué es un parche?

Un parche es una serie de instrucciones que modifica un trozo de código para agregarle más funcionalidad o corregir errores. Los parches tienen una estructura especial que permiten indicarle a un programa algo así como “cambiar esta linea de código, por esta otra”.

¿Por qué son útiles los parches?

Imagínese estar en la piel de Jeff Eaton. Este muchacho está a cargo del mantenimiento de los módulos Voting API, Tokens, Fivestar, SimpleViews por nombrar algunos y ha participado en el desarrollo de otros quince módulos más. Eso sin mencionar sus aportes al núcleo de Drupal.

Claramente no puede estar en todos a la vez, y muchas veces solo se limita a que funcionen bien con las características que tienen.

Y está muy bien.

Ahora, si alguien quisiera una una funcionalidad. Digamos por ejemplo un nuevo Token, puede esperar a que Jeff Eaton se digne a escribir el código, o... crear un parche.

Los parches permiten que otras personas puedan ayudar colaborativamente a depurar errores y agregar funcionalidades.

¿Qué aspecto tiene un parche?

Visto con un visor de parches, la lineas con un menos serán borradas, y las que comienzan con un más serán agregadas.

Aspecto de un parche

En http://drupalcode.org pueden observarse todos los cambios que se le realizaron a un modulo en particular, en ese sitio los parches pueden verse de esta forma.

Aspecto de un parche en drupalcode.org

¿Cómo aplicar un parche?.

Empezaremos por algo simple. Un programador programó alguna funcionalidad y usted quiere probar como funciona.

Por ejemplo, en esta dirección puede descargarse un parche para Views 3. El mismo le permite al usuario determinar cuantos elementos mostrará una vista.

Para instalar este parche hay que ver para que versión del modulo esta pensado, en este caso, views 3.

Resumen de un issue

Para aplicar el parche descargamos el parche, ingresamos al directorio de views y ejecutamos la siguiente instrucción

wget http://drupal.org/files/issues/views-324092-items-per-page-exposed_0.patch
cd views
patch -p0 < views-324092-items-per-page-exposed_0.patch

Si el parche no funcionó como esperábamos o queremos revertirlo, simplemente:

patch -p0 -R < views-324092-items-per-page-exposed_0.patch

La -R le indica al comando patch que aplique el parche de la forma inversa, lo que para este caso, implica volver a atrás los cambios realizados.

¿Cómo crear un parche?

Existen dos formas crear un parche, las dos se basan en remarcar las diferencias entre un archivo original y otro modificado.

Veamos un ejemplo.

Este parche permitirá que views 2 muestre que opciones tienen otras opciones ocultas cuando se presiona el checkbox.

Para lograr esta funcionalidad hay que modificar dos archivos: dependent.js y views.admin.css

Lo primero que hay que hacer es realizar una copia de cada uno de los archivos.

cp dependent.js dependent.js.modificado
cp views.admin.css views.admin.modificado

Luego modificamos cada uno de los archivos con las correcciones que queremos agregarles.

Y por ultimo hacemos un diff de cada uno de los archivos. Hacer un diff significa crear un parche con los cambios realizados.

diff -up dependent.js dependent.js.modificado > parche_dependent.js.patch
diff -up views.admin.css views.admin.css.modificado > parche_views_admin.patch

con esto tememos dos parches que informan de las modificaciones que se le deben realizar al módulo views para agregar esta funcionalidad.

Es claro que este mecanismo no es del todo útil puesto que si se necesitan modificar muchos archivos juntos, habría que hacer muchos archivos con extensión patch.

Por suerte existe otro método.

Debido a que hacer un diff implica comparar dos trozos de código, puede hacerse uso del código que se encuentra en el servidor de Drupal usándolo como fuente original.

Veamos el ejemplo anterior utilizando este nuevo método.

Primero, hay que descargar views utilizando cvs. Esto descarga, además del modulo, una serie de de archivos de que permiten llevar el control de versiones.

Para hacer eso, simplemente debemos ir a la pestaña CVS Instrucctions del modulo y copiar el código para la versión HEAD y ejecutarlo en la terminal.

Pestaña CVS instructions

Luego, modificamos los archivos con algún editor de texto.

Por ultimo tipeamos el siguiente comando.

cvs diff -up > ~/Escritorio/views-12346.patch

La línea anterior desglosada:

  • cvs es un comando que permite invocar al sistema de control de versiones.
  • Diff le indica a cvs que debe crear un parche.
  • -up son los modificadores que recomiendan utilizar en Drupal para crear parches. La u indica que se deben agregar los numero de linea cercanos a los cambios y la c indica que se debe mostrar la función sobre la cual se está modificando el código.

> ~/Escritorio/views-12346.patch indica el destino del archivo, en esta caso el parche views-12346.patch será alojado en el escritorio de mi sistema linux.

Parches que crean nuevos archivos:

Puede suceder que usted necesite crear un parche que agregue un nuevo archivo a un módulo o a un theme. Por ejemplo un archivo .inc con nuevas instrucciones.

Los encargados de mantener los módulos de drupal, pueden usar el comando cvs add archivo.inc para agregar un nuevo archivo. Esto le indica al sistema de control de versiones que cree un nuevo archivo en el repositorio.

Sin embargo, usualmente los que crean el parche no poseen los permisos suficientes para decirle al repositorio que cree el nuevo archivo. Cuando estos casos suceden podemos hacer uso de cvsdo.

cvsdo es una utilidad que forma parte del paquete cvs-utils. Para instalarlo en un sistema linux que use apt.

apt-get install cvsutils

Este paquete provee de un nuevo comando que permite entre otras cosas, agregar y quitar archivos de forma ficticia en un parche.

Entonces, si nuestro parche crea un nuevo archivo .inc, lo que hacemos es:

cd nombre_del_modulo
cvsdo add nuevo_archivo.inc
cvs diff -up -N > ../nombre_del_parche.patch

Notar el uso de -N que hace posible que los nuevos archivos sean agregados al parche.

Del mismo modo si el parche hace que no sea necesario el uso de un archivo en particular podemos usar

cd nombre_del_modulo
cvsdo remove nuevo_archivo.inc
cvs diff -up -N > ../nombre_del_parche.patch

Resumen:

Como puede verse, el uso de parches es un gran aporte a la comunidad de Drupal. Piense que el tiempo de trabajo que usted le asigne a un problema en particular podrá ser aprovechado por muchos otros si su parche pasa a formar parte del código del Módulo o Theme a modificar.

Recuerde entonces, para aplicar un parche

patch -p0 < nombre_del_parche.patch

para revertirlo:

patch -p0 -R < nombre_del_parche.patch

Para crear un parche (que no cree nuevos archivos en el módulo)

cvs diff -up > ../nombre_del_parche.patch

Para crear un parche (que cree nuevos archivos en el módulo)

cvsdo add nuevo_archivo.patch
cvs diff -up -N > ../nombre_del_parche.patch

Como último consejo, desde drupal.org recomiendan crear parches con la siguiente estructura:

nombre_del_modulo-numero de issue.patch

Por ejemplo:

views-324092.patch hace referencia al issue http://drupal.org/node/324092

Por supuesto el tema es demasiado extenso para explicarlo aquí. Por dudas y preguntas, hagan uso de los comentarios.

Su voto: Nada Promedio: 3.5 (4 votos)

Contenido Relacionado

Comentarios

muy buen artículo, sobre un

muy buen artículo, sobre un tema que no se toca mucho en la web y que forma parte fundamental en la mejora de cualquier software open source. Buen trabajo!

que bueno :-)

que bueno :-)

Gracias por el artículo!!

Enviar un comentario nuevo

¿Dudas, comentarios?. Anímese, y de su opinión sobre material. Procure cuidar su ortografía y publicar algo relacionado con el contenido.

Por consultas generales, utilice los Foros de Drupal Hispano. Los comentarios no relacionados con el contenido seran borrados.

Seguro que usted no se llama anónimo :)
El contenido de este campo se mantiene privado y no se mostrará públicamente.
Si posee un sitio web puede indicarlo en este campo
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><del>
  • Saltos automáticos de líneas y de párrafos.
  • Usted puede agregar código (genérico) utilizando etiquetas <code>...</code> o <?php ... ?> para código PHP resaltado.

Más información sobre opciones de formato

CAPTCHA
Esta pregunta es para asegurarnos de que usted es humano. Coloque las dos palabras separadas por un espacio.