Taken from Pekka's wayland/wayland@630c25f4c160 and follow-ups, use Wayland's CONTRIBUTING document as a basis for Weston. Signed-off-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Quentin Glidic <sardemff7+git@sardemff7.net> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>dev
parent
0335e44731
commit
2e3915f1bf
@ -0,0 +1,343 @@ |
|||||||
|
Contributing to Wayland |
||||||
|
======================= |
||||||
|
|
||||||
|
Sending patches |
||||||
|
--------------- |
||||||
|
|
||||||
|
Patches should be sent to **wayland-devel@lists.freedesktop.org**, using |
||||||
|
`git send-email`. See [git documentation] for help. |
||||||
|
|
||||||
|
The first line of a commit message should contain a prefix indicating |
||||||
|
what part is affected by the patch followed by one sentence that |
||||||
|
describes the change. For examples: |
||||||
|
|
||||||
|
protocol: Support scaled outputs and surfaces |
||||||
|
|
||||||
|
and |
||||||
|
|
||||||
|
doc: generate server documentation from XML too |
||||||
|
|
||||||
|
If in doubt what prefix to use, look at other commits that change the |
||||||
|
same file(s) as the patch being sent. |
||||||
|
|
||||||
|
The body of the commit message should describe what the patch changes |
||||||
|
and why, and also note any particular side effects. This shouldn't be |
||||||
|
empty on most of the cases. It shouldn't take a lot of effort to write |
||||||
|
a commit message for an obvious change, so an empty commit message |
||||||
|
body is only acceptable if the questions "What?" and "Why?" are already |
||||||
|
answered on the one-line summary. |
||||||
|
|
||||||
|
The lines of the commit message should have at most 76 characters, to |
||||||
|
cope with the way git log presents them. |
||||||
|
|
||||||
|
See [notes on commit messages] for a recommended reading on writing commit |
||||||
|
messages. |
||||||
|
|
||||||
|
Your patches should also include a Signed-off-by line with your name and |
||||||
|
email address. If you're not the patch's original author, you should |
||||||
|
also gather S-o-b's by them (and/or whomever gave the patch to you.) The |
||||||
|
significance of this is that it certifies that you created the patch, |
||||||
|
that it was created under an appropriate open source license, or |
||||||
|
provided to you under those terms. This lets us indicate a chain of |
||||||
|
responsibility for the copyright status of the code. |
||||||
|
|
||||||
|
We won't reject patches that lack S-o-b, but it is strongly recommended. |
||||||
|
|
||||||
|
When you re-send patches, revised or not, it would be very good to document the |
||||||
|
changes compared to the previous revision in the commit message and/or the |
||||||
|
cover letter. If you have already received Reviewed-by or Acked-by tags, you |
||||||
|
should evaluate whether they still apply and include them in the respective |
||||||
|
commit messages. Otherwise the tags may be lost, reviewers miss the credit they |
||||||
|
deserve, and the patches may cause redundant review effort. |
||||||
|
|
||||||
|
|
||||||
|
Tracking patches and following up |
||||||
|
--------------------------------- |
||||||
|
|
||||||
|
[Wayland Patchwork](http://patchwork.freedesktop.org/project/wayland/list/) is |
||||||
|
used for tracking patches to Wayland and Weston. Xwayland patches are tracked |
||||||
|
with the [Xorg project](https://patchwork.freedesktop.org/project/Xorg/list/) |
||||||
|
instead. Libinput patches, even though they use the same mailing list as |
||||||
|
Wayland, are not tracked in the Wayland Patchwork. |
||||||
|
|
||||||
|
The following applies only to Wayland and Weston. |
||||||
|
|
||||||
|
If a patch is not found in Patchwork, there is a high possibility for it to be |
||||||
|
forgotten. Patches attached to bug reports or not arriving to the mailing list |
||||||
|
because of e.g. subscription issues will not be in Patchwork because Patchwork |
||||||
|
only collects patches sent to the list. |
||||||
|
|
||||||
|
When you send a revised version of a patch, it would be very nice to mark your |
||||||
|
old patch as superseded (or rejected, if that is applicable). You can change |
||||||
|
the status of your own patches by registering to Patchwork - ownership is |
||||||
|
identified by email address you use to register. Updating your patch status |
||||||
|
appropriately will help maintainer work. |
||||||
|
|
||||||
|
The following patch states are found in Patchwork: |
||||||
|
|
||||||
|
- **New**: |
||||||
|
Patches under discussion or not yet processed. |
||||||
|
|
||||||
|
- **Under review**: |
||||||
|
Mostly unused state. |
||||||
|
|
||||||
|
- **Accepted**: |
||||||
|
The patch is merged in the master branch upstream, as is or slightly |
||||||
|
modified. |
||||||
|
|
||||||
|
- **Rejected**: |
||||||
|
The idea or approach is rejected and cannot be fixed by revising |
||||||
|
the patch. |
||||||
|
|
||||||
|
- **RFC**: |
||||||
|
Request for comments, not meant to be merged as is. |
||||||
|
|
||||||
|
- **Not applicable**: |
||||||
|
The email was not actually a patch, or the patch is not for Wayland or |
||||||
|
Weston. Libinput patches are usually automatically ignored by Wayland |
||||||
|
Patchwork, but if they get through, they will be marked as Not |
||||||
|
applicable. |
||||||
|
|
||||||
|
- **Changes requested**: |
||||||
|
Reviewers determined that changes to the patch are needed. The |
||||||
|
submitter is expected to send a revised version. (You should |
||||||
|
not wait for your patch to be set to this state before revising, |
||||||
|
though.) |
||||||
|
|
||||||
|
- **Awaiting upstream**: |
||||||
|
Mostly unused as the patch is waiting for upstream actions but |
||||||
|
is not shown in the default list, which means it is easy to |
||||||
|
overlook. |
||||||
|
|
||||||
|
- **Superseded**: |
||||||
|
A revised version of the patch has been submitted. |
||||||
|
|
||||||
|
- **Deferred**: |
||||||
|
Used mostly during freeze periods before releases, to temporarily |
||||||
|
hide patches that cannot be merged during a freeze. |
||||||
|
|
||||||
|
Note, that in the default listing, only patches in *New* or *Under review* are |
||||||
|
shown. |
||||||
|
|
||||||
|
There is also a command line interface to Patchwork called `pwclient`, see |
||||||
|
http://patchwork.freedesktop.org/project/wayland/ |
||||||
|
for links where to get it and the sample `.pwclientrc` for Wayland/Weston. |
||||||
|
|
||||||
|
|
||||||
|
Coding style |
||||||
|
------------ |
||||||
|
|
||||||
|
You should follow the style of the file you're editing. In general, we |
||||||
|
try to follow the rules below. |
||||||
|
|
||||||
|
**Note: this file uses spaces due to markdown rendering issues for tabs. |
||||||
|
Code must be implemented using tabs.** |
||||||
|
|
||||||
|
- indent with tabs, and a tab is always 8 characters wide |
||||||
|
- opening braces are on the same line as the if statement; |
||||||
|
- no braces in an if-body with just one statement; |
||||||
|
- if one of the branches of an if-else condition has braces, then the |
||||||
|
other branch should also have braces; |
||||||
|
- there is always an empty line between variable declarations and the |
||||||
|
code; |
||||||
|
|
||||||
|
```c |
||||||
|
static int |
||||||
|
my_function(void) |
||||||
|
{ |
||||||
|
int a = 0; |
||||||
|
|
||||||
|
if (a) |
||||||
|
b(); |
||||||
|
else |
||||||
|
c(); |
||||||
|
|
||||||
|
if (a) { |
||||||
|
b(); |
||||||
|
c(); |
||||||
|
} else { |
||||||
|
d(); |
||||||
|
} |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
- lines should be less than 80 characters wide; |
||||||
|
- when breaking lines with functions calls, the parameters are aligned |
||||||
|
with the opening parentheses; |
||||||
|
- when assigning a variable with the result of a function call, if the |
||||||
|
line would be longer we break it around the equal '=' sign if it makes |
||||||
|
sense; |
||||||
|
|
||||||
|
```c |
||||||
|
long_variable_name = |
||||||
|
function_with_a_really_long_name(parameter1, parameter2, |
||||||
|
parameter3, parameter4); |
||||||
|
|
||||||
|
x = function_with_a_really_long_name(parameter1, parameter2, |
||||||
|
parameter3, parameter4); |
||||||
|
``` |
||||||
|
|
||||||
|
Conduct |
||||||
|
======= |
||||||
|
|
||||||
|
As a freedesktop.org project, Wayland follows the Contributor Covenant, |
||||||
|
found at: |
||||||
|
https://www.freedesktop.org/wiki/CodeOfConduct |
||||||
|
|
||||||
|
Please conduct yourself in a respectful and civilised manner when |
||||||
|
interacting with community members on mailing lists, IRC, or bug |
||||||
|
trackers. The community represents the project as a whole, and abusive |
||||||
|
or bullying behaviour is not tolerated by the project. |
||||||
|
|
||||||
|
|
||||||
|
Licensing |
||||||
|
========= |
||||||
|
|
||||||
|
Wayland is licensed with the intention to be usable anywhere X.org is. |
||||||
|
Originally, X.org was covered under the MIT X11 license, but changed to |
||||||
|
the MIT Expat license. Similarly, Wayland was covered initially as MIT |
||||||
|
X11 licensed, but changed to the MIT Expat license, following in X.org's |
||||||
|
footsteps. Other than wording, the two licenses are substantially the |
||||||
|
same, with the exception of a no-advertising clause in X11 not included |
||||||
|
in Expat. |
||||||
|
|
||||||
|
New source code files should specify the MIT Expat license in their |
||||||
|
boilerplate, as part of the copyright statement. |
||||||
|
|
||||||
|
|
||||||
|
Review |
||||||
|
====== |
||||||
|
|
||||||
|
All patches, even trivial ones, require at least one positive review |
||||||
|
(Reviewed-by). Additionally, if no Reviewed-by's have been given by |
||||||
|
people with commit access, there needs to be at least one Acked-by from |
||||||
|
someone with commit access. A person with commit access is expected to be |
||||||
|
able to evaluate the patch with respect to the project scope and architecture. |
||||||
|
|
||||||
|
The below review guidelines are intended to be interpreted in spirit, not by |
||||||
|
the letter. There may be circumstances where some guidelines are better |
||||||
|
ignored. We rely very much on the judgement of reviewers and commit rights |
||||||
|
holders. |
||||||
|
|
||||||
|
During review, the following matters should be checked: |
||||||
|
|
||||||
|
- The commit message explains why the change is being made. |
||||||
|
|
||||||
|
- The code fits the project's scope. |
||||||
|
|
||||||
|
- The code license is the same MIT licence the project generally uses. |
||||||
|
|
||||||
|
- Stable ABI or API is not broken. |
||||||
|
|
||||||
|
- Stable ABI or API additions must be justified by actual use cases, not only |
||||||
|
by speculation. They must also be documented, and it is strongly recommended to |
||||||
|
include tests excercising the additions in the test suite. |
||||||
|
|
||||||
|
- The code fits the existing software architecture, e.g. no layering |
||||||
|
violations. |
||||||
|
|
||||||
|
- The code is correct and does not introduce new failures for existing users, |
||||||
|
does not add new corner-case bugs, and does not introduce new compiler |
||||||
|
warnings. |
||||||
|
|
||||||
|
- The patch does what it says in the commit message and changes nothing else. |
||||||
|
|
||||||
|
- The patch is a single logical change. If the commit message addresses |
||||||
|
multiple points, it is a hint that the commit might need splitting up. |
||||||
|
|
||||||
|
- A bug fix should target the underlying root cause instead of hiding symptoms. |
||||||
|
If a complete fix is not practical, partial fixes are acceptable if they come |
||||||
|
with code comments and filed Gitlab issues for the remaining bugs. |
||||||
|
|
||||||
|
- The bug root cause rule applies to external software components as well, e.g. |
||||||
|
do not work around kernel driver issues in userspace. |
||||||
|
|
||||||
|
- The test suite passes. |
||||||
|
|
||||||
|
- The code does not depend on API or ABI which has no working free open source |
||||||
|
implementation. |
||||||
|
|
||||||
|
- The code is not dead or untestable. E.g. if there are no free open source |
||||||
|
software users for it then it is effectively dead code. |
||||||
|
|
||||||
|
- The code is written to be easy to understand, or if code cannot be clear |
||||||
|
enough on its own there are code comments to explain it. |
||||||
|
|
||||||
|
- The code is minimal, i.e. prefer refactor and re-use when possible unless |
||||||
|
clarity suffers. |
||||||
|
|
||||||
|
- The code adheres to the style guidelines. |
||||||
|
|
||||||
|
- In a patch series, every intermediate step adheres to the above guidelines. |
||||||
|
|
||||||
|
|
||||||
|
Commit rights |
||||||
|
============= |
||||||
|
|
||||||
|
Commit rights will be granted to anyone who requests them and fulfills the |
||||||
|
below criteria: |
||||||
|
|
||||||
|
- Submitted some (10 as a rule of thumb) non-trivial (not just simple |
||||||
|
spelling fixes and whitespace adjustment) patches that have been merged |
||||||
|
already. |
||||||
|
|
||||||
|
- Are actively participating in public discussions about their work (on the |
||||||
|
mailing list or IRC). This should not be interpreted as a requirement to |
||||||
|
review other peoples patches but just make sure that patch submission isn't |
||||||
|
one-way communication. Cross-review is still highly encouraged. |
||||||
|
|
||||||
|
- Will be regularly contributing further patches. This includes regular |
||||||
|
contributors to other parts of the open source graphics stack who only |
||||||
|
do the occasional development in this project. |
||||||
|
|
||||||
|
- Agrees to use their commit rights in accordance with the documented merge |
||||||
|
criteria, tools, and processes. |
||||||
|
|
||||||
|
To apply for commit rights, create a new issue in gitlab for the respective |
||||||
|
project and give it the "accounts" label. |
||||||
|
|
||||||
|
Committers are encouraged to request their commit rights get removed when they |
||||||
|
no longer contribute to the project. Commit rights will be reinstated when they |
||||||
|
come back to the project. |
||||||
|
|
||||||
|
Maintainers and committers should encourage contributors to request commit |
||||||
|
rights, especially junior contributors tend to underestimate their skills. |
||||||
|
|
||||||
|
|
||||||
|
Stabilising for releases |
||||||
|
======================== |
||||||
|
|
||||||
|
A release cycle ends with a stable release which also starts a new cycle and |
||||||
|
lifts any code freezes. Gradual code freezing towards a stable release starts |
||||||
|
with an alpha release. The release stages of a cycle are: |
||||||
|
|
||||||
|
- **Alpha release**: |
||||||
|
Signified by version number #.#.91. |
||||||
|
Major features must have landed before this. Major features include |
||||||
|
invasive code motion and refactoring, high risk changes, and new stable |
||||||
|
library ABI. |
||||||
|
|
||||||
|
- **Beta release**: |
||||||
|
Signified by version number #.#.92. |
||||||
|
Minor features must have landed before this. Minor features include all |
||||||
|
new features that are not major, low risk changes, clean-ups, and |
||||||
|
documentation. Stable ABI that was new in the alpha release can be removed |
||||||
|
before a beta release if necessary. |
||||||
|
|
||||||
|
- **Release candidates (RC)**: |
||||||
|
Signified by version number #.#.93 and up to #.#.99. |
||||||
|
Bug fixes that are not release critical must have landed before this. |
||||||
|
Release critical bug fixes can still be landed after this, but they may |
||||||
|
call for another RC. |
||||||
|
|
||||||
|
- **Stable release**: |
||||||
|
Signified by version number #.#.0. |
||||||
|
Ideally no changes since the last RC. |
||||||
|
|
||||||
|
Mind that version #.#.90 is never released. It is used during development when |
||||||
|
no code freeze is in effect. Stable branches and point releases are not covered |
||||||
|
by the above. |
||||||
|
|
||||||
|
|
||||||
|
[git documentation]: http://git-scm.com/documentation |
||||||
|
[notes on commit messages]: http://who-t.blogspot.de/2009/12/on-commit-messages.html |
Loading…
Reference in new issue