Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Per la creazione di una patch servono i seguenti passaggi.

  • Aggiornate il branch master tirando le ultime modifiche
  • create un branch per lo scopo (es. patch) 

    Code Block
    languagebash
    themeConfluence
    git checkout -b patch
  • fate le modifiche necessarie dove state lavorando (es. web/modules/contrib/basicshib/src/AuthenticationHandler.php)
  • appena finite fate un commit es. 

    Code Block
    languagebash
    themeConfluence
    $ git commit -m"basicshib force https on target redirect"
    [patch cecd10cde] basicshib force https on target redirect
     1 file changed, 3 insertions(+), 2 deletions(-)
    
    
  • Una volta che abbiamo il commit creiamo la patch tramite git 

    Code Block
    languagebash
    themeConfluence
    git format-patch origin/master (prende come riferimento l'origin del branch master)
    git format-patch master (prende come riferimento la nostra copia in locale del branch master)
  • questo genera un file per commit di differenza tra i due branch, ma visto che abbiamo fatto un branch subito prima di cominciare di lavorare, genera soltanto un commit come patch e lo salva nella root del progetto (se abbiamo lanciato il comando del git dalla root del nostro progetto; in questo caso mi ha creato la 0001-basicshib-force-https-on-target-redirect.patch (prende come nome per la patch il commento che abbiamo messo nel commit di prima).
  • All'interno questa patch genera percorsi che non vanno bene per composer, quindi bisogna modificarla un po'.
Code Block
languagebash
themeConfluence
diff --git a/web/modules/contrib/basicshib/src/AuthenticationHandler.php b/web/modules/contrib/basicshib/src/AuthenticationHandler.php
index 282fc4832..2db2f472b 100644
--- a/web/modules/contrib/basicshib/src/AuthenticationHandler.php
+++ b/web/modules/contrib/basicshib/src/AuthenticationHandler.php

in particolare solo in queste righe dove c'è la diff --git e le seguenti due righe che segnalano le differenze non ci deve essere web/ nel percorso.

Quindi va tolto, a mano, oppure utilizzando uno script come per esempio

Code Block
languagebash
themeConfluence
titlefix_patch_paths.sh
collapsetrue
#!/bin/bash

# Verifica che sia stato fornito un file come argomento
if [ $# -ne 1 ]; then
    echo "Usage: $0 <patch_file>"
    exit 1
fi

patch_file="$1"

# Esegui il replace nei percorsi all'interno del file patch
sed -i 's|a/web/|a/|g' "$patch_file"
sed -i 's|b/web/|b/|g' "$patch_file"

echo "Replace completato nei percorsi del file patch."

Una volta posizionato il file nel vostro filesystem, bisogna dare i permessi di esecuzione

Code Block
languagebash
themeConfluence
chmod +x fix_patch_paths.sh


Io per comodità l'ho inserito in $HOME/.gitconfig  come alias

Code Block
languagebash
themeConfluence
fix-patch = "!f() { $HOME/bin/fix_patch_paths.sh \"$1\"; }; f"


Quindi quando ho bisogno di creare una patch

Code Block
languagebash
themeConfluence
titleFINAL
git format-patch master
git fix-patch /home/toli/portals/prod_unimibd9/0001-basicshib-force-https-on-target-redirect.patch (percorso assoluto)


Ora bisogna inserirlo nel composer:

Code Block
languagejava
themeConfluence
titlecomposer.patches.json
collapsetrue
{
  "patches": {   
	"drupal/basicshib": {
      "force https on target redirect, on shibboleth block link" : "patches/0001-basicshib-force-https-on-target-redirect.patch"
    }
  }
}

e posizionare la nostra patch all'interno della cartella patches, situata nella root della nostra directory.
Fatto;  metto il resto dei comandi che io di solito utilizzo, per riportare tutte le modifiche in master

Code Block
languagebash
themeConfluence
titleFinal steps
collapsetrue
ddev composer require "drupal/basicshib: ^2.0" (utilizzo ddev perché ho già impostato php 7.4 e tutte le cose che abbiamo in prod, il mio pc ha php 8.1.2)

git add -A
git commit -m"Qualcosa di significativo"
git checkout master
git pull origin/master (così non devo avere dei merge inutili da commit  fatti dai colleghi nel frattempo)
git cherry-pick (il commit ID che abbiamo creato poco fa nel branch patch)
git branch -D patch (non mi serve più)
git push origin/master