Odpowiedź
Aktualizacja - łatanie i porównywanie plików
Artykuł został zaktualizowany 5 stycznia 2007 roku. Dodano opis skryptu ułatwiającego łatanie katalogów.
Nawet złowrogi Sith, przebywający na co dzień po ciemnej stronie mocy, musi sobie coś czasem załatać. Inaczej mówiąc: i użytkownik Windows musi (bądź chce) mieć czasem do czynienia z łatami (*.patch).
Omówione sytuacje
- Co pewien czas pojawiają się nowe wersje Drupala, których wydanie podyktowane zostało wykryciem luk bezpieczeństwa. Czy nie znudziło się już Wam wysyłanie od nowa całej paczki z Drupalem?
- Denerwuje Was jakiś mniej znany błąd lub chcecie skorzystać z łatki dodającej niestandardowe funkcje? Mozolnie ślęczycie nad edytorem, kopiując i wklejając odpowiednie linijki?
- A może chcecie stworzyć własną łatkę, by móc później automatycznie dodawać poczynione przez siebie modyfikacje do oryginalnych plików?
1. Porównywanie katalogów przed aktualizacją Drupala
Korzystając z jednego z poniższych sposobów można wytypować pliki, które wymagają wysłania na serwer, a te, które nie uległy zmianie od ostatniej aktualizacji, pozostawić w spokoju.
WinMerge – tylko pod Windows

- Porównywanie dwu archiwów z Drupalem w WinMerge
Dobrym darmowym windowsowym narzędziem do porównywania katalogów jest WinMerge.
Katalogi (lub nawet dwa archiwa .tar.gz) wybiera się za pomocą przycisku Porównaj. Na czerwono oznaczone zostaną pliki różniące się między sobą zawartością lub nieistniejące w jednym z katalogów.
By nie musieć wchodzić do każdego z podkatalogów po kolei, warto zaznaczyć opcję Domyślnie uwzględnij podkatalogi
.
Vim – pod Unix/Linux i Windows
Za pomocą wszechstronnego edytora Vim, ze wsparciem DiffUtils w wersji dla Unix/Linux lub dla Windows, a także wtyczki DirDiff, możemy porównać zawartość dwu katalogów.
Ładne pokolorowanie różnic zapewni natomiast zestaw kolorów Twist.
Do porównania katalogów, po uprzednim zainstalowaniu wszystkich potrzebnych rzeczy, używamy poniższej komendy (którą wydajemy w gVimie):
:DirDiff <katalog A> <katalog B>
Okno gVima zostanie podzielone na 3 części – dwie pierwsze będą zajmować podglądy różnic w plikach, a w trzeciej znajdować się będzie lista plików, które okażą się nie być identycznymi. Umieszczając kursor nad linijką odnoszącą się do dwu takich plików i wciskając klawisz o, można otworzyć je na podglądzie.
2. Łatanie plików
Łaty zamieszczane na drupal.org tworzone są programem diff i zapisywane w tzw. „zunifikowanym formacie”. Podobne łaty możemy także uzyskać, tworząc je w programie WinMerge
, korzystając z opisu znajdującego się pod koniec artykułu.
Patch Wizard
Patch Wizard
to skrypt PHP, ułatwiający łatanie plików. Umieściwszy go na serwerze, w miejscu dostępnym z przeglądarki internetowej, możemy załatać cały wybrany katalog wprowadzoną w odpowiednim polu łatą (należy wkleić zawartość pliku z łatą – *.patch).

