¿Como aplicar un parche a algún fichero por un bug?

En alguna ocasión nos hemos encontrar con que el CMS que usemos (Drupal, Joomla, WP…) tienen bugs y las propias empresas lanzan un parche para corregir ese bug en ese fichero, pero claro ese fichero no es el fichero entero (lo cual sería facil porque bastaria con cambiar de fichero en la ruta adecuada y ya estaría actualizado) sino que lanzan un  fichero con las modificaciones que ha sufrido ese fichero, y por desgracia el formato es un poco extraño, tal que así:

diff --git a/views.module b/views.module
index 20258df..3e04b98 100644
--- a/views.module
+++ b/views.module
@@ -465,16 +465,31 @@ function views_menu_alter(&$callbacks) {
  *   The menu argument index. This counts from 1.
  */
 function views_arg_load($value, $name, $display_id, $index) {
-  static $views = array();
-
-  // Make sure we haven't already loaded this views argument for a similar menu
-  // item elsewhere.
-  $key = $name . ':' . $display_id . ':' . $value . ':' . $index;
-  if (isset($views[$key])) {
-    return $views[$key];
+ static $views = array();
+
+  $display_ids = is_array($display_id) ? $display_id : array($display_id);
+  $display_id = reset($display_ids);
+
+  foreach ($display_ids as $id) {
+    // Make sure we haven't already loaded this views argument for a similar
+    // menu item elsewhere. Since access is always checked for the current user,
+    // we are sure that the static cache contains valid entries.
+    $key = $name . ':' . $id . ':' . $value . ':' . $index;
+    if (isset($views[$key])) {
+      return $views[$key];
+    }
+    // Lazy load the view object to avoid unnecessary work.
+    if (!isset($view)) {
+      $view = views_get_view($name);
+    }
+    // Pick the first display we have access to.
+    if ($view && count($display_ids) > 1 && $view->access($id)) {
+      $display_id = $id;
+      break;
+    }
   }
 
-  if ($view = views_get_view($name)) {
+  if ($view) {
     $view->set_display($display_id);
     $view->init_handlers();

¿Como demonios modificamos el código para meter esas lineas que han variado? ¿1 a 1? ¡menudo lio!

No! afortunadamente tenemos el comando patch que nos solventará ese cacao…. el uso es sencillo

1º Cogemos el archivo que haya que modificar y le hacemos una copia de seguridad, por si acaso.

#cp fichero fichero.bak

2º Volcamos el parche en un fichero nuestro

#vim miparche (y dentro copiamos el texto)

3º Parcheamos el fichero

#patch fichero_original mi_parche

Viendo algo asi:

patching file views.module

Y con eso ya tendremos el fichero parcheado con el bug solventado.

¡Déjanos una respuesta!