Aplicando patches Magento CE

15

De acordo com a página de download do Magento , na seção de patches

Faça o upload do patch no diretório raiz do Magento e execute o comando SSH apropriado: Para arquivos de patch com a extensão de arquivo `.sh: sh patch_file_name.sh Exemplo: sh PATCH_SUPEE-1868_CE_1.7.0.2_v1.sh

Magento recomenda uma invocação direta do shcomando para executar seu patch runner. A extensão do arquivo também .shsuporta isso.

No entanto, se você observar a parte superior de cada arquivo do patch runner , a linha shebang aponta para bash.

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

O programador em mim quer confiar no arquivo de origem, mas o processo wonk quer obedecer ao que está escrito no site Magento, o cínico se pergunta se o patch foi testado contra as diferenças entre bash e sh .

Alan Storm
fonte
O processo de correção deve ser tão simples quanto os arquivos .diff compactados. REQUIRED_UTILS='sed patch'tudo o que vejo nos .shscripts. Os documentos de atualização para versões recentes são como instruções estéreo e a atualização não deve ser tão dolorosa.
B00MER
2
Pego um pouco cegamente o patch, chmod + x e o executo. (Bom, eu checo o conteúdo primeiro), mas eu o executo localmente (dev baseado em Mac) para que eu possa git branch e me comprometer com um branch de teste antes da implantação.
Barry Carlyon
3
@ B00MER Isso é complicado. Eu concordo pessoalmente, mas para pessoas experientes em tecnologia, mas não unix, aplicar manualmente os patches parece um passo longe demais. Eu posso entender as motivações por trás de um instalador de patches.
Alan Storm
Apenas pensando sobre isso de novo. O shebang lins pode ser #! / Bin / php por exemplo e, sh executa "o suficiente" para ler a linha shebang e passar o script para o programa shebang'ed. Sobre o assunto do manual, o patch contém os Git Diffs de qualquer maneira, para que você possa "facilmente" se aplicar. Mas, existe algum argumento para solicitar ao Magento que forneça apenas um zip com arquivos alterados, além de um Patch (o que é bom, exceto nas edições Core)?
Barry Carlyon
Mais uma coisa. O uso de uma extensão de arquivo, diferente de .txt, provavelmente torna mais lógico para os menos experientes, para evitar que arquivos sem extensão flutuem pelo sistema de arquivos dos usuários locais. Sinto bash e sh são intercambiáveis ​​de qualquer maneira.
Barry Carlyon

Respostas:

8

Você deve usar o bash, na verdade. Na linha 14 do patch, você apontou explicitamente este código:

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

$((é uma expressão aritmética válida em XCU sh, mas ((não é.)

Em muitas plataformas do tipo UNIX, no entanto, /bin/shé apenas um link simbólico para /bin/bash. Quando invocado com o nome sh, o bash desabilita parte de seu comportamento não-estrito POSIXly, mas não todo. É provável que esses patches funcionem bem para o bash chamado sh.

kojiro
fonte
Nesse caso, o script não está sendo executado em sh, sh está sendo transferido para o programa de linha shebang declarado?
Barry Carlyon
Na verdade, o kernel é responsável por interpretar o shebang. Se chmod +x script && ./scripto kernel tentar executar o comando na linha shebang com o arquivo de script como seu primeiro ou segundo argumento. Dependendo das circunstâncias, não há garantia de que qualquer shell esteja envolvido nessa árvore de processos. Se você executar shcom um script como argumento, no entanto, a linha shebang será ignorada.
Kojiro
Isso significa que estou seguindo as instruções do patch incorretamente. Como dizem fazer script de sh, mas eu só faço ./script Como divertido
Barry Carlyon
-2

Caso isso ajude alguém no futuro, usei o Phpstorm para aplicar patches e sua ferramenta de patches é ótima. Demorou menos de 30 segundos para aplicar o patch sem problemas e você também pode ver e analisar as diferenças que os arquivos têm.

codelogn
fonte