Enviado por Mariano D'Agostino el 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.

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.

¿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.

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.patchSi el parche no funcionó como esperábamos o queremos revertirlo, simplemente:
patch -p0 -R < views-324092-items-per-page-exposed_0.patchLa -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.modificadoLuego 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.patchcon 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.

Luego, modificamos los archivos con algún editor de texto.
Por ultimo tipeamos el siguiente comando.
cvs diff -up > ~/Escritorio/views-12346.patchLa 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 cvsutilsEste 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.patchNotar 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.patchResumen:
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.patchpatch -p0 -R < nombre_del_parche.patchcvs diff -up > ../nombre_del_parche.patchPara crear un parche (que cree nuevos archivos en el módulo)
cvsdo add nuevo_archivo.patch
cvs diff -up -N > ../nombre_del_parche.patchComo ú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.
Comentarios
muy buen artículo, sobre un
Enlace permanente Enviado por walter (no verificado) el 23 de Noviembre de 2009
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 :-)
Enlace permanente Enviado por Joan (no verificado) el 25 de Noviembre de 2009
que bueno :-)
Gracias por el artículo!!
Un duda
Enlace permanente Enviado por Anónimo (no verificado) el 13 de Septiembre de 2011
Hola, gracias por el artículo.
He estado revisando en varias páginas el como aplicar un parche, pero no lo he terminado de comprender del todo, hay una parte en la que me pierdo: "ingresamos al directorio de views y ejecutamos la siguiente instrucción"
En mi caso es para el módulo i18, ya tengo descargado el parche, ¿Dónde ejecuto la instrucción? Es con algún modulo adicional, como una especie de terminal?
Muchas gracias de antemano, a ver si alguien me podría ayudar
Re: Una duda
Enlace permanente Enviado por Mariano D'Agostino el 14 de Septiembre de 2011
Hola:
Los comandos se ejecutan desde una terminal de linux, o en la consola de dos de windows.
Cuando digo "ingresar al directorio de views" me refiero a:
Espero que eso aclare un poco el tema.
Saludos
Git
Enlace permanente Enviado por Miguel (no verificado) el 06 de Octubre de 2011
Muy bueno el articulo, pero creo que seria interesante hacer una actualización para adaptarlo a git