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 |
---|
language | bash |
---|
theme | Confluence |
---|
|
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 |
---|
language | bash |
---|
theme | Confluence |
---|
|
$ 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 |
---|
language | bash |
---|
theme | Confluence |
---|
|
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 |
---|
language | bash |
---|
theme | Confluence |
---|
|
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 |
---|
language | bash |
---|
theme | Confluence |
---|
title | fix_patch_paths.sh |
---|
collapse | true |
---|
|
#!/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 |
---|
language | bash |
---|
theme | Confluence |
---|
|
chmod +x fix_patch_paths.sh |
Io per comodità l'ho inserito in $HOME/.gitconfig come alias
Code Block |
---|
language | bash |
---|
theme | Confluence |
---|
|
fix-patch = "!f() { $HOME/bin/fix_patch_paths.sh \"$1\"; }; f" |
Quindi quando ho bisogno di creare una patch
Code Block |
---|
language | bash |
---|
theme | Confluence |
---|
title | FINAL |
---|
|
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 |
---|
language | java |
---|
theme | Confluence |
---|
title | composer.patches.json |
---|
collapse | true |
---|
|
{
"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 |
---|
language | bash |
---|
theme | Confluence |
---|
title | Final steps |
---|
collapse | true |
---|
|
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
|