Índice
Llevo unos cuantos años usando DWM, incluso creé un parche que permitía colorear su barra de estado. Hacía bastante tiempo que DWM se había actualizado, pero no me veía capaz de parchear mi versión modificada de DWM con la original, hasta que encontré el repositorio DWM-Patches y aprendí a usar la herramienta quilt.
¿Qué es Quilt?
Según su man
:
Quilt is a tool to manage large sets of patches by keeping track of the changes each patch makes. Patches can be applied, un-applied, refreshed, etc. The key philosophical concept is that your primary output is patches.
Es decir, una herramienta que permite administrar grandes cantidades de parches a la vez que guardar un historial de los cambios que cada uno hace. Con quilt es posible aplicar, borrar o modificar cualquier parche.
Uso básico
Veamos un ejemplo sencillo, supongamos el siguiente fichero:
# fichero.txt
linea 1
linea 2
linea 3
fichero.txt
será nuestra base.
Crear un parche
Para crear un parche basta con ejecutar quilt new parche1.diff
:
$ quilt new parche1.diff
Patch patches/parche1.diff is now on top
Editar el fichero
Y luego especificamos el fichero sobre el que queremos hacer el parche:
$ quilt edit fichero.txt
File fichero.txt added to patch patches/parche1.diff
Ahora podemos empezar a editar fichero.txt
, por ejemplo:
linea 1
modificación 1 (Por parche1.diff)
linea 2
linea 3
Ver los cambios
Tras terminar de editar, podemos ver el diff:
$ quilt diff
Index: _drafts/fichero.txt
===================================================================
--- _drafts.orig/fichero.txt
+++ _drafts/fichero.txt
@@ -1,3 +1,4 @@
linea 1
+modificaci<C3><B3>n 1 (Por parche1.diff)
linea 2
linea 3
Generar el parche
Aún no hemos generado el parche, para crearlo ejecutamos:
$ quilt refresh
Refreshed patch patches/parche1.diff
Administrar parches
Listo, ahora en el directorio patches/
deberemos tener un fichero llamado parche1.diff
con nuestros cambios. Actualmente solo tenemos uno, si queremos deshacer los cambios y volver al estado original de fichero.txt
basta con hacer:
$ quilt pop
Removing patch patches/parche1.diff
Restoring fichero.txt
No patches applied
Como vemos, fichero.txt
vuelve a su estado original:
$ cat fichero.txt
linea 1
linea 2
linea 3
Si tuvieramos más de un parche, quilt pop
aceptaría el nombre del parche, o la opción -a
para eliminar todos los parches. Creemos un segundo parche:
Segundo parche
Antes de crear un segundo parche, debemos aplicar el primero, o si tuvieramos varios, todos, para ello:
$ quilt push -a
Applying patch patches/parche1.diff
patching file fichero.txt
Now at patch patches/parche1.diff
Ahora estamos en condiciones de crear el nuevo parche:
$ quilt new parche2.diff
Patch patches/parche2.diff is now on top
Listar la pila de parches
Ahora que tenemos varios parches, podemos ver el orden en el que se aplican con quilt series
$ quilt series
patches/parche1.diff
patches/parche2.diff
El último en la pila es parche2
, ahora mismo está vacío, ya que lo acabamos de crear. Para ester parche vamos a modificar fichero.txt
y crear uno nuevo, fichero2.txt
:
$ quilt add fichero2.txt
File fichero2.txt added to patch patches/parche2.diff
$ quilt add fichero.txt
File fichero.txt added to patch patches/parche2.diff
$ echo "Linea creada por parche2.diff" >> fichero.txt
$ echo "Nuevo Fichero creado por parche2.diff" > fichero2.txt
$ quilt diff
Index: _drafts/fichero.txt
===================================================================
--- _drafts.orig/fichero.txt
+++ _drafts/fichero.txt
@@ -2,3 +2,4 @@ linea 1
modificaci<C3><B3>n 1 (Por parche1.diff)
linea 2
linea 3
+Linea creada por parche2.diff
Index: _drafts/fichero2.txt
===================================================================
--- /dev/null
+++ _drafts/fichero2.txt
@@ -0,0 +1 @@
+Nuevo Fichero creado por parche2.diff
Ya solo resta aplicar los cambios al parche, con quilt refresh
:
$ quilt refresh
Refreshed patch patches/parche2.diff
Cuando terminemos de editar los parches, es recomendable volver al estado inicial, deshaciendo las modificaciones de todos los parches:
$ quilt pop -a
Removing patch patches/parche2.diff
Restoring fichero.txt
Removing fichero2.txt
Removing patch patches/parche1.diff
Restoring fichero.txt
No patches applied
$ ll
-rw-r--r-- 1 hkr hkr 24 Jan 30 18:31 fichero.txt
drwxr-xr-x 2 hkr hkr 4.0K Jan 30 18:29 patches/
drwxr-xr-x 2 hkr hkr 4.0K Jan 30 18:31 .pc/
Para volver a aplicarlos:
$ quilt push -a
Applying patch patches/parche1.diff
patching file fichero.txt
Applying patch patches/parche2.diff
patching file fichero.txt
patching file fichero2.txt
Now at patch patches/parche2.diff
$ ll
-rw-r--r-- 1 hkr hkr 38 Jan 30 18:32 fichero2.txt
-rw-r--r-- 1 hkr hkr 89 Jan 30 18:32 fichero.txt
drwxr-xr-x 2 hkr hkr 4.0K Jan 30 18:29 patches/
drwxr-xr-x 4 hkr hkr 4.0K Jan 30 18:32 .pc/
Para ver un ejemplo real, y más complejo, puedes visitar mi repositorio DWM.
Bibliografía
- UsingQuilt | wiki.debian.org
- How To Survive With Many Patches | stuff.mit.edu
¿Has visto algún error?: Por favor, ayúdame a corregirlo contactando conmigo o comentando abajo.