Как проверить, обновлен ли composer.lock?

Во время разработки (несколько человек в команде) иногда composer install :

Внимание: файл блокировки не обновляется с последними изменениями в composer.json. Вы можете получать устаревшие зависимости. Запустите обновление, чтобы обновить их.

Есть ли способ проверить это очень быстро (в миллисекундах, без каких-либо изменений)?

Я понимаю, как работает композитор. Однако при слиянии кода в нем не обязательно возникают конфликты слияния в файле composer.json или composer.lock и не сложно запускать composer install все время, когда theres почти никогда не изменяется, и эта команда занимает несколько минут.

Если я могу быстро протестировать, если ошибка сбоя выпала из синхронизации, я могу создать ее в среде bash, чтобы уведомлять каждую команду. Подобно тому, как люди, как их git status должны быть встроены в их подсказку bash.

Более того, это имеет смысл в CI, чтобы убедиться, что он пробирается к устойчивой ветке.

Расширение от @Domster, решение в чистом bash:

 COMPOSER_IN_SYNC=$(expr "`cat composer.lock | grep '"hash":' | cut -d'"' -f4`" = "`md5sum composer.json | cut -d ' ' -f 1`") 

$COMPOSER_IN_SYNC будет 0 или 1 соответственно.

Да, есть способ проверить это очень быстро.

«Устаревшая» проверка основана на хеше содержимого composer.json , хранящемся в composer.lock . Там нет соли, и это прямолинейный хеш содержимого, так что это очень и очень легко сделать.

 <?php $lock = json_decode(file_get_contents('composer.lock'))->hash; $json = md5(file_get_contents('composer.json')); if ($lock !== $json) { echo "Lock file out of date\n"; exit(1); } echo "Lock file up to date\n"; exit(0); 

Вы можете запустить

 composer install --dry-run 

–dry-run Выводит операции, но ничего не выполняет (неявно разрешает –verbose).

Это ничего не изменит, но покажет предупреждение, если оно не обновлено. Но по-прежнему придется проверять серверы на наличие новых версий установленных пакетов, поэтому, если у вас много установленных, это может занять больше миллисекунды. Во всяком случае, это быстрее.

в более новых версиях (я полагаю, 1.3+) вы можете запустить следующее:

 $ composer validate --no-check-all --no-check-publish 

Что могло бы вывести что-то вроде этого (с уловимым кодом выхода ошибки):

 ./composer.json is valid for simple usage with composer but has strict errors that make it unable to be published as a package: See https://getcomposer.org/doc/04-schema.md for details on the schema The lock file is not up to date with the latest changes in composer.json, it is recommended that you run `composer update`.