qubes-doc/developer/code/source-code.rst
Marek Marczykowski-Górecki b93b3c571e
Convert to RST
2024-05-21 20:59:46 +02:00

103 lines
3.4 KiB
ReStructuredText
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

===========
Source code
===========
All the Qubes code is kept in Git repositories. We have divided the
project into several components, each of which has its own separate
repository, for example:
- ``core-admin.git`` The core Qubes infrastructure, responsible for
VM management, VM templates, fs sharing, etc.
- ``gui-daemon.git`` GUI virtualization, Dom0 side.
- ``gui-agent-linux.git`` GUI virtualization, Linux VM side.
- ``linux-template-builder.git`` Scripts and other files used to
create Qubes template images.
All of our repositories are available under the `QubesOS GitHub account <https://github.com/QubesOS/>`__.
To clone a repository:
.. code:: bash
git clone https://github.com/QubesOS/qubes-<repo_name>.git <repo_name>
e.g.:
.. code:: bash
git clone https://github.com/QubesOS/qubes-core-admin.git core-admin
To build Qubes you do not need to download all these repositories. If
you use :doc:`qubes builder </developer/building/qubes-builder>` you can specify *what*
you want to build, and download only the repositories needed to build
that target.
If you really do want to clone **all** of the repositories, you can use
these commands:
.. code:: bash
curl "https://api.github.com/orgs/QubesOS/repos?page=1&per_page=100" | grep -e 'clone_url*' | cut -d \" -f 4 | xargs -L1 git clone
curl "https://api.github.com/orgs/QubesOS/repos?page=2&per_page=100" | grep -e 'clone_url*' | cut -d \" -f 4 | xargs -L1 git clone
To update (git fetch) **all** of these repositories :
.. code:: bash
find . -mindepth 1 -maxdepth 1 -type d -exec git -C {} fetch --tags --recurse-submodules=on-demand --all \;
(Alternatively, you can pull instead of just fetching.)
How to Send Patches
-------------------
If you want to :ref:`contribute code <introduction/contributing:contributing code>` to the project, there are
two ways. Whichever method you choose, you must :doc:`sign your code </developer/code/code-signing>` before it can be accepted.
- **Preferred**: Use GitHubs `fork & pull requests <https://guides.github.com/activities/forking/>`__.
Opening a pull request on GitHub greatly eases the code review and
tracking process. In addition, especially for bigger changes, its a
good idea to send a message to the :ref:`qubes-devel mailing list <introduction/support:qubes-devel>` in order to notify people who do not
receive GitHub notifications.
- Send a patch to the :ref:`qubes-devel mailing list <introduction/support:qubes-devel>` (``git format-patch``).
1. Make all the changes in your working directory, i.e. edit files,
move them around (you can use git mv for this), etc.
2. Add the changes and commit them (``git add``, ``git commit``).
Never mix different changes into one commit! Write a good
description of the commit. The first line should contain a short
summary, and then, if you feel like more explanations are needed,
enter an empty new line, and then start the long, detailed
description (optional).
3. Test your changes NOW: check if RPMs build fine, etc.
4. Create the patch using ``git format-patch``. This has an advantage
over ``git diff``, because the former will also include your
commit message, your name and email, so that *your* name will be
used as a commits author.
5. Send your patch to ``qubes-devel``. Start the message subject with
``[PATCH]``.