######################
Programming guidelines
######################
***************
Version control
***************
Version control is managed with `Git `_.
Issue tracking and repository management are done using `GitLab `_
at http://git.metabarcoding.org/.
Branching strategy
==================
Master branch
-------------
The master branch should only contain functional scripts.
Topic branches
--------------
Topic branches should correspond to development branches revolving around a topic corresponding
to the branch's name.
Release branches
----------------
Release branches should start with duplicates of tags and be used to patch them.
Tags
----
Tags should never be committed to.
Rebasing
--------
Rebasing should be avoided on the distant server.
Merging
-------
Merging should never overwrite on a release branch or on a tag.
Branching strategy diagram
--------------------------
.. image:: ./images/version_control.png
Issue tracking
==============
Issue tracking is done using `GitLab `_ at http://git.metabarcoding.org/.
Creating a branch should always lead to the creation of a label that refers to it in GitLab.
Tickets should always be labelled with the branches for which they are relevant.
**************
OBITools3 wiki
**************
The OBITools3 wiki is managed with GitLab.
*********************
Programming languages
*********************
C99 :
* All the low-level input/output functions (e.g. all the `OBIDMS `_ functions)
* Computing-intensive code (e.g. alignment or pattern matching)
`Cython `_ :
* Object layer
* OBITools3 library
`Python 3 `_ :
* Top layer code (scripts)
For the documentation, `Sphinx `_ should be used for both the original
documentation and for the generation of documentation from the python code. `Doxygen `_
should be used for the generation of documentation from the C code, which should be then integrated
in the Sphinx documentation using `Breathe `_.
******************
Naming conventions
******************
.. todo::
Look for common naming conventions
*****************
Programming rules
*****************
*