- Fragment
Patch Wizard
Strategia jest prosta. Gdy pojawia się nowa wersja Drupala, porównuję jej archiwum z zainstalowaną na serwerze, za pomocą WinMerge (widok z opcją Uwzględnij podkatalogi
). WinMerge odfiltrowuje pliki, które wymagają szczególnego potraktowania (zmienione przeze mnie), a całą resztę zaznaczam i korzystam z Narzędzia
→ Generuj patch
, gdzie wybieram opcję otwarcia w zewnętrznym edytorze. Kopiuję łatę i wklejam do przeznaczonego dla niej pola udostępnianego przez skrypt Patch Wizard. Odpalam i Drupal załatany.
Podobnie postąpić można z gotowymi łatami, dostępnymi na drupal.org.
Skrypt umożliwia przekazywanie wartości ustawień poprzez URL (np. ?dir=/home/example w adresie), dzięki czemu mogę skorzystać z zakładek, które „pamiętają” za mnie większość ustawień, a moja rola sprowadza się do wciśnięcia przycisku. Jest to pomocne zwłaszcza, jeśli konieczne jest załatanie kilku witryn.
Dostępne argumenty URL to:
dir– katalog do załataniap–P level
unified– jeśli równa się0, tzw.zunifikowany
format nie jest wykorzystywany
Cały URL wyglądać więc będzie mniej więcej tak:
http://example.com/patch-wizard.php?dir=/home/example/example.com&p=0
Vim
By coś z pomocą Vima załatać, potrzebujemy programu Patch w wersji dla Windows lub dla Unix/Linux.
Przechodzimy do gVima i otwieramy w nim plik, który zamierzamy załatać. Następnie korzystamy z funkcji Podziel łatane przez (nie, nie mam pojęcia, kto ją tak przetłumaczył) i wskazujemy pobrany z drupal.org (albo innej strony) plik z roszerzeniem patch. Wyplute zostanie okienko linii poleceń z komunikatami programu Patch, które zamykamy wciskając Enter. O przebiegu łatania powiadomi nas też Vim – ponownie wciskamy Enter.

- Okno gVim-a z zestawem kolorów Twist, podzielone między załatany, a oryginalny plik
Po lewej stronie okna gVima widoczny będzie nowy, jeszcze nie zapisany, plik będący wynikiem łatania pliku znajdującego się po stronie prawej. Sprawdzamy czy wszystko wygląda w porządku i – upewniwszy się, że kursor znajduje się w lewej części okna – zapisujemy plik, usuwając końcówkę .new. Można go teraz wysłać na serwer.
3. Tworzenie łat
Tworzenie łat ma sens z kilku powodów. Jeśli chcemy udostępnić nasze modyfikacje, oszczędzamy miejsce na serwerze i czas ewentualnych zainteresowanych. Poza tym przydają się w przypadku modyfikacji często aktualizowanych plików, bo nie musimy sami od nowa grzebać w plikach, które zmieniła centrala.
za pomocą WinMerge
Otwieramy do porównania oryginalny plik i jego kopię zmodyfikowaną przez nas oraz wchodzimy do menu Narzędzia → Generuj patch. W nowootwartm okienku Plikiem 1 będzie ten otwarty w lewej części okna, a Plikiem 2 – otwarty w prawej. Jeśli nie odpowiada nam ta kolejność, możemy kliknąć przycisk Zamień.
W polu Wynik wpisujemy ścieżkę i nazwę pliku oczekiwanej łatki (lub klikamy sąsiedni przycisk Przeglądaj). Z grupy opcji o nazwie Format, przy Styl wybieramy Zunifikowany. Przy Kontekst wybrać możemy ile linii sąsiadujących z linią zawierającą zmianę będzie umieszczanych w łacie – im więcej, tym mniejsze ryzyko późniejszego wprowadzenia zmiany w złym miejscu, ale i większe prawdopodobieństwo niedopasowania łaty do pliku, który bardzo się zmienił od czasu jej utworzenia.
za pomocą Patch
Wydajemy polecenie
diff -u plik1 plik2
Kapitanie, nie mam go na radarze!
W wypadku korzystania z Patch bądź DiffUtils pod Windows, konieczne jest dopisanie ścieżek do tych programów do listy zmiennych środowiskowych. Czynimy to poprzez Mój komputer → Właściwości → karta Zaawansowane → Zmienne środowiskowe → Zmienne systemowe. Tam, na liście odszukujemy zmienną Path i na końcu zawartości pola Wartość dodajemy:
- dla Patch:
;C:\Program Files\GNU\Patch\bin - dla DiffUtils:
;C:\Program Files\GNU\DiffUtils\bin
Powyższe ścieżki są domyślnymi – jeśli programy zainstalowane są w niestandardowych katalogach, trzeba je oczywiście wskazać.


