Stosowanie łatek Magento CE

15

Na stronie pobierania Magento , w sekcji łatek

Prześlij łatkę do katalogu głównego Magento i uruchom odpowiednią komendę SSH: W przypadku plików łat z rozszerzeniem `.sh: sh nazwa_pliku_ łatki.sh Przykład: sh PATCH_SUPEE-1868_CE_1.7.0.2_v1.sh

Magento zaleca bezpośrednie wywołanie tego shpolecenia, aby uruchomić ich program uruchamiający poprawki. .shObsługuje to także rozszerzenie pliku .

Jeśli jednak spojrzysz na górę każdego pliku programu uruchamiającego poprawki , linia shebang wskazuje bash.

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

Programiści we mnie chcą zaufać plikowi źródłowemu, ale proces nie chce słuchać tego, co jest napisane na stronie Magento, cynik zastanawia się, czy łatka została przetestowana pod kątem różnic między bash a sh .

Alan Storm
źródło
Proces łatania powinien być tak prosty, jak spakowanie plików .diff. REQUIRED_UTILS='sed patch'wszystko co widzę w .shskryptach. Dokumenty dotyczące aktualizacji najnowszych wersji brzmią jak instrukcje stereo, a aktualizacja nie powinna być tak bolesna.
B00MER
2
Trochę ślepo pobieram łatkę, chmod + x i uruchamiam ją. (Cóż, najpierw sprawdzam zawartość), ale uruchamiam ją lokalnie (programowanie na Macu), aby móc zainstalować gałąź i zatwierdzić gałąź testową przed wdrożeniem.
Barry Carlyon
3
@ B00MER To trudne. Zgadzam się osobiście, ale dla osób znających się na technologii, ale nie dla osób znających system uniksowy ręczne stosowanie poprawek wydaje się o krok za daleko. Rozumiem motywacje stojące za instalatorem łatek.
Alan Storm
Jeszcze raz o tym myślę. Linie shebang mogą być na przykład #! / Bin / php, a sh wykonuje „wystarczająco”, aby odczytać linię shebang i przekazać skrypt do programu shebang. Jeśli chodzi o instrukcję, to i tak łatka zawiera Git Diffs, więc możesz „łatwo” nałożyć aplikację. Ale czy istnieje argument, aby poprosić Magento o dostarczenie zipu ze zmienionymi plikami tylko wraz z łatką (co jest w porządku, z wyjątkiem edycji Core)?
Barry Carlyon
Jeszcze jedna rzecz. Zastosowanie rozszerzenia pliku innego niż .txt prawdopodobnie czyni go bardziej logicznym dla mniej doświadczonych, aby uniknąć sytuacji, w której pliki bez rozszerzeń pływają wokół lokalnego systemu plików użytkowników. W każdym razie czuję, że bash i sh są wymienne.
Barry Carlyon

Odpowiedzi:

8

Właściwie musisz użyć bash. W linii 14 łaty, którą wyraźnie wskazałeś, jest ten kod:

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

$((jest poprawnym wyrażeniem arytmetycznym w XCU sh, ale ((nie jest.)

Jednak na wielu platformach typu UNIX /bin/shjest tylko dowiązaniem symbolicznym /bin/bash. Po wywołaniu z nazwą sh, bash wyłącza niektóre z jej POSIXly-nieograniczonego zachowania, ale nie wszystkie. Jest prawdopodobne, że te łatki będą działały dobrze dla bash wywołanego jako sh.

kojiro
źródło
W takim przypadku, czy skrypt nie jest wykonywany w trybie sh, czy sh jest zrzucany do podanego programu linii shebang?
Barry Carlyon
W rzeczywistości jądro jest odpowiedzialne za interpretację shebang. Jeśli tak, chmod +x script && ./scriptjądro spróbuje wykonać polecenie w wierszu shebang z plikiem skryptu jako pierwszym lub drugim argumentem. W zależności od okoliczności nie ma gwarancji, że jakakolwiek powłoka jest zaangażowana w to drzewo procesów. Jeśli jednak wykonasz shskrypt jako argument, linia shebang zostanie zignorowana.
kojiro
Oznacza to, że źle wykonuję instrukcje łatki. Jak mówią, zrób skrypt sh, ale ja po prostu ./script Jak zabawne
Barry Carlyon
-2

Na wypadek, gdyby komuś to pomogło w przyszłości, użyłem Phpstorma do nałożenia łaty, a jej narzędzie jest świetne. Zastosowanie łatki zajęło mniej niż 30 sekund bez żadnych problemów, a także możesz zobaczyć i przejrzeć różnice między plikami.

codelogn
źródło