Vorrei passare al nuovo core di Drupal ma quel maledetto tema o modulo non è stato aggiornato e non esiste una versione ufficialmente compatibile.
Questo blog ha avuto proprio questo problema: provo ad aggiornare e... il modulo X o il tema Y non c'è!
Sono molti anni che bighellono nel mondo di Drupal e se il Core avanza con un cronoprogramma degno dei migliori programmi spaziali della NASA, la storia dei moduli "contrib" è tutta un'altra. I maintainer di temi e moduli a volte latitano e qualcosa viene lasciato indietro, ma l'avanzata del Core, inesorabile, non lascia tempo infinito agli amministratori che ad un certo punto si trovano a dover forzatamente aggiornare.
In quanto mio blog personale ho pianificato nel buio della mia stanzetta di migrare questo sito per primo dicendo: "Ma sì... se si rompe qualcosa in fondo è piccolo piccolo, ha pochi moduli ed un tema fresco, e se qualcosa si rompe perché D11 è appena uscito... due botte e lo aggiusto!".
Sfiga o fatalità... nel tempo periodicamente ci ho provato riscontrando sempre lo stesso problema: il tema non veniva aggiornato e nemmeno il modulo geshifilter.
Preparavo la migrazione e poi... Composer mi sbarrava la strada! Tutto bello, ma senza Composer un sito Drupal moderno non lo si mantiene, e rinunciare a Composer non l'ho mai considerata una strada percorribile.
Ho pensato di forzare o fare il fork dei due progetti abbandonati, ma poi so come finisce: visto che funzionano finisco per abbandonarli anch'io... quindi ho deciso di non farlo.
Ho pensato di creare delle patch al file .info.yml per renderli compatibili... ma Composer si rifiuta di installare codice che considera incompatibile, non scarica il pacchetto e di conseguenza la patch non può essere applicata.
La soluzione a questo stallo l'ho trovata con mglaman/composer-drupal-lenient, un plugin per Composer creato da Matt Glaman.
Come funziona?
Questo plugin agisce a monte, intercettando i metadati dei pacchetti inseriti in una sua lista speciale (allowed-list) prima che Composer calcoli l'albero delle dipendenze:
- Rimuove temporaneamente il vincolo di versione di
drupal/coreper i pacchetti specificati. - Composer risolve le dipendenze e scarica il modulo.
- Il plugin delle patch (
cweagans/composer-patches) interviene subito dopo applicando la patch locale (che aggiunge la compatibilità^11al file.info.ymldel modulo o tema).
Installazione del plugin
Per aggiungere il plugin al progetto basta eseguire da terminale:
Configurazione in composer.json
Nel file composer.json del progetto occorre abilitare il plugin e specificare quali pacchetti devono essere gestiti in modo "leniente", oltre alle relative patch:
"config": {
"allow-plugins": {
"mglaman/composer-drupal-lenient": true
}
},
"extra": {
"drupal-lenient": {
"allowed-list": [
"drupal/geshifilter",
"drupal/showcase_lite"
]
},
"patches": {
"drupal/showcase_lite": {
"Supporto Drupal 11": "./config/patch/showcase_d11.patch"
},
"drupal/geshifilter": {
"Supporto Drupal 11": "./config/patch/geshifilter_d11.patch"
}
}
}
}
La patch locale per il file .info.yml
La patch (ad esempio config/patch/geshifilter_d11.patch) conterrà l'estensione del vincolo core_version_requirement:
index 60109e9..3461fa0 100644
--- a/geshifilter.info.yml
+++ b/geshifilter.info.yml
@@ -2,5 +2,5 @@
name: 'GeSHi Filter'
description: 'Provides a filter to highlight source code using the GeSHi library'
type: module
package: 'Filters'
-core_version_requirement: ^9.3 || ^10
+core_version_requirement: ^9.3 || ^10 || ^11
Conclusione
Composer Drupal Lenient mi sta dando un po di tempo extra per trovare delle alternative, ma è un arma potente e se un domani volessi balzare tra i primi con un bel core 12 ... credo che nessuno modulo potra questa volta impedirmi di provarci!
- Accedi per poter commentare