West 发行说明
v1.5.0
主要变更:
新增自动缓存支持。向
west update传入--auto-cache <directory>参数即可使用。
其他变更:
允许在
west update中同时使用--name-cache和--path-cache。在清单模式中记录默认修订版本值。
缺陷修复:
允许清单项目列表为空或缺失。
冻结或解析清单文件时,确保
manifest.group-filter列表顺序具有确定性。
v1.4.0
变更:
允许向配置字符串追加数据。要向
<name>的值追加内容,输入:west config -a <name> <value>。为
west manifest添加--untracked参数选项。在工作区中运行west manifest --untracked,可打印所有未被 west 跟踪或管理的文件和目录。为
west list添加--inactive参数选项,支持打印非活动项目。west manifest --resolve和west manifest --freeze命令支持--active-only参数选项,因此可以冻结启用了项目或组过滤器的工作区。
API 变更:
west.manifest.Manifest的as_dict()、as_frozen_dict()、as_yaml()和as_frozen_yaml()方法现在接受可选参数active_only(默认为False),用于返回包含全部项目或仅活动项目的对象。
v1.3.0
主要变更:
新增对 West 别名 命令的支持。
采用 pyproject TOML specification 进行打包。
其他变更:
新增子模块缓存支持。
默认将清单文件按 UTF-8 解码。
将
west diff和west status的未知参数传给底层git命令。为
west diff添加--manifest参数,用于将当前工作区与清单修订版本比较。west forall 可以使用环境变量,已定义以下变量:
WEST_PROJECT_NAMEWEST_PROJECT_PATHWEST_PROJECT_ABSPATHWEST_PROJECT_REVISIONWEST_PROJECT_URLWEST_PROJECT_REMOTE
支持提前处理参数
-q/--quiet,以减少输出。为
west init添加-o/--clone-opt参数,用于传给git clone。支持 Python 3.13,停止支持 Python 3.8。
禁止清单将项目放在
.west目录中。为
west init添加 NTFS 兼容处理和--rename-delay。在
-vvv调试模式下调用 die 时打印堆栈跟踪。
缺陷修复:
使用
'backslashreplace',避免子进程输出格式错误的 UTF 数据时崩溃。修复
west diff对存在合并冲突的仓库的处理,同时改进错误输出和git diff返回码处理。修复使用 Git 子模块时,
west manifest命令的--freeze和--resolve行为。
v1.2.0
主要变更:
新增
west grep命令,用于在 west 工作区的仓库中运行“grep 工具”。目前支持的工具包括git grep、ripgrep 和标准grep。要从所有已克隆的活动仓库中获取
git grep foo的结果,运行:west grep foo以下是使用
west grep运行不同 grep 命令的其他示例:git grep --untrackedwest grep --untracked fooripgrepwest grep --tool ripgrep foogrep --recursivewest grep --tool grep foo要切换工作区中的默认 grep 工具,运行下表中的相应命令:
ripgrepwest config grep.tool ripgrepgrepwest config grep.tool grep更多详情可运行
west help grep。
其他变更:
清单文件格式现在支持在每个
projects:元素中设置description字段。示例见 项目。west list --format现在接受格式字符串中的{description},用于打印项目的description:值。west compare现在始终打印 manifest-rev 分支 的相关信息。
缺陷修复:
如果目标目录已存在,
west init会中止。
API 变更:
west.commands.WestCommand的check_call()和check_output()方法,现在接受可传给底层 subprocess 函数的任意关键字参数。west.commands.WestCommand.run_subprocess():新增对subprocess.run()的包装。由于WestCommand已有同名方法,因此不能命名为run()。west.commands.WestCommand的dbg()、inf()、wrn()和err()方法现在均接受end关键字参数,并将其传给print()。west.manifest.Project现在具有description属性,包含清单数据中description:字段解析后的值。
v1.1.0
主要变更:
west compare:新增命令,将工作区状态与清单比较。支持新的
manifest.project-filter配置选项,详情见 内置配置选项。设置此选项时,目前不能使用west manifest --freeze和west manifest --resolve命令。此限制可能在后续版本中移除。项目名称包含逗号(
,)或空白时,现在会产生警告。如果设置了新的manifest.project-filter配置选项,这些警告会变为错误。未来 west 的主要版本可能将这些警告统一提升为错误。
其他变更:
west forall现在接受--group参数,可将命令限制为只在一个或多个组中运行。详情可运行west help forall。所有 west 命令现在都会输出 west API 模块产生的警告及以上级别日志。此外,向 west 传入一次
--verbose参数,会包含各命令的信息级消息;传入两次,则包含调试消息。
缺陷修复:
改进了多处错误消息、调试日志和错误处理。
API 变更:
west.manifest.Manifest.is_active()现在遵循manifest.project-filter配置选项的值。
v1.0.1
主要变更:
此版本开始支持清单模式版本“1.0”。其功能与“0.13”完全相同,但不希望使用“0.x”清单“version:”字段的应用可以采用它。此功能详情见 版本。
缺陷修复:
West 收到中断信号时,不再以成功状态码退出,而是返回平台特定的错误码,向调用环境表明进程被中断。
v1.0.0
此版本的主要变更:
West API 现已声明为稳定。任何破坏兼容性的变更,都会通过主版本从 v1.x.y 升至 v2.x.y 来表达。
West v1.0 不再适用于 Zephyr v1.14 LTS。该长期支持版本早已被 Zephyr v2.7 LTS 取代。如果必须使用 Zephyr v1.14,需要使用 west v0.14 或更早版本。
与 Zephyr 其他部分一致,west 现在要求 Python v3.8 或更高版本
West 命令不再接受缩写命令行参数。例如,现在必须指定
west update --keep-descendants,不能使用west update --keep-d等缩写。这是针对 Zephyr 全部 Python 脚本命令行接口的统一改动。当命令新增与现有选项名称相似但行为不同的选项时,缩写在实践中会产生问题。
其他变更:
所有 west 内置函数均已停止使用
west.logwest update:新增--submodule-init-config选项。详情见提交 9ba92b05。
缺陷修复:
加载失败的 west 扩展命令有时会输出堆栈。此问题已修复,现在会打印合理的错误消息。
west config现在会拒绝选项名称中缺少.的无效配置选项参数
API 变更:
移除了为兼容 Zephyr v1.14 LTS 而保留的已弃用
west.build模块移除了为兼容 Zephyr v1.14 LTS 而保留的已弃用
west.cmake模块west.log模块现已弃用。此模块使用全局状态,在多个不同 Python 模块可能依赖它作为 API 时,使用起来不够方便。west.commands 模块新增一些 API,为后续对命令输出添加全局详细程度控制,以及移除
west包 API 中的全局状态打下基础:west.commands.WestCommand.__init__()新增关键字参数:verbositywest.commands.WestCommand新增属性:color_uiwest.commands.WestCommand新增方法,扩展命令应使用这些方法输出信息,而不是直接写入 sys.stdout 或 sys.stderr:inf()、wrn()、err()、die()、banner()、small_banner()新增
west.commands.VERBOSITY枚举
v0.14.0
缺陷修复:
使用错误的本地配置文件运行 west 命令时,过去会输出令人困惑的堆栈。此问题已修复,现在会打印合理的错误消息。
修复了 west 查找 zephyr 仓库方式中的缺陷。该缺陷通常出现在新工作区第一次运行
west build等扩展命令时:除非从工作区顶层目录运行,否则首次调用会失败,而后续调用不会。用户无权打开清单文件时,west 现在会打印合理的错误消息,而不是输出堆栈跟踪。
API 变更:
west.manifest.MalformedConfig异常类型已移至west.configuration模块west.manifest.MalformedConfig异常类型已移至 west.configuration 模块west.configuration.Configuration类在某些情况下现在会抛出MalformedConfig,而非RuntimeError
v0.13.1
缺陷修复:
在工作区外调用 west.manifest.Manifest.from_file() 时,west 再次支持退回使用 ZEPHYR_BASE 环境变量定位工作区。
v0.13.0
新功能:
现在可以在
manifest: self: userdata:值中,将任意用户数据关联到清单仓库本身,例如:manifest: self: userdata: <any YAML value can go here>
缺陷修复:
在 [issue #572](https://github.com/zephyrproject-rtos/west/issues/572) 所述的特定情况下,west 报告的清单仓库路径可能不正确。此问题已随
west.manifestAPI 模块中更大范围的路径处理改进一并修复。修复了
west.Manifest.ManifestProject.__repr__的返回值
API 变更:
west.configuration.Configuration:新增面向对象的当前配置接口。它反映系统、全局和工作区本地配置值,并允许读取、写入和删除任意或所有位置的配置选项。west.commands.WestCommand:config:新增属性,返回Configuration对象;如果未设置,则中止程序。此属性始终可在扩展命令的do_run()实现中使用。has_config:新增布尔属性,当且仅当读取self.config会中止程序时为True。
west.manifest包的路径处理经过了不向后兼容的重构。更多详情见提交 [56cfe8d1d1](https://github.com/zephyrproject-rtos/west/commit/56cfe8d1d1f3c9b45de3e793c738acd62db52aca)。west.manifest.Manifest.validate():现在以 Python dict 返回验证后的数据。当传入值为 str,而需要 dict 时,这会很有用。west.manifest.Manifest新增:路径属性
abspath、posixpath、relative_path、yaml_path、repo_path、repo_posixpathuserdata属性,包含manifest: self: userdata:解析后的值,或为 Nonefrom_topdir()工厂方法
west.manifest.ManifestProject:新增userdata属性,同样包含manifest: self: userdata:解析后的值,或为 Nonewest.manifest.ManifestImportFailed:构造函数现在接受任意值,可用于表示从 映射 或其他复合值导入失败。已弃用的配置 API:
以下 API 现已弃用,应改用
Configuration对象。通常通过WestCommand实例的self.config使用,也可直接实例化Configuration对象满足其他用途。west.configuration.configwest.configuration.read_configwest.configuration.update_configwest.configuration.delete_config
v0.12.0
新功能:
缺陷修复:
修复了
west list命令对清单仓库使用{sha}格式键的行为;现在会按预期打印N/A(“不适用”)。
API 变更:
新增
west.manifest.Project.userdata属性,支持项目用户数据。
v0.11.1
新功能:
west status现在只为状态非空的项目打印输出。
缺陷修复:
清单文件解析器此前错误地允许项目名称包含路径分隔符
/和\,现在会拒绝这些无效字符。注意:如果需要将项目放在工作区顶层目录的子目录中,使用
path:键。如果需要定制相对于远程url-base:的项目获取 URL,使用repo-path:。示例见 项目。west v0.10.1 对
west init --manifest-rev选项的改动会选择默认分支名称,但使清单仓库处于分离 HEAD 状态。现已通过在内部使用git clone代替git init和git fetch修复。详情见 issue #522。WEST_CONFIG_LOCAL环境变量现在可以正确覆盖默认位置<workspace topdir>/.west/config。west update --fetch=smart(smart为默认值)现在会正确跳过项目修订版本为 lightweight tags 时的获取操作(带注释标签原本就正常,只有轻量标签会被不必要地获取)。
其他变更:
上文提到的 issue #522 修复引入了新的限制。如果指定
west init --manifest-rev选项,其值现在必须是分支或标签。尤其是,之前可用于获取拉取请求的“伪分支”,例如 GitHub 的pull/1234/head引用,不能再传给--manifest-rev。用户现在必须在运行west init后手动获取并检出这些修订版本。
API 变更:
west.manifest.Manifest.get_projects()避免了 issue #523 所述某些边界情况下的错误结果。west.manifest.Project.sha()现在能正确处理标签修订版本,包括轻量标签和带注释标签。
v0.11.0
新功能:
west update现在支持--narrow、--name-cache和--path-cache选项,分别受update.narrow、update.name-cache和update.path-cache配置 选项影响,可用于优化更新速度。west update现在支持--fetch-opt选项,其值会传给更新各项目时用于获取远程修订版本的git fetch命令。
缺陷修复:
west update现在默认同步项目中的 Git 子模块,避免清单文件中的 URL 自子模块首次初始化后发生变化时出现问题。将update.sync-submodules配置选项设为false可禁用此行为。
其他变更:
修复了 west.manifest 模块中 Project 类的文档字符串
v0.10.1
新功能:
west init 命令的
--manifest-rev(--mr)选项不再默认为master。命令会查询仓库默认分支名称并使用它。因此,用户可以从master迁移到main,而不会破坏未指定此选项的脚本。
v0.10.0
新功能:
项目 子模块列表 中的
name键现在是可选的。
缺陷修复:
West 现在检查清单模式版本是否为 版本 中明确允许的值。旧行为仅检查模式版本是否晚于引入
manifest: version:键的 west 版本,因此错误地允许了0.8.2等无效模式版本。
其他变更:
清单文件的
group-filter现在会通过import传播。这与 west v0.9.x 的处理方式不同:在 v0.9.x 中,只有顶层清单文件的group-filter生效,所有导入清单中的组过滤列表都会被忽略。从 west v0.10.0 起,导入清单中的组过滤列表也会被导入。详情见 组过滤器与导入。
未指定
manifest: version:,或其值至少为0.10时,新行为生效。只有在顶层清单文件中显式指定manifest: version: 0.9,才能继续使用旧行为。模式版本的更多信息见 版本。此变更的动机及更多背景,参见 west pull request #482。
v0.9.1
缺陷修复:
west manifest --resolve等命令现在会正确包含组和组过滤信息。
其他变更:
同时使用
import与group-filter时,west 现在会发出警告。此组合的语义从 v0.10.x 起发生变化,更多信息见上面的 v0.10.0 发行说明。
v0.9.0
警告
下文所述的 west config 修复有一个代价:通过此命令或 west.configuration API 设置配置选项时,配置文件中的所有注释和其他手动编辑内容都会被移除。
警告
不建议将此版本引入的 group-filter 功能与清单导入结合使用。相应行为已在 west v0.10 中改变。
新功能:
West 清单现在支持 项目中的 Git 子模块。除克隆项目仓库本身外,还可以将 Git submodules 克隆到 west 项目仓库中。
West 清单现在支持 项目组。可以通过启用或禁用项目组,决定哪些项目处于“活动”状态,从而由以下命令处理:
west update、west list、west diff、west status、west forall。west update默认不再更新非活动项目。现在支持--group-filter选项,可对启用和禁用的项目组集合进行一次性调整。不带参数运行
west list、west diff、west status或west forall时,默认不再打印非活动项目信息。如果用户在命令行显式指定项目列表,则无论项目是否活动,都会包含其输出。这些命令现在还支持
--all参数,以包含所有项目,包括非活动项目。west list的--format参数现在支持{groups}格式字符串键。
缺陷修复:
west config命令和west.configurationAPI 此前无法正确保存某些配置值,例如包含逗号的字符串。此问题已修复,详情见 commit 36f3f91e。manifest: self: path:为空的清单文件无效,但 west 过去会静默接受。现在会拒绝此类清单。修复了影响
west init -l .命令行为的缺陷,见 issue #435。
API 变更:
新增
west.manifest.Manifest.is_active()新增
west.manifest.Manifest.group_filter为
west.manifest.Project新增submodules属性,其类型为新添加的west.manifest.Submodule
其他变更:
清单导入 功能现在支持术语
allowlist和blocklist,分别代替whitelist和blacklist。为保持兼容性,旧术语仍受支持,但文档已全部更新为新术语。
v0.8.0
这是一个功能版本,通过在 import: 映射中支持 path-prefix: 键扩展清单模式,同时包含其他功能和修复。
清单导入映射现在支持
path-prefix:键,可将项目及其导入的仓库放到工作区的子目录中。示例见 示例 3.4:导入到子目录。现在还可通过
python3 -m west运行 west 命令行应用程序,从而无需修改PATH环境变量,就能更方便地使用指定 Python 解释器运行 west。west manifest --path 打印 west.yml 的绝对路径
west init现在支持--mf foo.yml选项,使用foo.yml而不是west.yml初始化工作区。west list现在根据manifest.path配置选项 打印清单仓库路径,该路径可能与清单数据中的self: path:值不同。旧行为仍可使用,但需要传入新选项--manifest-path-from-yaml。多项 Python API 变更,详情见 West API。
v0.7.3
这是一个缺陷修复版本。
修复了导入失败可能导致工作区不可用的问题(详情见 [PR #415](https://github.com/zephyrproject-rtos/west/pull/415))
v0.7.2
这是一个包含缺陷修复和小型新功能的版本。
过滤清单导入带来的重复扩展命令
修复
west.Manifest.get_projects()按路径查找清单仓库的行为
v0.7.1
这是一个包含缺陷修复和小型新功能的版本。
west update --stats现在会打印调用子进程的操作耗时、每个项目在 west Python 进程中花费的时间,以及更新每个项目的总耗时。west topdir始终打印 POSIX 风格路径控制台输出的小幅调整
v0.7.0
west 0.7 面向用户的主要新功能是 清单导入。它允许用户从多个不同文件加载 west 清单数据,并将结果解析为单个逻辑清单。
其他用户可见变更:
本文档及 west API 文档中的“west installation”概念已更名为“west workspace”。对大多数人而言,新术语似乎比旧术语更容易理解和使用。
West 清单现在支持 模式版本。
“west config”命令现在可在工作区之外运行,例如通过
west config --global section.key value全局设置配置选项。新增 west topdir 命令,用于打印当前 west 工作区的根目录。
west -vv init命令现在会打印正在执行的 Git 操作及其结果。现在强制禁止将项目命名为“manifest”;该名称保留给清单仓库,可在
west list manifest等命令中使用,不再只能通过west list path-to-manifest-repository指代它不存在名为“zephyr”的项目时不再报错。这是为了让 west 也能通用于非 Zephyr 场景。
多项缺陷修复。
West API 中面向开发者的变更如下:
west.build 和 west.cmake:已弃用;这些功能专用于 Zephyr,本不应属于 west。由于 Zephyr v1.14 LTS 依赖它们,仍将随发行包提供,直到该 Zephyr 版本淘汰时移除。
west.commands:
WestCommand.requires_installation:已弃用,改用 requires_workspace
WestCommand.requires_workspace:新增
WestCommand.has_manifest:新增
WestCommand.manifest:现在可设置
west.configuration:调用者现在可以在读取和写入配置文件时指定工作区目录
west.log:
msg():新增
west.manifest:
该模块现在使用标准 logging 模块,而不是 west.log
QUAL_REFS_WEST:新增
SCHEMA_VERSION:新增
Defaults:已移除
Manifest.as_dict():新增
Manifest.as_frozen_yaml():新增
Manifest.as_yaml():新增
Manifest.from_file() 和 from_data():这些工厂方法使用更灵活,对全局状态的依赖更少
Manifest.validate():新增
ManifestImportFailed:新增
ManifestProject:部分弃用,之后可能移除。
Project:构造函数现在接受 topdir 参数
Project.format() 及其调用者已移除,请改用 f-string。
Project.name_and_path:新增
Project.remote_name:新增
Project.sha() 现在会捕获 stderr
Remote:已移除
West 现在要求 Python 3.6 或更高版本。此外,某些功能可能依赖 Python 字典保持插入顺序;这在 CPython 3.6 中只是实现细节,但自 Python 3.7 起已成为语言规范的一部分。
v0.6.3
此补丁版本修复了已弃用 west.cmake 模块的行为错误。
v0.6.2
此补丁版本修复了 v0.6.1 引入的 west update --fetch=smart 行为错误。
所有 v0.6.1 用户都必须升级。
v0.6.1
警告
不要使用此补丁版本,应改用 v0.6.2。
此补丁版本的用户可见功能如下:
west update 命令新增
--fetch命令行选项和update.fetch配置选项。默认值“smart”会跳过获取本地已有的 SHA 和标签。改进并统一了
west diff、west status、west forall和west update命令的错误处理。这些命令都可操作多个项目;与某个项目相关的子进程失败时,现在会继续处理其他项目。任意子进程失败时,所有这些命令也都会让 west 进程返回非零错误码(此前尤其是west forall并非如此)。west manifest 命令的错误处理也得到改进。
只要格式字符串仅需要可从清单文件读取的信息,west list 命令现在即使项目未克隆也能工作。如果格式字符串需要项目仓库中保存的数据,例如包含
{sha}格式键,则仍会失败。操作 Git 修订版本的命令和选项现在接受缩写 SHA。例如,
west init --mr SHA_PREFIX现在可以使用。此前,如果--mr参数不是分支或标签,就必须是完整的 40 字符 SHA。
West API 中面向开发者的变更如下:
west.log.banner():新增
west.log.small_banner():新增
west.manifest.Manifest.get_projects():新增
west.manifest.Project.is_cloned():新增
west.commands.WestCommand 实例现在可在 do_run() 调用期间,通过新增 self.manifest 属性访问解析后的 Manifest 对象。读取此属性会返回 Manifest 对象;如果无法解析,则中止命令。
west.manifest.Project.git() 现在具有 capture_stderr 关键字参数
v0.6.0
不再使用独立引导程序
在 west v0.5.x 中,程序分为引导程序和每个安装实例中的克隆两个组件。更多详情见 Multiple Repository Management in the v1.14 documentation。
这类似于 Google Repo 工具的工作方式,让 west 初期能够快速迭代。但它也造成了困惑;现在 west 已足够稳定,可以完全作为单个组件通过 PyPI 分发。
从 v0.6.x 起,所有 west 核心命令和辅助类都属于通过 PyPI 分发的 west 包。这消除了复杂性,也使系统中任意位置都能导入 west 模块,而不再局限于扩展命令。
为保持向后兼容,
selfupdate命令仍然存在,但现在只会打印错误消息并退出。清单语法变更
west 清单文件的
projects元素现在可以直接指定获取 URL,如下所示:manifest: projects: - name: example-project-name url: https://github.com/example/example-project
采用此方式设置
url属性的项目元素,不能同时具有remote属性。项目名称必须唯一。这是支持后续工作所需的限制,但在 west v0.5.x 中无法施加,因为不同项目的 URL 可能具有相同的最后一个路径组件,例如:
manifest: remotes: - name: remote-1 url-base: https://github.com/remote-1 - name: remote-2 url-base: https://github.com/remote-2 projects: - name: project remote: remote-1 path: remote-1-project - name: project remote: remote-2 path: remote-2-project
现在可以将这些清单改写为使用
url而不是remote的项目,如下所示:manifest: projects: - name: remote-1-project url: https://github.com/remote-1/project - name: remote-2-project url: https://github.com/remote-2/project
west list命令现在支持{sha}格式字符串键west list的默认格式字符串改为"{name:12} {path:28} {revision:40} {url}"。现在可以运行
west manifest --validate来加载并验证当前清单文件,同时还修复了其他清单解析相关的错误处理问题。West API 发生了不兼容变更。在 west v1.0 声明 API 稳定之前,预计还会继续变化。
west.manifest.Project构造函数的remote和defaults位置参数现在改为关键字参数。还新增了url关键字参数;如果指定,Project的 URL 将设为该值,并忽略remote关键字参数。移除了
west.manifest.MANIFEST_SECTIONS,现在只有一个节,即manifest。同时移除了west.manifest.Manifest工厂方法和构造函数中的 sections 关键字参数。移除了
west.manifest.SpecialProject类,请改用west.manifest.ManifestProject。
v0.5.x
West v0.5.x 是 Zephyr 项目在 v1.14 长期支持(LTS)版本中首次广泛使用的 west 版本。west v0.5.x documentation 作为 Zephyr v1.14 文档的一部分保留。
West v0.5.x 的主要功能如下:
使用 Git 仓库进行多仓库管理,包括 west 自身更新
分层配置文件
扩展命令
v0.5.x 之前的版本
west 仓库中早于 v0.5.x 的标签都是原型,仅供历史参考。