1.. _west-release-notes:
2
3West Release Notes
4##################
5
6v1.2.0
7******
8
9Major changes:
10
11- New ``west grep`` command for running a "grep tool" in your west workspace's
12  repositories. Currently, ``git grep``, `ripgrep`_, and standard ``grep`` are
13  supported grep tools.
14
15  To run this command to get ``git grep foo`` results from all cloned,
16  active repositories, run:
17
18  .. code-block:: console
19
20     west grep foo
21
22  Here are some other examples for running different grep commands
23  with ``west grep``:
24
25  .. list-table::
26
27     * - ``git grep --untracked``
28       - ``west grep --untracked foo``
29     * - ``ripgrep``
30       - ``west grep --tool ripgrep foo``
31     * - ``grep --recursive``
32       - ``west grep --tool grep foo``
33
34  To switch the default grep tool in your workspace, run the appropriate
35  command in this table:
36
37  .. list-table::
38
39     * - ``ripgrep``
40       - ``west config grep.tool ripgrep``
41     * - ``grep``
42       - ``west config grep.tool grep``
43
44  For more details, run ``west help grep``.
45
46Other changes:
47
48- The manifest file format now supports a ``description`` field in each
49  ``projects:`` element. See :ref:`west-manifests-projects` for examples.
50
51- ``west list --format`` now accepts ``{description}`` in the format
52  string, which prints the project's ``description:`` value.
53
54- ``west compare`` now always prints information about
55  :ref:`west-manifest-rev`.
56
57Bug fixes:
58
59- ``west init`` aborts if the destination directory already exists.
60
61API changes:
62
63- ``west.commands.WestCommand`` methods ``check_call()`` and
64  ``check_output()`` now take any kwargs that can be passed on
65  to the underlying subprocess function.
66
67- ``west.commands.WestCommand.run_subprocess()``: new wrapper
68  around ``subprocess.run()``. This could not be named ``run()``
69  because ``WestCommand`` already had a method by this name.
70
71- ``west.commands.WestCommand`` methods ``dbg()``, ``inf()``,
72  ``wrn()``, and ``err()`` now all take an ``end`` kwarg, which
73  is passed on to the call to ``print()``.
74
75- ``west.manifest.Project`` now has a ``description`` attribute,
76  which contains the parsed value of the ``description:`` field
77  in the manifest data.
78
79.. _ripgrep: https://github.com/BurntSushi/ripgrep#readme
80
81v1.1.0
82******
83
84Major changes:
85
86- ``west compare``: new command that compares the state of the
87  workspace against the manifest.
88
89- Support for a new ``manifest.project-filter`` configuration option.
90  See :ref:`west-config-index` for details. The ``west manifest --freeze``
91  and ``west manifest --resolve`` commands currently cannot be used when
92  this option is set. This restriction can be removed in a later release.
93
94- Project names which contain comma (``,``) or whitespace now generate
95  warnings. These warnings are errors if the new ``manifest.project-filter``
96  configuration option is set. The warnings may be promoted to errors in a
97  future major version of west.
98
99Other changes:
100
101- ``west forall`` now takese a ``--group`` argument that can be used
102  to restrict the command to only run in one or more groups. Run
103  ``west help forall`` for details.
104
105- All west commands will now output log messages from west API modules at
106  warning level or higher. In addition, the ``--verbose`` argument to west
107  can be used once to include informational messages, or twice to include
108  debug messages, from all commands.
109
110Bug fixes:
111
112- Various improvements to error messages, debug logging, and error handling.
113
114API changes:
115
116- ``west.manifest.Manifest.is_active()`` now respects the
117  ``manifest.project-filter`` configuration option's value.
118
119v1.0.1
120******
121
122Major changes:
123
124- Manifest schema version "1.0" is now available for use in this release. This
125  is identical to the "0.13" schema version in terms of features, but can be
126  used by applications that do not wish to use a "0.x" manifest "version:"
127  field. See :ref:`west-manifest-schema-version` for details on this feature.
128
129Bug fixes:
130
131- West no longer exits with a successful error code when sent an
132  interrupt signal. Instead, it exits with a platform-specific
133  error code and signals to the calling environment that the
134  process was interrupted.
135
136v1.0.0
137******
138
139Major changes in this release:
140
141- The :ref:`west-apis` are now declared stable. Any breaking changes will be
142  communicated by a major version bump from v1.x.y to v2.x.y.
143
144- West v1.0 no longer works with the Zephyr v1.14 LTS releases. This LTS has
145  long been obsoleted by Zephyr v2.7 LTS. If you need to use Zephyr v1.14, you
146  must use west v0.14 or earlier.
147
148- Like the rest of Zephyr, west now requires Python v3.8 or later
149
150- West commands no longer accept abbreviated command line arguments. For
151  example, you must now specify ``west update --keep-descendants`` instead of
152  using an abbreviation like ``west update --keep-d``. This is part of a change
153  applied to all of Zephyr's Python scripts' command-line interfaces. The
154  abbreviations were causing problems in practice when commands were updated to
155  add new options with similar names but different behavior to existing ones.
156
157Other changes:
158
159- All built-in west functions have stopped using ``west.log``
160
161- ``west update``: new ``--submodule-init-config`` option.
162  See commit `9ba92b05`_ for details.
163
164Bug fixes:
165
166- West extension commands that failed to load properly sometimes dumped stack.
167  This has been fixed and west now prints a sensible error message in this case.
168
169- ``west config`` now fails on malformed configuration option arguments
170  which lack a ``.`` in the option name
171
172API changes:
173
174- The west package now contains the metadata files necessary for some static
175  analyzers (such as `mypy`_) to auto-detect its type annotations.
176  See commit `d9f00e24`_ for details.
177
178- the deprecated ``west.build`` module used for Zephyr v1.14 LTS compatibility was
179  removed
180
181- the deprecated ``west.cmake`` module used for Zephyr v1.14 LTS compatibility was
182  removed
183
184- the ``west.log`` module is now deprecated. This module uses global state,
185  which can make it awkward to use it as an API which multiple different python
186  modules may rely on.
187
188- The :ref:`west-apis-commands` module got some new APIs which lay groundwork
189  for a future change to add a global verbosity control to a command's output,
190  and work to remove global state from the ``west`` package's API:
191
192  - New ``west.commands.WestCommand.__init__()`` keyword argument: ``verbosity``
193  - New ``west.commands.WestCommand`` property: ``color_ui``
194  - New ``west.commands.WestCommand`` methods, which should be used to print output
195    from extension commands instead of writing directly to sys.stdout or
196    sys.stderr: ``inf()``, ``wrn()``, ``err()``, ``die()``, ``banner()``,
197    ``small_banner()``
198  - New ``west.commands.VERBOSITY`` enum
199
200.. _9ba92b05: https://github.com/zephyrproject-rtos/west/commit/9ba92b054500d75518ff4c4646590bfe134db523
201.. _d9f00e24: https://github.com/zephyrproject-rtos/west/commit/d9f00e242b8cb297b56e941982adf231281c6bae
202.. _mypy: https://www.mypy-lang.org/
203
204v0.14.0
205*******
206
207Bug fixes:
208
209- West commands that were run with a bad local configuration file dumped stack
210  in a confusing way. This has been fixed and west now prints a sensible error
211  message in this case.
212
213- A bug in the way west looks for the zephyr repository was fixed. The bug
214  itself usually appeared when running an extension command like ``west build``
215  in a new workspace for the first time; this used to fail (just for the first
216  time, not on subsequent command invocations) unless you ran the command in
217  the workspace's top level directory.
218
219- West now prints sensible error messages when the user lacks permission to
220  open the manifest file instead of dumping stack traces.
221
222API changes:
223
224- The ``west.manifest.MalformedConfig`` exception type has been moved to the
225  ``west.configuration`` module
226
227- The ``west.manifest.MalformedConfig`` exception type has been moved to the
228  :ref:`west.configuration <west-apis-configuration>` module
229
230- The ``west.configuration.Configuration`` class now raises ``MalformedConfig``
231  instead of ``RuntimeError`` in some cases
232
233v0.13.1
234*******
235
236Bug fix:
237
238- When calling west.manifest.Manifest.from_file() when outside of a
239  workspace, west again falls back on the ZEPHYR_BASE environment
240  variable to locate the workspace.
241
242v0.13.0
243*******
244
245New features:
246
247- You can now associate arbitrary user data with the manifest repository
248  itself in the ``manifest: self: userdata:`` value, like so:
249
250  .. code-block:: YAML
251
252     manifest:
253       self:
254         userdata: <any YAML value can go here>
255
256Bug fixes:
257
258- The path to the manifest repository reported by west could be incorrect in
259  certain circumstances detailed in [issue
260  #572](https://github.com/zephyrproject-rtos/west/issues/572). This has been
261  fixed as part of a larger overhaul of path handling support in the
262  ``west.manifest`` API module.
263
264- The ``west.Manifest.ManifestProject.__repr__`` return value was fixed
265
266:ref:`API <west-apis>` changes:
267
268- ``west.configuration.Configuration``: new object-oriented interface to the
269  current configuration. This reflects the system, global, and workspace-local
270  configuration values, and allows you to read, write, and delete configuration
271  options from any or all of these locations.
272
273- ``west.commands.WestCommand``:
274
275  - ``config``: new attribute, returns a ``Configuration`` object or aborts the
276    program if none is set. This is always usable from within extension command
277    ``do_run()`` implementations.
278  - ``has_config``: new boolean attribute, which is ``True`` if and only if
279    reading ``self.config`` will abort the program.
280
281- The path handling in the ``west.manifest`` package has been overhauled in a
282  backwards-incompatible way. For more details, see commit
283  [56cfe8d1d1](https://github.com/zephyrproject-rtos/west/commit/56cfe8d1d1f3c9b45de3e793c738acd62db52aca).
284
285- ``west.manifest.Manifest.validate()``: this now returns the validated data as
286  a Python dict. This can be useful if the value passed to this function was a
287  str, and the dict is desired.
288
289- ``west.manifest.Manifest``: new:
290
291  - path attributes ``abspath``, ``posixpath``, ``relative_path``,
292    ``yaml_path``, ``repo_path``, ``repo_posixpath``
293  - ``userdata`` attribute, which contains the parsed value
294    from ``manifest: self: userdata:``, or is None
295  - ``from_topdir()`` factory method
296
297- ``west.manifest.ManifestProject``: new ``userdata`` attribute, which also
298  contains the parsed value from ``manifest: self: userdata:``, or is None
299
300- ``west.manifest.ManifestImportFailed``: the constructor can now take any
301  value; this can be used to reflect failed imports from a :ref:`map
302  <west-manifest-import-map>` or other compound value.
303
304- Deprecated configuration APIs:
305
306  The following APIs are now deprecated in favor of using a ``Configuration``
307  object. Usually this will be done via ``self.config`` from a ``WestCommand``
308  instance, but this can be done directly by instantiating a ``Configuration``
309  object for other usages.
310
311  - ``west.configuration.config``
312  - ``west.configuration.read_config``
313  - ``west.configuration.update_config``
314  - ``west.configuration.delete_config``
315
316v0.12.0
317*******
318
319New features:
320
321- West now works on the `MSYS2 <https://www.msys2.org/>`_ platform.
322
323- West manifest files can now contain arbitrary user data associated with each
324  project. See :ref:`west-project-userdata` for details.
325
326Bug fixes:
327
328- The ``west list`` command's ``{sha}`` format key has been fixed for
329  the manifest repository; it now prints ``N/A`` ("not applicable")
330  as expected.
331
332:ref:`API <west-apis>` changes:
333
334- The ``west.manifest.Project.userdata`` attribute was added to support
335  project user data.
336
337v0.11.1
338*******
339
340New features:
341
342- ``west status`` now only prints output for projects which have a nonempty
343  status.
344
345Bug fixes:
346
347- The manifest file parser was incorrectly allowing project names which contain
348  the path separator characters ``/`` and ``\``. These invalid characters are
349  now rejected.
350
351  Note: if you need to place a project within a subdirectory of the workspace
352  topdir, use the ``path:`` key. If you need to customize a project's fetch URL
353  relative to its remote ``url-base:``, use ``repo-path:``. See
354  :ref:`west-manifests-projects` for examples.
355
356- The changes made in west v0.10.1 to the ``west init --manifest-rev`` option
357  which selected the default branch name were leaving the manifest repository
358  in a detached HEAD state. This has been fixed by using ``git clone`` internally
359  instead of ``git init`` and ``git fetch``. See `issue #522`_ for details.
360
361- The ``WEST_CONFIG_LOCAL`` environment variable now correctly
362  overrides the default location, :file:`<workspace topdir>/.west/config`.
363
364- ``west update --fetch=smart`` (``smart`` is the default) now correctly skips
365  fetches for project revisions which are `lightweight tags`_ (it already
366  worked correctly for annotated tags; only lightweight tags were unnecessarily
367  fetched).
368
369Other changes:
370
371- The fix for issue #522 mentioned above introduces a new restriction. The
372  ``west init --manifest-rev`` option value, if given, must now be either a
373  branch or a tag. In particular, "pseudo-branches" like GitHub's
374  ``pull/1234/head`` references which could previously be used to fetch a pull
375  request can no longer be passed to ``--manifest-rev``. Users must now fetch
376  and check out such revisions manually after running ``west init``.
377
378:ref:`API <west-apis>` changes:
379
380- ``west.manifest.Manifest.get_projects()`` avoids incorrect results in
381  some edge cases described in `issue #523`_.
382
383- ``west.manifest.Project.sha()`` now works correctly for tag revisions.
384  (This applies to both lightweight and annotated tags.)
385
386.. _lightweight tags: https://git-scm.com/book/en/v2/Git-Basics-Tagging
387.. _issue #522: https://github.com/zephyrproject-rtos/west/issues/522
388.. _issue #523: https://github.com/zephyrproject-rtos/west/issues/523
389
390v0.11.0
391*******
392
393New features:
394
395- ``west update`` now supports ``--narrow``, ``--name-cache``, and
396  ``--path-cache`` options. These can be influenced by the ``update.narrow``,
397  ``update.name-cache``, and ``update.path-cache`` :ref:`west-config` options.
398  These can be used to optimize the speed of the update.
399- ``west update`` now supports a ``--fetch-opt`` option that will be passed to
400  the ``git fetch`` command used to fetch remote revisions when updating each
401  project.
402
403Bug fixes:
404
405- ``west update`` now synchronizes Git submodules in projects by default. This
406  avoids issues if the URL changes in the manifest file from when the submodule
407  was first initialized. This behavior can be disabled by setting the
408  ``update.sync-submodules`` configuration option to ``false``.
409
410Other changes:
411
412- the :ref:`west-apis-manifest` module has fixed docstrings for the Project
413  class
414
415v0.10.1
416*******
417
418New features:
419
420- The :ref:`west-init` command's ``--manifest-rev`` (``--mr``) option no longer
421  defaults to ``master``. Instead, the command will query the repository for
422  its default branch name and use that instead. This allows users to move from
423  ``master`` to ``main`` without breaking scripts that do not provide this
424  option.
425
426.. _west_0_10_0:
427
428v0.10.0
429*******
430
431New features:
432
433- The ``name`` key in a project's :ref:`submodules list
434  <west-manifest-submodules>` is now optional.
435
436Bug fixes:
437
438- West now checks that the manifest schema version is one of the explicitly
439  allowed values documented in :ref:`west-manifest-schema-version`. The old
440  behavior was just to check that the schema version was newer than the west
441  version where the ``manifest: version:`` key was introduced. This incorrectly
442  allowed invalid schema versions, like ``0.8.2``.
443
444Other changes:
445
446- A manifest file's ``group-filter`` is now propagated through an ``import``.
447  This is a change from how west v0.9.x handled this. In west v0.9.x, only the
448  top level manifest file's ``group-filter`` had any effect; the group filter
449  lists from any imported manifests were ignored.
450
451  Starting with west v0.10.0, the group filter lists from imported manifests
452  are also imported. For details, see :ref:`west-group-filter-imports`.
453
454  The new behavior will take effect if ``manifest: version:`` is not given or
455  is at least ``0.10``. The old behavior is still available in the top level
456  manifest file only with an explicit ``manifest: version: 0.9``. See
457  :ref:`west-manifest-schema-version` for more information on schema versions.
458
459  See `west pull request #482
460  <https://github.com/zephyrproject-rtos/west/pull/482>`_ for the motivation
461  for this change and additional context.
462
463v0.9.1
464******
465
466Bug fixes:
467
468- Commands like ``west manifest --resolve`` now correctly include group and
469  group filter information.
470
471Other changes:
472
473- West now warns if you combine ``import`` with ``group-filter``. Semantics for
474  this combination have changed starting with v0.10.x. See the v0.10.0 release
475  notes above for more information.
476
477.. _west_0_9_0:
478
479v0.9.0
480******
481
482.. warning::
483
484   The ``west config`` fix described below comes at a cost: any comments or
485   other manual edits in configuration files will be removed when setting a
486   configuration option via that command or the ``west.configuration`` API.
487
488.. warning::
489
490   Combining the ``group-filter`` feature introduced in this release with
491   manifest imports is discouraged. The resulting behavior has changed in west
492   v0.10.
493
494New features:
495
496- West manifests now support :ref:`west-manifest-submodules`. This allows you
497  to clone `Git submodules
498  <https://git-scm.com/book/en/v2/Git-Tools-Submodules>`_ into a west project
499  repository in addition to the project repository itself.
500
501- West manifests now support :ref:`west-manifest-groups`. Project groups can be
502  enabled and disabled to determine what projects are "active", and therefore
503  will be acted upon by the following commands: ``west update``, ``west list``,
504  ``west diff``, ``west status``, ``west forall``.
505
506- ``west update`` no longer updates inactive projects by default. It now
507  supports a ``--group-filter`` option which allows for one-time modifications
508  to the set of enabled and disabled project groups.
509
510- Running ``west list``, ``west diff``, ``west status``, or ``west forall``
511  with no arguments does not print information for inactive projects by
512  default. If the user specifies a list of projects explicitly at the command
513  line, output for them is included regardless of whether they are active.
514
515  These commands also now support ``--all`` arguments to include all
516  projects, even inactive ones.
517
518- ``west list`` now supports a ``{groups}`` format string key in its
519  ``--format`` argument.
520
521Bug fixes:
522
523- The ``west config`` command and ``west.configuration`` API did not correctly
524  store some configuration values, such as strings which contain commas. This
525  has been fixed; see `commit 36f3f91e
526  <https://github.com/zephyrproject-rtos/west/commit/36f3f91e270782fb05f6da13800f433a9c48f130>`_
527  for details.
528
529- A manifest file with an empty ``manifest: self: path:`` value is invalid, but
530  west used to let it pass silently. West now rejects such manifests.
531
532- A bug affecting the behavior of the ``west init -l .`` command was fixed; see
533  `issue #435 <https://github.com/zephyrproject-rtos/west/issues/435>`_.
534
535:ref:`API <west-apis>` changes:
536
537- added ``west.manifest.Manifest.is_active()``
538- added ``west.manifest.Manifest.group_filter``
539- added ``submodules`` attribute to ``west.manifest.Project``, which has
540  newly added type ``west.manifest.Submodule``
541
542Other changes:
543
544- The :ref:`west-manifest-import` feature now supports the terms ``allowlist``
545  and ``blocklist`` instead of ``whitelist`` and ``blacklist``, respectively.
546
547  The old terms are still supported for compatibility, but the documentation
548  has been updated to use the new ones exclusively.
549
550v0.8.0
551******
552
553This is a feature release which changes the manifest schema by adding support
554for a ``path-prefix:`` key in an ``import:`` mapping, along with some other
555features and fixes.
556
557- Manifest import mappings now support a ``path-prefix:`` key, which places
558  the project and its imported repositories in a subdirectory of the workspace.
559  See :ref:`west-manifest-ex3.4` for an example.
560- The west command line application can now also be run using ``python3 -m
561  west``. This makes it easier to run west under a particular Python
562  interpreter without modifying the :envvar:`PATH` environment variable.
563- :ref:`west manifest --path <west-manifest-path>` prints the absolute path to
564  west.yml
565- ``west init`` now supports an ``--mf foo.yml`` option, which initializes the
566  workspace using :file:`foo.yml` instead of :file:`west.yml`.
567- ``west list`` now prints the manifest repository's path using the
568  ``manifest.path`` :ref:`configuration option <west-config>`, which may differ
569  from the ``self: path:`` value in the manifest data. The old behavior is
570  still available, but requires passing a new ``--manifest-path-from-yaml``
571  option.
572- Various Python API changes; see :ref:`west-apis` for details.
573
574v0.7.3
575******
576
577This is a bugfix release.
578
579- Fix an error where a failed import could leave the workspace in an unusable
580  state (see [PR #415](https://github.com/zephyrproject-rtos/west/pull/415) for
581  details)
582
583v0.7.2
584******
585
586This is a bugfix and minor feature release.
587
588- Filter out duplicate extension commands brought in by manifest imports
589- Fix ``west.Manifest.get_projects()`` when finding the manifest repository by
590  path
591
592v0.7.1
593******
594
595This is a bugfix and minor feature release.
596
597- ``west update --stats`` now prints timing for operations which invoke a
598  subprocess, time spent in west's Python process for each project, and total
599  time updating each project.
600- ``west topdir`` always prints a POSIX style path
601- minor console output changes
602
603v0.7.0
604******
605
606The main user-visible feature in west 0.7 is the :ref:`west-manifest-import`
607feature. This allows users to load west manifest data from multiple different
608files, resolving the results into a single logical manifest.
609
610Additional user-visible changes:
611
612- The idea of a "west installation" has been renamed to "west workspace" in
613  this documentation and in the west API documentation. The new term seems to
614  be easier for most people to work with than the old one.
615- West manifests now support a :ref:`schema version
616  <west-manifest-schema-version>`.
617- The "west config" command can now be run outside of a workspace, e.g.
618  to run ``west config --global section.key value`` to set a configuration
619  option's value globally.
620- There is a new :ref:`west topdir <west-built-in-misc>` command, which
621  prints the root directory of the current west workspace.
622- The ``west -vv init`` command now prints the git operations being performed,
623  and their results.
624- The restriction that no project can be named "manifest" is now enforced; the
625  name "manifest" is reserved for the manifest repository, and is usable as
626  such in commands like ``west list manifest``, instead of ``west list
627  path-to-manifest-repository`` being the only way to say that
628- It's no longer an error if there is no project named "zephyr". This is
629  part of an effort to make west generally usable for non-Zephyr use cases.
630- Various bug fixes.
631
632The developer-visible changes to the :ref:`west-apis` are:
633
634- west.build and west.cmake: deprecated; this is Zephyr-specific functionality
635  and should never have been part of west. Since Zephyr v1.14 LTS relies on it,
636  it will continue to be included in the distribution, but will be removed
637  when that version of Zephyr is obsoleted.
638- west.commands:
639
640  - WestCommand.requires_installation: deprecated; use requires_workspace instead
641  - WestCommand.requires_workspace: new
642  - WestCommand.has_manifest: new
643  - WestCommand.manifest: this is now settable
644- west.configuration: callers can now identify the workspace directory
645  when reading and writing configuration files
646- west.log:
647
648  - msg(): new
649- west.manifest:
650
651  - The module now uses the standard logging module instead of west.log
652  - QUAL_REFS_WEST: new
653  - SCHEMA_VERSION: new
654  - Defaults: removed
655  - Manifest.as_dict(): new
656  - Manifest.as_frozen_yaml(): new
657  - Manifest.as_yaml(): new
658  - Manifest.from_file() and from_data(): these factory methods are more
659    flexible to use and less reliant on global state
660  - Manifest.validate(): new
661  - ManifestImportFailed: new
662  - ManifestProject: semi-deprecated and will likely be removed later.
663  - Project: the constructor now takes a topdir argument
664  - Project.format() and its callers are removed. Use f-strings instead.
665  - Project.name_and_path: new
666  - Project.remote_name: new
667  - Project.sha() now captures stderr
668  - Remote: removed
669
670West now requires Python 3.6 or later. Additionally, some features may rely on
671Python dictionaries being insertion-ordered; this is only an implementation
672detail in CPython 3.6, but it is part of the language specification as of
673Python 3.7.
674
675v0.6.3
676******
677
678This point release fixes an error in the behavior of the deprecated
679``west.cmake`` module.
680
681v0.6.2
682******
683
684This point release fixes an error in the behavior of ``west
685update --fetch=smart``, introduced in v0.6.1.
686
687All v0.6.1 users must upgrade.
688
689v0.6.1
690******
691
692.. warning::
693
694   Do not use this point release. Make sure to use v0.6.2 instead.
695
696The user-visible features in this point release are:
697
698- The :ref:`west-update` command has a new ``--fetch``
699  command line flag and ``update.fetch`` :ref:`configuration option
700  <west-config>`. The default value, "smart", skips fetching SHAs and tags
701  which are available locally.
702- Better and more consistent error-handling in the ``west diff``, ``west
703  status``, ``west forall``, and ``west update`` commands. Each of these
704  commands can operate on multiple projects; if a subprocess related to one
705  project fails, these commands now continue to operate on the rest of the
706  projects. All of them also now report a nonzero error code from the west
707  process if any of these subprocesses fails (this was previously not true of
708  ``west forall`` in particular).
709- The :ref:`west manifest <west-built-in-misc>` command also handles errors
710  better.
711- The :ref:`west list <west-built-in-misc>` command now works even when the
712  projects are not cloned, as long as its format string only requires
713  information which can be read from the manifest file. It still fails if the
714  format string requires data stored in the project repository, e.g. if it
715  includes the ``{sha}`` format string key.
716- Commands and options which operate on git revisions now accept abbreviated
717  SHAs. For example, ``west init --mr SHA_PREFIX`` now works. Previously, the
718  ``--mr`` argument needed to be the entire 40 character SHA if it wasn't a
719  branch or a tag.
720
721The developer-visible changes to the :ref:`west-apis` are:
722
723- west.log.banner(): new
724- west.log.small_banner(): new
725- west.manifest.Manifest.get_projects(): new
726- west.manifest.Project.is_cloned(): new
727- west.commands.WestCommand instances can now access the parsed
728  Manifest object via a new self.manifest property during the
729  do_run() call. If read, it returns the Manifest object or
730  aborts the command if it could not be parsed.
731- west.manifest.Project.git() now has a capture_stderr kwarg
732
733
734v0.6.0
735******
736
737- No separate bootstrapper
738
739  In west v0.5.x, the program was split into two components, a bootstrapper and
740  a per-installation clone. See `Multiple Repository Management in the v1.14
741  documentation`_ for more details.
742
743  This is similar to how Google's Repo tool works, and lets west iterate quickly
744  at first. It caused confusion, however, and west is now stable enough to be
745  distributed entirely as one piece via PyPI.
746
747  From v0.6.x onwards, all of the core west commands and helper classes are
748  part of the west package distributed via PyPI. This eliminates complexity
749  and makes it possible to import west modules from anywhere in the system,
750  not just extension commands.
751- The ``selfupdate`` command still exists for backwards compatibility, but
752  now simply exits after printing an error message.
753- Manifest syntax changes
754
755  - A west manifest file's ``projects`` elements can now specify their fetch
756    URLs directly, like so:
757
758    .. code-block:: yaml
759
760       manifest:
761         projects:
762           - name: example-project-name
763             url: https://github.com/example/example-project
764
765    Project elements with ``url`` attributes set in this way may not also have
766    ``remote`` attributes.
767  - Project names must be unique: this restriction is needed to support future
768    work, but was not possible in west v0.5.x because distinct projects may
769    have URLs with the same final pathname component, like so:
770
771    .. code-block:: yaml
772
773       manifest:
774         remotes:
775           - name: remote-1
776             url-base: https://github.com/remote-1
777           - name: remote-2
778             url-base: https://github.com/remote-2
779         projects:
780           - name: project
781             remote: remote-1
782             path: remote-1-project
783           - name: project
784             remote: remote-2
785             path: remote-2-project
786
787    These manifests can now be written with projects that use ``url``
788    instead of ``remote``, like so:
789
790    .. code-block:: yaml
791
792       manifest:
793         projects:
794           - name: remote-1-project
795             url: https://github.com/remote-1/project
796           - name: remote-2-project
797             url: https://github.com/remote-2/project
798
799- The ``west list`` command now supports a ``{sha}`` format string key
800
801- The default format string for ``west list`` was changed to ``"{name:12}
802  {path:28} {revision:40} {url}"``.
803
804- The command ``west manifest --validate`` can now be run to load and validate
805  the current manifest file, among other error-handling fixes related to
806  manifest parsing.
807
808- Incompatible API changes were made to west's APIs. Further changes are
809  expected until API stability is declared in west v1.0.
810
811  - The ``west.manifest.Project`` constructor's ``remote`` and ``defaults``
812    positional arguments are now kwargs. A new ``url`` kwarg was also added; if
813    given, the ``Project`` URL is set to that value, and the ``remote`` kwarg
814    is ignored.
815
816  - ``west.manifest.MANIFEST_SECTIONS`` was removed. There is only one section
817    now, namely ``manifest``. The *sections* kwargs in the
818    ``west.manifest.Manifest`` factory methods and constructor were also
819    removed.
820
821  - The ``west.manifest.SpecialProject`` class was removed. Use
822    ``west.manifest.ManifestProject`` instead.
823
824
825v0.5.x
826******
827
828West v0.5.x is the first version used widely by the Zephyr Project as part of
829its v1.14 Long-Term Support (LTS) release. The `west v0.5.x documentation`_ is
830available as part of the Zephyr's v1.14 documentation.
831
832West's main features in v0.5.x are:
833
834- Multiple repository management using Git repositories, including self-update
835  of west itself
836- Hierarchical configuration files
837- Extension commands
838
839Versions Before v0.5.x
840**********************
841
842Tags in the west repository before v0.5.x are prototypes which are of
843historical interest only.
844
845.. _Multiple Repository Management in the v1.14 documentation:
846   https://docs.zephyrproject.org/1.14.0/guides/west/repo-tool.html
847
848.. _west v0.5.x documentation:
849   https://docs.zephyrproject.org/1.14.0/guides/west/index.html
850