Updating
********

In :doc:`/getting_started/make` you learned how to check out the L4Re
source tree using ``ham``. Similarly you can use ``ham`` for updating the
source tree:

.. sourcecode:: shell

   ham sync

This will fetch and checkout the latest changes in all repositories.

Sometimes it is necessary to reconfigure your build directories:

.. sourcecode:: shell

   make oldconfig

This is the case when your compiler or some config options changed.

More Ham Functionality
======================

Since ``ham`` is only a wrapper around git, it has some more features you might
want to use:

Print information about changes in the build tree

.. sourcecode:: shell

   ham status

Repositories with changes are likely to fail the ``sync`` operation. It can be
handy to see where you have to manually resolve sync failures with the
``status`` operation.

A more generic functionality is the ``foarall`` operation, which executes an
arbitrary command in each repositories root directory. A different approach for
syncing your source tree is the following.

.. sourcecode:: shell

   ham forall -- git fetch
   ham forall -p -- git rebase

.. hint::

   The ``-p`` option prints the name of each repository before executing the
   provided command. This way you can directly see where conflicts occur.


Repositories All The Way Down
=============================

In the end, these are just git repositories which you can update as you like.
You don't have to use ``ham``. You should, however, update them all at once
because APIs are used across the repos. Only update a single repo if you know
what you're doing.