Contributing

Rust programming

orangu is developed using the Rust programming language so it is a good idea to have some knowledge about the language before you begin to make changes.

There are books like,

that can help you

Git guide

Here are some links that will help you

Basic steps

Start by forking the repository

This is done by the “Fork” button on GitHub.

Clone your repository locally

This is done by

git clone git@github.com:<username>/orangu.git

Add upstream

Do

cd orangu
git remote add upstream https://github.com/mnemosyne-systems/orangu.git

Do a work branch

git checkout -b mywork main

Make the changes

Remember to verify the compile and execution of the code.

Use

[#xyz] Description

as the commit message where [#xyz] is the issue number for the work, and Description is a short description of the issue in the first line

Multiple commits

If you have multiple commits on your branch then squash them

git rebase -i HEAD~2

for example. It is p for the first one, then s for the rest

Rebase

Always rebase

git fetch upstream
git rebase -i upstream/main

Force push

When you are done with your changes force push your branch

git push -f origin mywork

and then create a pull request for it

Format source code

Use

cargo fmt

to format the source code.

Repeat

Based on feedback keep making changes, squashing, rebasing and force pushing

PTAL

When you are working on a change put it into Draft mode, so we know that you are not happy with it yet.

Please, send a PTAL to the Committer that were assigned to you once you think that your change is complete. And, of course, take it out of Draft mode.

Undo

Normally you can reset to an earlier commit using git reset <commit hash> --hard.

But if you accidentally squashed two or more commits, and you want to undo that, you need to know where to reset to, and the commit seems to have lost after you rebased.

But they are not actually lost - using git reflog, you can find every commit the HEAD pointer has ever pointed to. Find the commit you want to reset to, and do git reset --hard.