oat-sa/tao-dependency-resolver

解决 TAO 扩展依赖问题


README

从每个需要扩展的 manifest.php 中解析依赖需求树。

默认结果会显示相应的 composer.json require 数组。如果您需要将其写入文件,只需重定向标准输出。

现在可以同时处理扩展名称和存储库名称。

关于问题及其解决方案的更详细解释可以在 文档 中找到。

安装

克隆此存储库。

安装依赖项

$ composer install

最低 PHP 版本要求:7.1

所需的 PHP 扩展:php7.1-xml, php7.1-mbstring

身份验证

在根目录中创建一个 .env 文件,包含您的 GitHub 令牌和组织名称(您可以复制并填写现有的 .env.dist 模板文件)。您需要提供一个有效的 GitHub 令牌,具有“repo”访问权限。

工具

此存储库中有两个工具

依赖解析器

有关此工具的更多信息,请参阅 此处

$ php bin/console oat:dependencies:resolve [--repository-name <repository name> | --extension-name <extension name>] [--main-branch <main repository branch>] [--dependency-branches <dependency branches>] [--repositories] [--file <path to composer.json>]
  • 主要存储库名称:要解析的存储库的名称,例如 "oat-sa/extension-tao-testqti"。
  • 主要扩展名称:"清单名称",例如要解析的扩展的 "taoQtiTest"。
  • 主要扩展分支:要解析的扩展的分支。
  • 依赖分支:为每个依赖项下载的期望分支。格式为 "extensionName1:branchName1,extensionName2:branchName2,...",例如 "tao:develop,taoQtiItem:fix/tao-1234,generis:10.12.14"。未指定所有扩展的分支将默认为 "develop"。
  • 存储库:标志表示必须包含 composer 存储库信息。在私有存储库的情况下,必须设置 ssh 认证才能使用生成的 composer.json 文件。
  • 文件:如果指定,则命令将生成 composer.json 并将其写入到 stdout。目标必须是可写的,可以是相对路径或绝对路径。例如,--file output/composer.json 将在当前工作目录中的 output 目录(在当前工作目录内)生成 composer.json。

必须提供两个选项之一:repository-nameextension-name

用法示例

解析存储库 oat-sa/extension-tao-items 的依赖项(未指定分支,默认为 develop),并将结果写入 /dest/dir/composer.json,输出详细信息

php bin/console oat:dependencies:resolve --repository-name oat-sa/extension-tao-items > /dest/dir/composer.json -vv

将在控制台显示以下内容

app.INFO: Resolving dependencies for repository "oat-sa/extension-tao-item".
app.INFO: Retrieving oat-sa/extension-tao-item/develop/manifest.php
app.INFO: Resolving dependencies for repository "oat-sa/extension-tao-backoffice".
app.INFO: Retrieving oat-sa/extension-tao-backoffice/develop/manifest.php
app.INFO: Resolving dependencies for repository "oat-sa/tao-core".
app.INFO: Retrieving oat-sa/tao-core/develop/manifest.php
app.INFO: Resolving dependencies for repository "oat-sa/generis".
app.INFO: Retrieving oat-sa/generis/develop/manifest.php

并将以下内容写入 /dest/dir/composer.json

{
    "require": {
        "oat-sa/extension-tao-item": "dev-develop",
        "oat-sa/extension-tao-backoffice": "dev-develop",
        "oat-sa/tao-core": "dev-develop",
        "oat-sa/generis": "dev-develop"
    }
}

解析扩展 taoQtiTest 的依赖项,主要分支为 feature/tao-1234,tao 的分支为 feature/tao-1234,generis 的分支为 master,并将结果显示在控制台

php bin/console oat:dependencies:resolve --extension-name taoQtiTest --main-branch feature/tao-1234 --dependency-branches tao:feature/tao-1234,generis:master

将在控制台显示以下内容

{
    "require": {
        "oat-sa/extension-tao-testqti": "dev-feature/TAO-7304-CSRF-timed-token-pool",
        "oat-sa/extension-tao-itemqti": "dev-develop",
        "oat-sa/extension-tao-item": "dev-develop",
        "oat-sa/extension-tao-backoffice": "dev-develop",
        "oat-sa/tao-core": "dev-feature/TAO-7304-CSRF-timed-token-pool",
        "oat-sa/generis": "dev-master",
        "oat-sa/extension-tao-test": "dev-develop",
        "oat-sa/extension-tao-delivery": "dev-develop",
        "oat-sa/extension-tao-outcome": "dev-develop"
    }
}

请求不存在的分支将导致主存储库和依赖项抛出异常

php bin/console oat:dependencies:resolve --repository-name oat-sa/tao-core --main-branch foo
                                                          
  Unable to retrieve reference to "oat-sa/tao-core/foo".
php bin/console oat:dependencies:resolve --repository-name oat-sa/tao-core --dependency-branches generis:bar

  Unable to retrieve reference to "oat-sa/generis/bar".

尝试解析未知存储库的依赖项将导致异常

php bin/console oat:dependencies:resolve --repository-name oat-sa/tao-foo

  Unknown repository "oat-sa/tao-foo".  

尝试解析未知 扩展 的依赖项也将导致异常

php bin/console oat:dependencies:resolve --extension-name extension-tao-bar

  Extension "extension-tao-bar" not found in map.  

但如果它是新添加的扩展,它可能不在扩展映射中。如果是这种情况,您可以使用第二个工具更新扩展映射

php bin/console oat:repositories:update --reload-list

存储库列表器

有关此工具的更多信息,请参阅 此处

此工具读取每个 oat-sa 存储库中的 Github 并维护 扩展名称存储库名称 的映射。

/!\ 这不是每次都需要,当前在 <项目配置目录>/repositoryMap.json 中提供了一个最新的地图,这相当耗时...

更新仓库

从Github读取和分析仓库。

$ php bin/console oat:repositories:update [--reload-list] [--limit limit]
  • --reload-list : 除了分析每个仓库外,还重新加载oat-sa仓库的列表
  • limit : 每次分析仓库的数量

导出仓库列表

将仓库映射导出到CSV文件,以便人类阅读和分析。

$ php bin/console repositories:dump [-f filename]
  • filename : CSV文件名。默认为 <项目根目录>/repositories.csv