web-dev-qa-db-ja.com

Composerワークフローでパッチを適用するにはどうすればよいですか?

プロジェクトにパッチを含める必要があります。 composer.jsonにcweagans/composer-patchesを含め、次の行を追加セクションに追加しました(構成インストーラーで配布を有効にしようとした場合の例です)。

"patches": {
        "drupal/config_installer": {
            "Enable distribution for Configuration installer profile": "patches/config_installer_enable_distribution.patch"
        }
    }

その後、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)

したがって、エラーは発生せず、パッチは正常に適用されたようです。また、ファイルPATCHES.txtがパッケージのルートディレクトリに正常に作成されます。それでもパッチは適用されていません

私はこの方法をGithubから来る他のパッケージで試してみましたが、機能しますが、drupal.orgのモジュールまたはプロファイルでこれを試すたびに、パッチが適用されません。

何か不足していますか?

composer update -vvvを実行したところ、パッチに対して実行されているコマンドが実際にGitであることがわかりました。

git -C 'web/profiles/contrib/config_installer' apply '-p1' '/path/to/project/patches/config_installer_enable_distribu‌​‌​tion.patch'

コマンドを単独で実行してみました。繰り返しますが、ファイルは変更されませんでした。

3
Thomas Pappas

問題は、composerがgit applyを使用してパッチを適用していることです。これは、ソースからインストールされていないパッケージには機能しません。

したがって、解決策はソースからパッケージをインストールすることです。このようにして、パッケージはパッケージとそのリポジトリ(利用可能な場合)をフェッチして、パッチを適用できるようにします。

そう...

ソースからパッケージをインストール/更新する方法

新しいパッケージの場合:

使用する

composer require vendor/package --prefer-source

既存のパッケージの場合

パッケージがすでにインストールされている場合は、composer installcomposer reinstallコマンドはありません )で再フェッチできるように、パッケージを削除する必要があります。そうしてから使用してください

composer install vendor/package --prefer-source

デフォルトの動作として設定します

composer.jsonconfigセクションで、プロジェクトのデフォルトの動作として設定することもできます。

"config": {
      "preferred-install": "source"
    },

更新:

特定のパッケージのデフォルトの動作として設定します

プロジェクト全体をソースからインストールするように設定したくない場合は、特定のパッケージに対してのみ設定できます。そのためには、パッケージのバージョン制約で VCSブランチ を指定する必要があります。

"require": {
        "vendor/package": "dev-branch#branch-hash"
}
6
Thomas Pappas

drupal 8にパッチを適用するには、composer.jsonファイルを編集して余分なセクションを見つけます-

"extra": {
    .
    .
    .
    "patches": {
        "drupal/MODULE_NAME": {
            "ANY_STRING_TO_NAME_THE_APPLYING_PATCH": "PATCH URL"
        }
    },
    "enable-patching": true
}

例えば ​​-

"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
}

次に、composer installを実行すると、パッチが適用されます。

同じパッケージに複数のパッチを適用する場合は、パッケージ名の中に新しいキーを追加します

例:-

"patches": {
   "drupal/MODULE_NAME": {
          "Patch name 1": "Patch 1 Url", 
          "Patch name 2": "Patch 2 Url" 
        }
    },
3
Wasim Khan