West Release Notes
v0.12.0
New features:
West now works on the MSYS2 platform.
West manifest files can now contain arbitrary user data associated with each project. See Project user data for details.
Bug fixes:
The
west listcommand’s{sha}format key has been fixed for the manifest repository; it now printsN/A(“not applicable”) as expected.
API changes:
The
west.manifest.Project.userdataattribute was added to support project user data.
v0.11.1
New features:
west statusnow only prints output for projects which have a nonempty status.
Bug fixes:
The manifest file parser was incorrectly allowing project names which contain the path separator characters
/and\. These invalid characters are now rejected.Note: if you need to place a project within a subdirectory of the workspace topdir, use the
path:key. If you need to customize a project’s fetch URL relative to its remoteurl-base:, userepo-path:. See Projects for examples.The changes made in west v0.10.1 to the
west init --manifest-revoption which selected the default branch name were leaving the manifest repository in a detached HEAD state. This has been fixed by usinggit cloneinternally instead ofgit initandgit fetch. See issue #522 for details.The
WEST_CONFIG_LOCALenvironment variable now correctly overrides the default location,<workspace topdir>/.west/config.west update --fetch=smart(smartis the default) now correctly skips fetches for project revisions which are lightweight tags (it already worked correctly for annotated tags; only lightweight tags were unnecessarily fetched).
Other changes:
The fix for issue #522 mentioned above introduces a new restriction. The
west init --manifest-revoption value, if given, must now be either a branch or a tag. In particular, “pseudo-branches” like GitHub’spull/1234/headreferences which could previously be used to fetch a pull request can no longer be passed to--manifest-rev. Users must now fetch and check out such revisions manually after runningwest init.
API changes:
west.manifest.Manifest.get_projects()avoids incorrect results in some edge cases described in issue #523.west.manifest.Project.sha()now works correctly for tag revisions. (This applies to both lightweight and annotated tags.)
v0.11.0
New features:
west updatenow supports--narrow,--name-cache, and--path-cacheoptions. These can be influenced by theupdate.narrow,update.name-cache, andupdate.path-cacheConfiguration options. These can be used to optimize the speed of the update.west updatenow supports a--fetch-optoption that will be passed to thegit fetchcommand used to fetch remote revisions when updating each project.
Bug fixes:
west updatenow synchronizes Git submodules in projects by default. This avoids issues if the URL changes in the manifest file from when the submodule was first initialized. This behavior can be disabled by setting theupdate.sync-submodulesconfiguration option tofalse.
Other changes:
the west.manifest module has fixed docstrings for the Project class
v0.10.1
New features:
The west init command’s
--manifest-rev(--mr) option no longer defaults tomaster. Instead, the command will query the repository for its default branch name and use that instead. This allows users to move frommastertomainwithout breaking scripts that do not provide this option.
v0.10.0
New features:
The
namekey in a project’s submodules list is now optional.
Bug fixes:
West now checks that the manifest schema version is one of the explicitly allowed vlaues documented in Version. The old behavior was just to check that the schema version was newer than the west version where the
manifest: version:key was introduced. This incorrectly allowed invalid schema versions, like0.8.2.
Other changes:
A manifest file’s
group-filteris now propagated through animport. This is a change from how west v0.9.x handled this. In west v0.9.x, only the top level manifest file’sgroup-filterhad any effect; the group filter lists from any imported manifests were ignored.Starting with west v0.10.0, the group filter lists from imported manifests are also imported. For details, see Group Filters and Imports.
The new behavior will take effect if
manifest: version:is not given or is at least0.10. The old behavior is still available in the top level manifest file only with an explicitmanifest: version: 0.9. See Version for more information on schema versions.See west pull request #482 for the motivation for this change and additional context.
v0.9.1
Bug fixes:
Commands like
west manifest --resolvenow correctly include group and group filter information.
Other changes:
West now warns if you combine
importwithgroup-filter. Semantics for this combination have changed starting with v0.10.x. See the v0.10.0 release notes above for more information.
v0.9.0
Warning
The west config fix described below comes at a cost: any comments or
other manual edits in configuration files will be removed when setting a
configuration option via that command or the west.configuration API.
Warning
Combining the group-filter feature introduced in this release with
manifest imports is discouraged. The resulting behavior has changed in west
v0.10.
New features:
West manifests now support Git Submodules in Projects. This allows you to clone Git submodules into a west project repository in addition to the project repository itself.
West manifests now support Project Groups and Active Projects. Project groups can be enabled and disabled to determine what projects are “active”, and therefore will be acted upon by the following commands:
west update,west list,west diff,west status,west forall.west updateno longer updates inactive projects by default. It now supports a--group-filteroption which allows for one-time modifications to the set of enabled and disabled project groups.Running
west list,west diff,west status, orwest forallwith no arguments does not print information for inactive projects by default. If the user specifies a list of projects explicitly at the command line, output for them is included regardless of whether they are active.These commands also now support
--allarguments to include all projects, even inactive ones.west listnow supports a{groups}format string key in its--formatargument.
Bug fixes:
The
west configcommand andwest.configurationAPI did not correctly store some configuration values, such as strings which contain commas. This has been fixed; see commit 36f3f91e for details.A manifest file with an empty
manifest: self: path:value is invalid, but west used to let it pass silently. West now rejects such manifests.A bug affecting the behavior of the
west init -l .command was fixed; see issue #435.
API changes:
added
west.manifest.Manifest.is_active()added
west.manifest.Manifest.group_filteradded
submodulesattribute towest.manifest.Project, which has newly added typewest.manifest.Submodule
Other changes:
The Manifest Imports feature now supports the terms
allowlistandblocklistinstead ofwhitelistandblacklist, respectively.The old terms are still supported for compatibility, but the documentation has been updated to use the new ones exclusively.
v0.8.0
This is a feature release which changes the manifest schema by adding support
for a path-prefix: key in an import: mapping, along with some other
features and fixes.
Manifest import mappings now support a
path-prefix:key, which places the project and its imported repositories in a subdirectory of the workspace. See Example 3.4: Import into a subdirectory for an example.The west command line application can now also be run using
python3 -m west. This makes it easier to run west under a particular Python interpreter without modifying thePATHenvironment variable.west manifest –path prints the absolute path to west.yml
west initnow supports an--mf foo.ymloption, which initializes the workspace usingfoo.ymlinstead ofwest.yml.west listnow prints the manifest repository’s path using themanifest.pathconfiguration option, which may differ from theself: path:value in the manifest data. The old behavior is still available, but requires passing a new--manifest-path-from-yamloption.Various Python API changes; see West APIs for details.
v0.7.3
This is a bugfix release.
Fix an error where a failed import could leave the workspace in an unusable state (see [PR #415](https://github.com/zephyrproject-rtos/west/pull/415) for details)
v0.7.2
This is a bugfix and minor feature release.
Filter out duplicate extension commands brought in by manifest imports
Fix
west.Manifest.get_projects()when finding the manifest repository by path
v0.7.1
This is a bugfix and minor feature release.
west update --statsnow prints timing for operations which invoke a subprocess, time spent in west’s Python process for each project, and total time updating each project.west topdiralways prints a POSIX style pathminor console output changes
v0.7.0
The main user-visible feature in west 0.7 is the Manifest Imports feature. This allows users to load west manifest data from multiple different files, resolving the results into a single logical manifest.
Additional user-visible changes:
The idea of a “west installation” has been renamed to “west workspace” in this documentation and in the west API documentation. The new term seems to be easier for most people to work with than the old one.
West manifests now support a schema version.
The “west config” command can now be run outside of a workspace, e.g. to run
west config --global section.key valueto set a configuration option’s value globally.There is a new west topdir command, which prints the root directory of the current west workspace.
The
west -vv initcommand now prints the git operations being performed, and their results.The restriction that no project can be named “manifest” is now enforced; the name “manifest” is reserved for the manifest repository, and is usable as such in commands like
west list manifest, instead ofwest list path-to-manifest-repositorybeing the only way to say thatIt’s no longer an error if there is no project named “zephyr”. This is part of an effort to make west generally usable for non-Zephyr use cases.
Various bug fixes.
The developer-visible changes to the West APIs are:
west.build and west.cmake: deprecated; this is Zephyr-specific functionality and should never have been part of west. Since Zephyr v1.14 LTS relies on it, it will continue to be included in the distribution, but will be removed when that version of Zephyr is obsoleted.
west.commands:
WestCommand.requires_installation: deprecated; use requires_workspace instead
WestCommand.requires_workspace: new
WestCommand.has_manifest: new
WestCommand.manifest: this is now settable
west.configuration: callers can now identify the workspace directory when reading and writing configuration files
west.log:
msg(): new
west.manifest:
The module now uses the standard logging module instead of west.log
QUAL_REFS_WEST: new
SCHEMA_VERSION: new
Defaults: removed
Manifest.as_dict(): new
Manifest.as_frozen_yaml(): new
Manifest.as_yaml(): new
Manifest.from_file() and from_data(): these factory methods are more flexible to use and less reliant on global state
Manifest.validate(): new
ManifestImportFailed: new
ManifestProject: semi-deprecated and will likely be removed later.
Project: the constructor now takes a topdir argument
Project.format() and its callers are removed. Use f-strings instead.
Project.name_and_path: new
Project.remote_name: new
Project.sha() now captures stderr
Remote: removed
West now requires Python 3.6 or later. Additionally, some features may rely on Python dictionaries being insertion-ordered; this is only an implementation detail in CPython 3.6, but is is part of the language specification as of Python 3.7.
v0.6.3
This point release fixes an error in the behavior of the deprecated
west.cmake module.
v0.6.2
This point release fixes an error in the behavior of west
update --fetch=smart, introduced in v0.6.1.
All v0.6.1 users must upgrade.
v0.6.1
Warning
Do not use this point release. Make sure to use v0.6.2 instead.
The user-visible features in this point release are:
The west update command has a new
--fetchcommand line flag andupdate.fetchconfiguration option. The default value, “smart”, skips fetching SHAs and tags which are available locally.Better and more consistent error-handling in the
west diff,west status,west forall, andwest updatecommands. Each of these commands can operate on multiple projects; if a subprocess related to one project fails, these commands now continue to operate on the rest of the projects. All of them also now report a nonzero error code from the west process if any of these subprocesses fails (this was previously not true ofwest forallin particular).The west manifest command also handles errors better.
The west list command now works even when the projects are not cloned, as long as its format string only requires information which can be read from the manifest file. It still fails if the format string requires data stored in the project repository, e.g. if it includes the
{sha}format string key.Commands and options which operate on git revisions now accept abbreviated SHAs. For example,
west init --mr SHA_PREFIXnow works. Previously, the--mrargument needed to be the entire 40 character SHA if it wasn’t a branch or a tag.
The developer-visible changes to the West APIs are:
west.log.banner(): new
west.log.small_banner(): new
west.manifest.Manifest.get_projects(): new
west.manifest.Project.is_cloned(): new
west.commands.WestCommand instances can now access the parsed Manifest object via a new self.manifest property during the do_run() call. If read, it returns the Manifest object or aborts the command if it could not be parsed.
west.manifest.Project.git() now has a capture_stderr kwarg
v0.6.0
No separate bootstrapper
In west v0.5.x, the program was split into two components, a bootstrapper and a per-installation clone. See Multiple Repository Management in the v1.14 documentation for more details.
This is similar to how Google’s Repo tool works, and lets west iterate quickly at first. It caused confusion, however, and west is now stable enough to be distributed entirely as one piece via PyPI.
From v0.6.x onwards, all of the core west commands and helper classes are part of the west package distributed via PyPI. This eliminates complexity and makes it possible to import west modules from anywhere in the system, not just extension commands.
The
selfupdatecommand still exists for backwards compatibility, but now simply exits after printing an error message.Manifest syntax changes
A west manifest file’s
projectselements can now specify their fetch URLs directly, like so:manifest: projects: - name: example-project-name url: https://github.com/example/example-project
Project elements with
urlattributes set in this way may not also haveremoteattributes.Project names must be unique: this restriction is needed to support future work, but was not possible in west v0.5.x because distinct projects may have URLs with the same final pathname component, like so:
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
These manifests can now be written with projects that use
urlinstead ofremote, like so:manifest: projects: - name: remote-1-project url: https://github.com/remote-1/project - name: remote-2-project url: https://github.com/remote-2/project
The
west listcommand now supports a{sha}format string keyThe default format string for
west listwas changed to"{name:12} {path:28} {revision:40} {url}".The command
west manifest --validatecan now be run to load and validate the current manifest file, among other error-handling fixes related to manifest parsing.Incompatible API changes were made to west’s APIs. Further changes are expected until API stability is declared in west v1.0.
The
west.manifest.Projectconstructor’sremoteanddefaultspositional arguments are now kwargs. A newurlkwarg was also added; if given, theProjectURL is set to that value, and theremotekwarg is ignored.west.manifest.MANIFEST_SECTIONSwas removed. There is only one section now, namelymanifest. The sections kwargs in thewest.manifest.Manifestfactory methods and constructor were also removed.The
west.manifest.SpecialProjectclass was removed. Usewest.manifest.ManifestProjectinstead.
v0.5.x
West v0.5.x is the first version used widely by the Zephyr Project as part of its v1.14 Long-Term Support (LTS) release. The west v0.5.x documentation is available as part of the Zephyr’s v1.14 documentation.
West’s main features in v0.5.x are:
Multiple repository management using Git repositories, including self-update of west itself
Hierarchical configuration files
Extension commands
Versions Before v0.5.x
Tags in the west repository before v0.5.x are prototypes which are of historical interest only.