Requer módulo contrib v8 apenas com patch v9

Sep 18 2020
  • Dado que tenho a instalação do Drupal 9 composer com o composer-patchesplugin
  • e dado um módulo contrib com uma versão v8 estável, mas sem versão v9 (nem mesmo o branch dev)
  • e dado que o módulo contrib tem um patch v9 funcional na fila de problemas

existe algum método para instalar esse módulo + patch no composer? Mesmo se eu adicionar manualmente ambos, o pacote e o patch, ao meu composer.json, ainda não posso requireou updateeste módulo com o composer devido a versões conflitantes. Eu realmente quero evitar a duplicação de /contribcódigo na /custombase de código do meu projeto . Minha solução alternativa atual é:

  • bifurcar esse módulo para o meu próprio repositório git privado
  • aplicando patch lá
  • criando um novo composer.jsonno meu git privado e alterando o fornecedor do pacote para meucustom_private_vendor
  • adicionando meu git privado como repositório VCS no projeto D9 composer.json
  • e depois composer require custom_private_vendor/contrib_module

Isso cumpre meu objetivo de não duplicar o módulo contrib na base de código personalizada do meu projeto, mas sempre que faço isso sinto vontade de lavar minhas mãos sujas.

Existe algo mais elegante como composer require drupal/contrib_module --apply-patch-firstou posso de alguma forma direcionar o git do drupal.org com um patch específico incluído?

Respostas

4 Darvanen Sep 23 2020 at 06:00

Você tem a ideia certa, mas não precisa fazer um fork do repositório do Drupal. Você pode configurar o composer para ler o repositório git do Drupal em vez de usar packagist para os módulos impertinentes como este:

    {
        "type": "package",
        "package": {
            "name": "drupal_git/cache_control_override",
            "type": "drupal-module",
            "version": "1.0.0",
            "source": {
                "type": "git",
                "url": "https://git.drupalcode.org/project/cache_control_override.git",
                "reference": "8db91684a427366d8f9c51f60cbac10c2d586d95"
            }
        }
    },

Observe que a 'referência' é um hash de confirmação, embora pareça que você também pode usar tags .

E, em seguida, faça o patch normalmente usando o composer:

"drupal_git/cache_control_override": {
    "Drupal 9 Compatibility (3132036)": "https://www.drupal.org/files/issues/2020-04-29/Drupal-9-readiness-3132036-2.patch"
},

(Descaradamente roubado de @acbramley no Drupal Slack porque vale a pena divulgar esse conhecimento)