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

  1. 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?
  2. 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?
  3. 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ędziaGeneruj 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łatania
  • p – 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ędziaGeneruj 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 komputerWłaściwości → karta ZaawansowaneZmienne środowiskoweZmienne 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ć.

Odpowiedz

Upewnij się, że kliknąłeś odnośnik Odpowiedz, znajdujący się przy wypowiedzi, do której rzeczywiście chcesz się odnieść! Jego wybór nie jest bez znaczenia.

Odpowiednio formatuj tekst, oznaczaj cytaty i wklejany kod.

Zawartość pola nie będzie udostępniana publicznie.
Wysłanie formularza jest równoznaczne z akceptacją polityki prywatności usługi Mollom.