

.. _developing_workspaces:

Workspaces
==========
In this section we will cover the use of BuildStream's workspaces feature when
devloping a BuildStream project.

.. note::

   This example is distributed with BuildStream
   in the `doc/examples/developing
   <https://github.com/apache/buildstream/tree/master/doc/examples/developing>`_
   subdirectory.

We will start with the project used in the :ref:`running commands <tutorial_running_commands>`
tutorial. Recall the element hello.bst, which builds the bellow C file:

.. literalinclude:: ../../examples/developing/files/src/hello.c
   :language: c

Suppose we now want to alter the functionality of the *hello* command. We can
make changes to the source code of Buildstream elements by making use of
BuildStream's workspace command.


Opening a workspace
-------------------
First we need to open a workspace, we can do this by running

.. raw:: html
   :file: ../sessions/developing-workspace-open.html

This command has created the workspace_hello directory in which you can see
the source for the hello.bst element, i.e. hello.c and the corresponding
makefile.

You can view existing workspaces using

.. raw:: html
   :file: ../sessions/developing-workspace-list.html


Making code changes
-------------------
Let's say we want to alter the message printed when the hello command is run.
We can open workspace_hello/hello.c and make the following change:

.. literalinclude:: ../../examples/developing/update.patch
    :language: diff

Now, rebuild the hello.bst element.

.. raw:: html
   :file: ../sessions/developing-build-after-changes.html

Note that if you run the command from inside the workspace, the element name is optional.

.. raw:: html
   :file: ../sessions/developing-build-after-changes-workspace.html

Now running the hello command using bst shell:

.. raw:: html
   :file: ../sessions/developing-shell-after-changes.html

This gives us the new message we changed in hello.c.

From this point we have several options. If the source is under version control
we can commit our changes and push them to the remote repository.


Incremental builds
------------------
Once you have opened up your workspace, the workspace build directory will be
reused for subsequent builds, which should improve your edit/compile/test cycle
time when working with an open workspace.

In order to optimize incremental builds, BuildStream treats build configure steps
separately from the main build steps, and will only call the
:func:`Element.prepare() <buildstream.element.Element.prepare>` method on
an element plugin the first time it gets built. This avoids needlessly rebuilding
objects due to header files and such being unconditionally recreated by configuration
scripts (such as the typical ``./configure`` script which is called for ``autotools``
elements for instance).

A caveat of this optimization however is that changes you might make to the
configuration scripts will not be taken into account by default on the next
incremental build. A forced reconfiguration can also be required in some cases
where build scripts automatically detect sources in it's configuration phase,
so newly added sources you add might be ignored.

In order to force the configuration step to be called again on the next build,
you can use :ref:`bst workspace reset --soft <invoking_workspace_reset>`, like so:

In these cases, you can perform a hard reset on the workspace using
:ref:`bst workspace reset <invoking_workspace_reset>`, like so:

.. raw:: html
   :file: ../sessions/developing-soft-reset.html

This will ensure that the next time you run the build, BuildStream will forcefully
rerun the :func:`Element.prepare() <buildstream.element.Element.prepare>` method
and cause the configuration step to occur again.


Closing your workspace
----------------------
If we want to close the workspace and come back to our changes later, we can

.. raw:: html
   :file: ../sessions/developing-close-workspace.html

We can then reopen the workspace later using:

.. raw:: html
   :file: ../sessions/developing-reopen-workspace.html

The --no-checkout option tells BuildStream not to check the source out but to
instead hard-link to the workspace_hello directory.

Alternatively, if we wish to discard the changes we can use

.. raw:: html
   :file: ../sessions/developing-reset-workspace.html

This resets the workspace to its original state.

To discard the workspace completely we can do:

.. raw:: html
   :file: ../sessions/developing-discard-workspace.html

This will close the workspace and completely remove the workspace_hello
directory.

