web-dev-qa-db-fra.com

Comment appliquer un correctif avec le flux de travail Composer?

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_distribu‌​‌​tion.patch'

J'ai essayé d'exécuter la commande seule; encore une fois, cela n'a pas changé le fichier.

3
Thomas Pappas

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...

Comment installer/mettre à jour un package depuis la source

Pour les nouveaux packages:

Utilisation

composer require vendor/package --prefer-source

Pour les packages existants

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

Définissez-le comme comportement par défaut

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:

Définissez-le comme comportement par défaut pour un package spécifique

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"
}
6
Thomas Pappas

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" 
        }
    },
3
Wasim Khan