davidrjonas/composer-lock-diff

查看在执行 composer update 后发生了哪些变化。

1.7.0 2022-03-11 17:43 UTC

README

通过将 composer.lock 与 git HEAD 进行比较,查看运行 composer update 后哪些包已发生变化。

需求

  • php >= 5.3

没有其他依赖。

安装

composer global require davidrjonas/composer-lock-diff:^1.0

# With zsh, run `rehash` to make it known to the shell.

# try it
composer-lock-diff --help

如果未找到 composer-lock-diff,请确保 ~/.composer/vendor/bin 包含在您的 $PATH 环境变量中。有关如何操作的更多信息,请参阅 Stack Overflow 上的此问题:如何将 composer-vendor-bin 目录放置在您的 PATH 中

用法

composer update
# don't commit yet!
composer-lock-diff

或者从 vim 中,要插入输出到提交信息中,请输入 :r!composer-lock-diff

选项

  • --path, -p: 使用哪个基本路径进行前缀。默认 "./"
  • --from: 要比较的文件、git 引用或 git 引用与文件名(HEAD:composer.lock)
  • --to: 要比较的文件、git 引用或 git 引用与文件名(composer.lock)
  • --md: Markdown 表格输出
  • --json: json 输出
  • --pretty: 与 --json 结合时进行美观输出(仅适用于 >=5.4)
  • --no-links: 在纯文本或 markdown 中不包括比较链接
  • --only-prod: 仅包括来自 packages 的更改
  • --only-dev: 仅包括来自 packages-dev 的更改
  • --vcs: 强制 vcs(git、svn 等)。默认从路径自动检测

^ 文件包括任何可用作为 协议流包装器 的内容,例如 URL。

示例纯文本表格输出

+--------------------+-------+--------+------------------------------------------------------------------+
| Production Changes | From  | To     | Compare                                                          |
+--------------------+-------+--------+------------------------------------------------------------------+
| guzzlehttp/guzzle  | 6.2.0 | 6.3.0  | https://github.com/guzzle/guzzle/compare/6.2.0...6.3.0           |
| hashids/hashids    | 2.0.0 | 2.0.4  | https://github.com/ivanakimov/hashids.php/compare/2.0.0...2.0.4  |
| league/flysystem   | 1.0.0 | 1.0.42 | https://github.com/thephpleague/flysystem/compare/1.0.0...1.0.42 |
| monolog/monolog    | NEW   | 1.21.0 |                                                                  |
+--------------------+-------+--------+------------------------------------------------------------------+

+------------------+--------+---------+---------+
| Dev Changes      | From   | To      | Compare |
+------------------+--------+---------+---------+
| phpspec/php-diff | v1.0.2 | REMOVED |         |
+------------------+--------+---------+---------+

Markdown 表格

原始

| Production Changes | From  | To     | Compare                                                                 |
|--------------------|-------|--------|-------------------------------------------------------------------------|
| guzzlehttp/guzzle  | 6.2.0 | 6.3.0  | [...](https://github.com/guzzle/guzzle/compare/6.2.0...6.3.0)           |
| hashids/hashids    | 2.0.0 | 2.0.4  | [...](https://github.com/ivanakimov/hashids.php/compare/2.0.0...2.0.4)  |
| league/flysystem   | 1.0.0 | 1.0.42 | [...](https://github.com/thephpleague/flysystem/compare/1.0.0...1.0.42) |
| monolog/monolog    | NEW   | 1.21.0 |                                                                         |

| Dev Changes      | From   | To      | Compare |
|------------------|--------|---------|---------|
| phpspec/php-diff | v1.0.2 | REMOVED |         |

渲染

开发

总是欢迎新功能!请遵循以下指南

  • 尽量匹配现有代码的风格,即使它不是您自己的风格(抱歉!)。
  • 确保有方法来测试功能。
  • 使用 PHP 5.3 进行测试(我是认真的!)> = 5.4 < 7,7.current。Docker 很有帮助,特别是对于旧版本。只需运行 ubuntu:12.04 图像并安装 php 5.3 和 14.04 的 5.6。如果您遇到困难,我可以提供帮助。

Makefile 中有一些测试用例。运行 make | less 并检查输出。如果您需要特定版本或更多信息,请继续阅读。

要手动使用测试数据运行,只需将 --to--from 参数指向锁文件。

php ./composer-lock-diff --from ./test-data/composer.from.lock --to ./test-data/composer.to.lock

Docker 非常有助于针对特定版本的 php 和/或 composer。

docker run --rm -it -v "$PWD":/src -w /src php:7.4.2 \
  php ./composer-lock-diff --from ./test-data/composer.from.lock --to ./test-data/composer.to.lock

有时您想测试与 git 相关的函数。为此,首先我创建一个临时存储库。然后我将其中的 test-data/composer.from.lock 作为 composer.lock 复制到其中,以设置上一个状态,并将 test-data/composer.to.json 作为 composer.json 以设置未来状态。提交这些文件后,运行 composer-lock-diff 并使用您要测试的选项,并直观地检查结果。

mkdir tmp && cd tmp
git init
cp ../test-data/composer.to.json composer.json
cp ../test-data/composer.from.lock composer.lock
git add .
git commit -m "initial"

composer update
# or
docker run --rm -it -v "$PWD":/src -w /src composer:latest php composer update

php ../composer-lock-diff

# or, if you want to use docker, you'll need git
cd ..
docker run --rm -it -v "$PWD":/src -w /src php:7.4.2 bash
apt-get update && apt-get install -y git
# You may want composer as well,
curl -OL https://getcomposer.org.cn/download/1.9.3/composer.phar
cd tmp
php ../composer.phar update
php ../composer-lock-diff

向 test-data/ 添加测试用例

  • ./tmp 中创建一个新的临时 git 存储库
  • ../test-data/composer.from.json 作为 composer.json 复制,并将 ../test-data/composer.from.lock 作为 composer.lock 复制。
  • 提交它们。
  • 运行 composer install
  • 将您的测试案例添加到composer.json中。请使用确切版本。
  • 运行composer update
  • 生成的composer.lock应该类似于../test-data/composer.from.lock,但由于临时依赖关系,会有所不同。没有办法完全避免这种情况。请使用composer-lock-diff确保没有命名的包更改版本,并且您的新的测试案例存在。
  • composer.json复制到../test-data/composer.from.json,将composer.lock复制到composer.from.lock
  • ../test-data/composer.to.json作为composer.json使用。
  • 将您的测试案例添加到composer.json中。同样,确切版本最佳。
  • 生成一个新的锁定文件。
  • 使用composer-lock-diff测试您的功能。
  • 当您满意时,将composer.json复制到../test-data/composer.to.json,将composer.lock复制到../test-data/composer.to.lock

测试案例

查看Makefile

  • comopser-lock-diff # 无参数
  • composer-lock-diff --from ./test-data/composer.from.lock --to ./test-data/composer.to.lock
  • composer-lock-diff --path ./test-data/
  • composer-lock-diff --from <git ref> # 这与 '无参数' 进行测试
  • composer-lock-diff --from <git ref with filename>
  • composer-lock-diff --to <git ref>
  • composer-lock-diff --to <git ref with filename>
  • composer-lock-diff --only-dev
  • composer-lock-diff --only-prod
  • composer-lock-diff --no-links
  • composer-lock-diff --json
  • composer-lock-diff --json --pretty
  • composer-lock-diff --md
  • composer-lock-diff --md --no-links

如果有人可以帮助在Windows上进行测试,将会非常感激!

贡献者

感谢所有分享想法和代码的人!特别是: