Vad är en patch? Steg för steg guide hur du själv gör en till Drupal

En patch kan jämföras med ett plåster med en unik passform för ett unikt skrubbsår. Patchen bygger man för att fixa något som man tycker är fel i en modul (core eller contrib) som man använder. Då man listat ut hur man kan fixa den kan man först applicera den på sin egen sajt, och sedan dela den med communityn så att alla kan få nytta av den. Passar väl rätt bra ihop med public service eller hur?

Min första patch skapade jag förra veckan. Vi använder Redirect modulen för att hantera namnbyten på artiklar. Om en artikel byter namn på vår sajt ändras nämligen också adressen till artikeln, och om artikeln då redan hunnit delas i social medier så skulle besökare den vägen inte hitta artikeln utan redirect modulen.

Problemet uppstår ifall artikeln först döps till ”Kalle Anka är bäst!”, sedan döps om till ”Kalle Anka bäst!”. Då skapas en hänvisning från ”Kalle Anka är bäst!” till ”Kalle Anka bäst!”. Om man sedan döper om artikeln till ”Kalle Anka är bäst!” döps artikeln om, och det finns redan en hänvisning som pekar på ”Kalle Anka är bäst!”. En infinite loop har skapats, då besökaren skickas runt i en cirkel utan att någonsin kunna stanna (Sajten märker dock av felet och bryter loopen, men besökaren kan inte läsa artikeln).

Det felmeddelande som visades var inte särskilt tydligt för en icke tekniskt kunnig. Där stod ”Oops, looks like this request tried to create an infinite loop. We do not allow such things here. We are a professional website!”.

Jag tänkte jag skulle översätta det till något tydligare, samt inkludera ett lösningsförslag åt den som skapade felet. Jag kunde dock inte göra det, för översättningsfunktionen kunde inte hitta meningen i fråga. Jag bestämde mig för att kolla på modulens kod, och kunde där konstatera att t() översättningsfunktionen saknades. Dessutom visades felet som ett grönt statusmeddelande. Jag ville ändra det till ett gult eller rött varningsmeddelande.

Genom en sökning på ”create Drupal patch” hittade jag en manual för att skapa en patch (Quick and simple patch). Man klarar sig med det som står på modulens ”versioner” sida, gör en patch för redirect. Följande Youtube video guidar dig genom git och drupal.org issue skapandet.

I korthet gjorde jag följande:

  1. Ändrade på min local dev version av redirect modulen för att kolla om jag överhuvudtaget kunde fixa problemet
  2. Installerade en ren version av Drupal 7.x (min local dev är så modifierad att det är bäst att testa och skapa patchen från en så ren install som möjligt
  3. Installerade git_deploy som behövs för att generera all info som behövs till patchen
  4. Installerade dev versionen av redirect (git clone av dev branch) och pathauto som behövdes för att testa den ändrade koden
  5. Gjorde ändringarna i filen
  6. Gå till modulens mapp med CMD, kör git status. Du ser då ett meddelande om att filen du ändrat har ändrats.
  7. Kör git diff > [description]-[issue-number]-[comment-number].patch (du kan testa att döpa den till vad som helst, för att se att det fungerar. Filen finns sedan i modulens mapp) Fortsätt sedan med följande steg och döp sedan om testfilen du skapade eller kör kommandot en gång till.
  8. Gick till drupal.org och redirect modulen och skapade en ny issue. Där beskrev jag problemet och hur jag tänkt lösa det. Ta issue nummern från url:en efter att du sparat din issue, och döp patchen enligt namngivningskonventionen. I mitt fall blev det missing_t_function-1903228-1.patch
  9. Skriv en kommentar och bifoga patchen, ändra status till needs review
  10. Vänta på att någon av upprätthållarna kollar på din patch och bifogar den först till dev branchen och sedan till den stabila versionen
  11. Om du inte kan vänta kan du också ta patchen i bruk bara på din egen sajt i väntan på att den blir tillgänglig via modulen
  12. Patchen denna bloggpost handlar om blev infogad i dev branchen efter en vecka

Här kan du läsa issuen jag skapade för patchen:
#1903228 – Missing t() function in drupal_set_message

Författare: Mårten Seiplax

Jobbar på svenska.yle.fi med det grafiska utseendet, kodning och sånt. Följ mig på Twitter eller Google +