Je dois inclure un patch dans mon projet. J'ai inclus cweagans/composer-patches dans composer.json et ajouté les lignes suivantes dans la section supplémentaire (l'exemple provient de la tentative d'activation de la distribution dans le programme d'installation de configuration).
"patches": {
"drupal/config_installer": {
"Enable distribution for Configuration installer profile": "patches/config_installer_enable_distribution.patch"
}
}
Ensuite, je lance composer update
.
- Installing drupal/config_installer (1.5.0): Loading from cache
- Applying patches for drupal/config_installer
patches/config_installer_enable_distribution.patch (Enable distribution for Configuration installer profile)
Je n'ai donc aucune erreur et le patch semble avoir été appliqué avec succès. Le fichier PATCHES.txt
est créé avec succès dans le répertoire racine du package. Pourtant, le patch n'a pas été appliqué.
J'ai essayé cette méthode avec d'autres packages provenant de Github et cela fonctionne, mais chaque fois que j'essaye avec un module ou un profil de drupal.org, le patch n'est pas appliqué.
Suis-je en train de manquer quelque chose?
Quand j'ai couru composer update -vvv
, J'ai vu que la commande qui s'exécute pour le patch est bien avec Git.
git -C 'web/profiles/contrib/config_installer' apply '-p1' '/path/to/project/patches/config_installer_enable_distribution.patch'
J'ai essayé d'exécuter la commande seule; encore une fois, cela n'a pas changé le fichier.
Le problème est que composer applique des correctifs à l'aide de git apply
qui ne fonctionne pas pour les packages qui ne sont pas installés à partir de la source.
Par conséquent, la solution consiste à installer les packages à partir des sources. De cette façon, le package récupérera le package avec son référentiel (lorsqu'il sera disponible), ce qui lui permettra d'être corrigé.
Donc...
Utilisation
composer require vendor/package --prefer-source
Si votre package est déjà installé, vous devez le supprimer afin de pouvoir le récupérer avec composer install
( il n'y a pas composer reinstall
commande ). Faites-le, puis utilisez
composer install vendor/package --prefer-source
Vous pouvez également le configurer comme comportement par défaut du projet dans la section config
de composer.json
:
"config": {
"preferred-install": "source"
},
Mise à jour:
Si vous ne souhaitez pas configurer l'intégralité de votre projet pour une installation à partir des sources, vous pouvez le faire pour un package spécifique uniquement. Pour ce faire, vous devez spécifier VCS Branch dans la contrainte de version du package.
"require": {
"vendor/package": "dev-branch#branch-hash"
}
Pour appliquer un patch dans drupal 8, éditez le fichier composer.json et trouvez la section supplémentaire -
"extra": {
.
.
.
"patches": {
"drupal/MODULE_NAME": {
"ANY_STRING_TO_NAME_THE_APPLYING_PATCH": "PATCH URL"
}
},
"enable-patching": true
}
Par exemple -
"extra": {
"installer-types": [
"bower-asset",
"npm-asset"
],
"patches": {
"drupal/recaptcha": {
"Drupal recaptcha ajax fix syncing": "https://www.drupal.org/files/issues/2019-04-17/recaptcha-ajax-2493183-172.patch"
}
},
"enable-patching": true
}
Ensuite, exécutez composer install et votre patch est appliqué.
Si vous souhaitez appliquer plusieurs correctifs pour le même package, ajoutez une nouvelle clé à l'intérieur du nom du package
Exemple :-
"patches": {
"drupal/MODULE_NAME": {
"Patch name 1": "Patch 1 Url",
"Patch name 2": "Patch 2 Url"
}
},