Parches, haciendo de Drupal algo mejor
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.patchpara revertirlo:
patch -p0 -R < nombre_del_parche.patchPara crear un parche (que no cree nuevos archivos en el módulo)
cvs 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.
- 4155 lecturas
Contenido Relacionado
Resumen
El primer artículo de Cuenco Digital. Este artículo y los siguientes, describirán el proceso de creación de un sitio con Drupal paso a paso.
En esta primera parte se tratan temas relacionados con la organización inicial de las ideas, el porqué del proyecto. También se trata rápidamente la elección de la versión de Drupal y como instalarlo.
Inicio de sesión
Comentarios recientes
- Mi estimado muy bueno tu
hace 2 semanas 4 días - Ya !!
hace 3 semanas 2 días - RE: mis primera experiencia con drupal 6
hace 3 semanas 4 días - hola
hace 3 semanas 4 días - mis primera experiencia con drupal 6
hace 3 semanas 5 días - Consulta sobre imagecache
hace 3 semanas 5 días - Pude sacar el error eses que
hace 4 semanas 5 días - Yo tambien tengo el mismo
hace 4 semanas 5 días - no aparece la galeria de galerias
hace 4 semanas 6 días - dependencia de modulo desaparecida
hace 5 semanas 10 horas

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