Aplicación de parches Magento CE

15

Según la página de descarga de Magento , en la sección de parches

Cargue el parche en su directorio raíz de Magento y ejecute el comando SSH apropiado: Para archivos de parche con la extensión de archivo `.sh: sh patch_file_name.sh Ejemplo: sh PATCH_SUPEE-1868_CE_1.7.0.2_v1.sh

Magento recomienda una invocación directa del shcomando para ejecutar su parche runner. La extensión de archivo de .shsoporta esto también.

Sin embargo, si observa la parte superior de cada archivo de parche de ejecución , la línea shebang apunta a bash.

#!/bin/bash
# Patch apllying tool template
# v0.1.2
# (c) Copyright 2013. Magento Inc.
#

El programador en mí quiere confiar en el archivo fuente, pero el proceso no quiere obedecer lo que está escrito en el sitio web de Magento, el cínico se pregunta si el parche ha sido probado contra las diferencias entre bash y sh .

Alan Storm
fuente
El proceso de parche debe ser tan simple como los archivos .diff comprimidos. REQUIRED_UTILS='sed patch'Todo lo que veo en los .shguiones. Los documentos de actualización para versiones recientes se leen como instrucciones estéreo, y la actualización no debería ser tan dolorosa.
B00MER
2
Recojo el parche de forma algo ciega, chmod + x y lo ejecuto. (Bueno, primero verifico el contenido), pero lo ejecuto localmente (desarrollador basado en Mac) para poder obtener una rama y comprometerme con una rama de prueba antes de implementarla.
Barry Carlyon
3
@ B00MER Eso es complicado. Estoy de acuerdo personalmente, pero para las personas con conocimientos de tecnología pero no con conocimientos de Unix, la aplicación manual de parches parece un paso demasiado lejos. Puedo entender las motivaciones detrás de un instalador de parches.
Alan Storm
Solo pensando en esto otra vez. Las líneas shebang podrían ser #! / Bin / php por ejemplo y, sh ejecuta "suficiente" para leer la línea shebang y pasar el script al programa shebang'ed. Sobre el tema de la aplicación manual, el parche contiene los Git Diffs de todos modos, por lo que puede "fácilmente" aplicarlo usted mismo. Pero, ¿hay algún argumento para pedirle a Magento que proporcione un archivo zip con los archivos modificados solo, junto con un parche (que está bien, excepto para las ediciones principales)?
Barry Carlyon el
Una cosa más. El uso de una extensión de archivo, que no sea .txt probablemente lo hace más lógico para los menos entendidos, para evitar tener archivos sin extensión flotando sobre el sistema de archivos de los usuarios locales. Siento que bash y sh son intercambiables de todos modos.
Barry Carlyon el

Respuestas:

8

Debes usar bash, en realidad. En la línea 14 del parche que señaló explícitamente está este código:

if (( $? != 0 )); then

$((es una expresión aritmética válida en XCU sh, pero ((no lo es).

Sin embargo, en muchas plataformas similares a UNIX, /bin/shes solo un enlace simbólico /bin/bash. Cuando se invoca con el nombre sh, bash desactiva algunos de sus comportamientos POSIXly-no estrictos, pero no todos. Es probable que estos parches funcionen bien para bash invocado como sh.

kojiro
fuente
En este caso, aunque, el script no se ejecuta bajo sh, sh se está volcando al programa de línea shebang establecido?
Barry Carlyon el
En realidad, el núcleo es responsable de interpretar el shebang. Si chmod +x script && ./scriptel kernel intentará ejecutar el comando en la línea shebang con el archivo de script como primer o segundo argumento. Dependiendo de las circunstancias, no hay garantía de que haya ningún shell involucrado en ese árbol de procesos. Sin embargo, si ejecuta shcon un script como argumento, se ignorará la línea shebang.
kojiro
Entonces eso significa que estoy siguiendo las instrucciones del parche mal. Como dicen hacer sh script pero yo solo ./script Qué divertido
Barry Carlyon
-2

En caso de que ayude a alguien en el futuro, he usado Phpstorm para aplicar el parche y su herramienta de parche es excelente. Se tardó menos de 30 segundos en aplicar el parche sin ningún problema y también puede ver y ver las diferencias que tienen los archivos.

codelogn
fuente