# Contributing to `pugs` ---- ## Branches `develop` and `master` branches are protected. This means that one cannot `push` on them, so **before** to do any code change one has to create a working branch. The following conventions are greatly encouraged: * `feature/my_outstanding_feature` * `issue/issue-number` (if no number is related to the issue please consider [opening an issue](https://gitlab.delpinux.fr/code/pugs/issues) and assign it to yourself) ---- ## Tests and coverage ### Running tests Tests are built automatically and are run typing > `make; make test` **all tests should be running correctly before any merge request** ### Unit tests Unit tests are defined in the `tests` directory. New unit tests should be written or updated when needed. ### Coverage Preferably, one should install [gcovr](http://www.gcovr.com) and build `pugs` specifying the `Coverage` build type > `cmake -DCMAKE_BUILD_TYPE=Coverage [...]` However coverage is computed at each `push` by the `gitlab-ci`. ---- ## Up to date build environment using [Docker](http://www.docker.com) This is the easiest way to keep your environment up to date in order to build `pugs`. Running the [docker-pugs.sh](tools/docker-pugs.sh) script creates the image and runs it in interactive mode. The image will runs the user's permissions and his home directory is mounted. **keep in mind that the produced executable will only run inside docker** ---- ## Coding ### `packages` directory Do not make **any** change in the `packages` directory. This directory contains *third party libraries* that are are mandatory to minimal builds or `pugs`. For any changes in this directory (bug report, suggestion of new library, library upgrades or downgrades) **open an issue**. ### Warnings Try to avoid publishing sources that generates compilation warnings. Also, avoid the use of `#warning` directives and prefer opening an issue. `C++` `[[deprecated]]` directive should also be avoid as much as possible. ### Comments **Do not** comment deprecated code. It is `git`'s job to keep track of old versions. Avoid commenting functions bodies: * comments are likely to be deprecates * if the code is not clear by itself comments will not help `Doxygen` is to be used to comment functions in the header. ### Code formatting `clang-format` is used in `pugs`, so install it and run > `make clang-format` before any commit A better solution is to configure your favored editor to perform formatting automatically. For instance `emacs` users should copy-past the following code to their `.emacs.el` init file. ```lisp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Clang-format ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; clang-format can be triggered using C-c C-f ;; Create clang-format file using google style ;; clang-format -style=google -dump-config > .clang-format (use-package clang-format :ensure t :bind (("C-c C-f" . clang-format-region)) ) ;; sets clang-format to be used instead of emacs indentation (defun clang-format-c-mode-common-hook () (fset 'c-indent-region 'clang-format-region) (define-key c-mode-base-map (kbd "<tab>") 'clang-format-region) ) (add-hook 'c-mode-common-hook 'clang-format-c-mode-common-hook) ;; sets clang-format to be run on save for the whole file (defun clang-format-buffer-on-save () "Add auto-save hook for clang-format-buffer-smart." (add-hook 'before-save-hook 'clang-format-buffer nil t)) (add-hook 'c-mode-common-hook 'clang-format-buffer-on-save) ```