| .. _submitting-a-patch: | |
| Submitting a Patch | |
| ================== | |
| QEMU welcomes contributions to fix bugs, add functionality or improve | |
| the documentation. However, we get a lot of patches, and so we have | |
| some guidelines about submitting them. If you follow these, you'll | |
| help make our task of contribution review easier and your change is | |
| likely to be accepted and committed faster. | |
| This page seems very long, so if you are only trying to post a quick | |
| one-shot fix, the bare minimum we ask is that: | |
| .. list-table:: Minimal Checklist for Patches | |
| :widths: 35 65 | |
| :header-rows: 1 | |
| * - Check | |
| - Reason | |
| * - Patches contain Signed-off-by: Real Name <author@email> | |
| - States you are legally able to contribute the code. See :ref:`patch_emails_must_include_a_signed_off_by_line` | |
| * - Sent as patch emails to ``qemu-devel@nongnu.org`` | |
| - The project uses an email list based workflow. See :ref:`submitting_your_patches` | |
| * - Be prepared to respond to review comments | |
| - Code that doesn't pass review will not get merged. See :ref:`participating_in_code_review` | |
| You do not have to subscribe to post (list policy is to reply-to-all to | |
| preserve CCs and keep non-subscribers in the loop on the threads they | |
| start), although you may find it easier as a subscriber to pick up good | |
| ideas from other posts. If you do subscribe, be prepared for a high | |
| volume of email, often over one thousand messages in a week. The list is | |
| moderated; first-time posts from an email address (whether or not you | |
| subscribed) may be subject to some delay while waiting for a moderator | |
| to allow your address. | |
| The larger your contribution is, or if you plan on becoming a long-term | |
| contributor, then the more important the rest of this page becomes. | |
| Reading the table of contents below should already give you an idea of | |
| the basic requirements. Use the table of contents as a reference, and | |
| read the parts that you have doubts about. | |
| .. contents:: Table of Contents | |
| .. _writing_your_patches: | |
| Writing your Patches | |
| -------------------- | |
| .. _use_the_qemu_coding_style: | |
| Use the QEMU coding style | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| You can run run *scripts/checkpatch.pl <patchfile>* before submitting to | |
| check that you are in compliance with our coding standards. Be aware | |
| that ``checkpatch.pl`` is not infallible, though, especially where C | |
| preprocessor macros are involved; use some common sense too. See also: | |
| - :ref:`coding-style` | |
| - `Automate a checkpatch run on | |
| commit <https://blog.vmsplice.net/2011/03/how-to-automatically-run-checkpatchpl.html>`__ | |
| .. _base_patches_against_current_git_master: | |
| Base patches against current git master | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| There's no point submitting a patch which is based on a released version | |
| of QEMU because development will have moved on from then and it probably | |
| won't even apply to master. We only apply selected bugfixes to release | |
| branches and then only as backports once the code has gone into master. | |
| It is also okay to base patches on top of other on-going work that is | |
| not yet part of the git master branch. To aid continuous integration | |
| tools, such as `patchew <http://patchew.org/QEMU/>`__, you should `add a | |
| tag <https://lists.gnu.org/archive/html/qemu-devel/2017-08/msg01288.html>`__ | |
| line ``Based-on: $MESSAGE_ID`` to your cover letter to make the series | |
| dependency obvious. | |
| .. _split_up_long_patches: | |
| Split up long patches | |
| ~~~~~~~~~~~~~~~~~~~~~ | |
| Split up longer patches into a patch series of logical code changes. | |
| Each change should compile and execute successfully. For instance, don't | |
| add a file to the makefile in patch one and then add the file itself in | |
| patch two. (This rule is here so that people can later use tools like | |
| `git bisect <http://git-scm.com/docs/git-bisect>`__ without hitting | |
| points in the commit history where QEMU doesn't work for reasons | |
| unrelated to the bug they're chasing.) Put documentation first, not | |
| last, so that someone reading the series can do a clean-room evaluation | |
| of the documentation, then validate that the code matched the | |
| documentation. A commit message that mentions "Also, ..." is often a | |
| good candidate for splitting into multiple patches. For more thoughts on | |
| properly splitting patches and writing good commit messages, see `this | |
| advice from | |
| OpenStack <https://wiki.openstack.org/wiki/GitCommitMessages>`__. | |
| .. _make_code_motion_patches_easy_to_review: | |
| Make code motion patches easy to review | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| If a series requires large blocks of code motion, there are tricks for | |
| making the refactoring easier to review. Split up the series so that | |
| semantic changes (or even function renames) are done in a separate patch | |
| from the raw code motion. Use a one-time setup of ``git config | |
| diff.renames true;`` ``git config diff.algorithm patience`` (refer to | |
| `git-config <http://git-scm.com/docs/git-config>`__). The 'diff.renames' | |
| property ensures file rename patches will be given in a more compact | |
| representation that focuses only on the differences across the file | |
| rename, instead of showing the entire old file as a deletion and the new | |
| file as an insertion. Meanwhile, the 'diff.algorithm' property ensures | |
| that extracting a non-contiguous subset of one file into a new file, but | |
| where all extracted parts occur in the same order both before and after | |
| the patch, will reduce churn in trying to treat unrelated ``}`` lines in | |
| the original file as separating hunks of changes. | |
| Ideally, a code motion patch can be reviewed by doing:: | |
| git format-patch --stdout -1 > patch; | |
| diff -u <(sed -n 's/^-//p' patch) <(sed -n 's/^\+//p' patch) | |
| to focus on the few changes that weren't wholesale code motion. | |
| .. _dont_include_irrelevant_changes: | |
| Don't include irrelevant changes | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| In particular, don't include formatting, coding style or whitespace | |
| changes to bits of code that would otherwise not be touched by the | |
| patch. (It's OK to fix coding style issues in the immediate area (few | |
| lines) of the lines you're changing.) If you think a section of code | |
| really does need a reindent or other large-scale style fix, submit this | |
| as a separate patch which makes no semantic changes; don't put it in the | |
| same patch as your bug fix. | |
| For smaller patches in less frequently changed areas of QEMU, consider | |
| using the :ref:`trivial-patches` process. | |
| .. _write_a_meaningful_commit_message: | |
| Write a meaningful commit message | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| Commit messages should be meaningful and should stand on their own as a | |
| historical record of why the changes you applied were necessary or | |
| useful. | |
| QEMU follows the usual standard for git commit messages: the first line | |
| (which becomes the email subject line) is "subsystem: single line | |
| summary of change". Whether the "single line summary of change" starts | |
| with a capital is a matter of taste, but we prefer that the summary does | |
| not end in a dot. Look at ``git shortlog -30`` for an idea of sample | |
| subject lines. Then there is a blank line and a more detailed | |
| description of the patch, another blank and your Signed-off-by: line. | |
| Please do not use lines that are longer than 76 characters in your | |
| commit message (so that the text still shows up nicely with "git show" | |
| in a 80-columns terminal window). | |
| The body of the commit message is a good place to document why your | |
| change is important. Don't include comments like "This is a suggestion | |
| for fixing this bug" (they can go below the ``---`` line in the email so | |
| they don't go into the final commit message). Make sure the body of the | |
| commit message can be read in isolation even if the reader's mailer | |
| displays the subject line some distance apart (that is, a body that | |
| starts with "... so that" as a continuation of the subject line is | |
| harder to follow). | |
| If your patch fixes a commit that is already in the repository, please | |
| add an additional line with "Fixes: <at-least-12-digits-of-SHA-commit-id> | |
| ("Fixed commit subject")" below the patch description / before your | |
| "Signed-off-by:" line in the commit message. | |
| If your patch fixes a bug in the gitlab bug tracker, please add a line | |
| with "Resolves: <URL-of-the-bug>" to the commit message, too. Gitlab can | |
| close bugs automatically once commits with the "Resolved:" keyword get | |
| merged into the master branch of the project. And if your patch addresses | |
| a bug in another public bug tracker, you can also use a line with | |
| "Buglink: <URL-of-the-bug>" for reference here, too. | |
| Example:: | |
| Fixes: 14055ce53c2d ("s390x/tcg: avoid overflows in time2tod/tod2time") | |
| Resolves: https://gitlab.com/qemu-project/qemu/-/issues/42 | |
| Buglink: https://bugs.launchpad.net/qemu/+bug/1804323`` | |
| Some other tags that are used in commit messages include "Message-Id:" | |
| "Tested-by:", "Acked-by:", "Reported-by:", "Suggested-by:". See ``git | |
| log`` for these keywords for example usage. | |
| .. _test_your_patches: | |
| Test your patches | |
| ~~~~~~~~~~~~~~~~~ | |
| Although QEMU uses various :ref:`ci` services that attempt to test | |
| patches submitted to the list, it still saves everyone time if you | |
| have already tested that your patch compiles and works. Because QEMU | |
| is such a large project the default configuration won't create a | |
| testing pipeline on GitLab when a branch is pushed. See the :ref:`CI | |
| variable documentation<ci_var>` for details on how to control the | |
| running of tests; but it is still wise to also check that your patches | |
| work with a full build before submitting a series, especially if your | |
| changes might have an unintended effect on other areas of the code you | |
| don't normally experiment with. See :ref:`testing` for more details on | |
| what tests are available. | |
| Also, it is a wise idea to include a testsuite addition as part of | |
| your patches - either to ensure that future changes won't regress your | |
| new feature, or to add a test which exposes the bug that the rest of | |
| your series fixes. Keeping separate commits for the test and the fix | |
| allows reviewers to rebase the test to occur first to prove it catches | |
| the problem, then again to place it last in the series so that | |
| bisection doesn't land on a known-broken state. | |
| .. _submitting_your_patches: | |
| Submitting your Patches | |
| ----------------------- | |
| The QEMU project uses a public email based workflow for reviewing and | |
| merging patches. As a result all contributions to QEMU must be **sent | |
| as patches** to the qemu-devel `mailing list | |
| <https://wiki.qemu.org/Contribute/MailingLists>`__. Patch | |
| contributions should not be posted on the bug tracker, posted on | |
| forums, or externally hosted and linked to. (We have other mailing | |
| lists too, but all patches must go to qemu-devel, possibly with a Cc: | |
| to another list.) ``git send-email`` (`step-by-step setup guide | |
| <https://git-send-email.io/>`__ and `hints and tips | |
| <https://elixir.bootlin.com/linux/latest/source/Documentation/process/email-clients.rst>`__) | |
| works best for delivering the patch without mangling it, but | |
| attachments can be used as a last resort on a first-time submission. | |
| .. _if_you_cannot_send_patch_emails: | |
| If you cannot send patch emails | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| In rare cases it may not be possible to send properly formatted patch | |
| emails. You can use `sourcehut <https://sourcehut.org/>`__ to send your | |
| patches to the QEMU mailing list by following these steps: | |
| #. Register or sign in to your account | |
| #. Add your SSH public key in `meta \| | |
| keys <https://meta.sr.ht/keys>`__. | |
| #. Publish your git branch using **git push git@git.sr.ht:~USERNAME/qemu | |
| HEAD** | |
| #. Send your patches to the QEMU mailing list using the web-based | |
| ``git-send-email`` UI at https://git.sr.ht/~USERNAME/qemu/send-email | |
| `This video | |
| <https://spacepub.space/videos/watch/ad258d23-0ac6-488c-83fc-2bacf578de3a>`__ | |
| shows the web-based ``git-send-email`` workflow. Documentation is | |
| available `here | |
| <https://man.sr.ht/git.sr.ht/#sending-patches-upstream>`__. | |
| .. _cc_the_relevant_maintainer: | |
| CC the relevant maintainer | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| Send patches both to the mailing list and CC the maintainer(s) of the | |
| files you are modifying. look in the MAINTAINERS file to find out who | |
| that is. Also try using scripts/get_maintainer.pl from the repository | |
| for learning the most common committers for the files you touched. | |
| Example:: | |
| ~/src/qemu/scripts/get_maintainer.pl -f hw/ide/core.c | |
| In fact, you can automate this, via a one-time setup of ``git config | |
| sendemail.cccmd 'scripts/get_maintainer.pl --nogit-fallback'`` (Refer to | |
| `git-config <http://git-scm.com/docs/git-config>`__.) | |
| .. _do_not_send_as_an_attachment: | |
| Do not send as an attachment | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| Send patches inline so they are easy to reply to with review comments. | |
| Do not put patches in attachments. | |
| .. _use_git_format_patch: | |
| Use ``git format-patch`` | |
| ~~~~~~~~~~~~~~~~~~~~~~~~ | |
| Use the right diff format. | |
| `git format-patch <http://git-scm.com/docs/git-format-patch>`__ will | |
| produce patch emails in the right format (check the documentation to | |
| find out how to drive it). You can then edit the cover letter before | |
| using ``git send-email`` to mail the files to the mailing list. (We | |
| recommend `git send-email <http://git-scm.com/docs/git-send-email>`__ | |
| because mail clients often mangle patches by wrapping long lines or | |
| messing up whitespace. Some distributions do not include send-email in a | |
| default install of git; you may need to download additional packages, | |
| such as 'git-email' on Fedora-based systems.) Patch series need a cover | |
| letter, with shallow threading (all patches in the series are | |
| in-reply-to the cover letter, but not to each other); single unrelated | |
| patches do not need a cover letter (but if you do send a cover letter, | |
| use ``--numbered`` so the cover and the patch have distinct subject lines). | |
| Patches are easier to find if they start a new top-level thread, rather | |
| than being buried in-reply-to another existing thread. | |
| .. _avoid_posting_large_binary_blob: | |
| Avoid posting large binary blob | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| If you added binaries to the repository, consider producing the patch | |
| emails using ``git format-patch --no-binary`` and include a link to a | |
| git repository to fetch the original commit. | |
| .. _patch_emails_must_include_a_signed_off_by_line: | |
| Patch emails must include a ``Signed-off-by:`` line | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| Your patches **must** include a Signed-off-by: line. This is a hard | |
| requirement because it's how you say "I'm legally okay to contribute | |
| this and happy for it to go into QEMU". The process is modelled after | |
| the `Linux kernel | |
| <http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/SubmittingPatches?id=f6f94e2ab1b33f0082ac22d71f66385a60d8157f#n297>`__ | |
| policy. | |
| If you wrote the patch, make sure your "From:" and "Signed-off-by:" | |
| lines use the same spelling. It's okay if you subscribe or contribute to | |
| the list via more than one address, but using multiple addresses in one | |
| commit just confuses things. If someone else wrote the patch, git will | |
| include a "From:" line in the body of the email (different from your | |
| envelope From:) that will give credit to the correct author; but again, | |
| that author's Signed-off-by: line is mandatory, with the same spelling. | |
| There are various tooling options for automatically adding these tags | |
| include using ``git commit -s`` or ``git format-patch -s``. For more | |
| information see `SubmittingPatches 1.12 | |
| <http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/SubmittingPatches?id=f6f94e2ab1b33f0082ac22d71f66385a60d8157f#n297>`__. | |
| .. _include_a_meaningful_cover_letter: | |
| Include a meaningful cover letter | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| This is a requirement for any series with multiple patches (as it aids | |
| continuous integration), but optional for an isolated patch. The cover | |
| letter explains the overall goal of such a series, and also provides a | |
| convenient 0/N email for others to reply to the series as a whole. A | |
| one-time setup of ``git config format.coverletter auto`` (refer to | |
| `git-config <http://git-scm.com/docs/git-config>`__) will generate the | |
| cover letter as needed. | |
| When reviewers don't know your goal at the start of their review, they | |
| may object to early changes that don't make sense until the end of the | |
| series, because they do not have enough context yet at that point of | |
| their review. A series where the goal is unclear also risks a higher | |
| number of review-fix cycles because the reviewers haven't bought into | |
| the idea yet. If the cover letter can explain these points to the | |
| reviewer, the process will be smoother patches will get merged faster. | |
| Make sure your cover letter includes a diffstat of changes made over the | |
| entire series; potential reviewers know what files they are interested | |
| in, and they need an easy way determine if your series touches them. | |
| .. _use_the_rfc_tag_if_needed: | |
| Use the RFC tag if needed | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| For example, "[PATCH RFC v2]". ``git format-patch --subject-prefix=RFC`` | |
| can help. | |
| "RFC" means "Request For Comments" and is a statement that you don't | |
| intend for your patchset to be applied to master, but would like some | |
| review on it anyway. Reasons for doing this include: | |
| - the patch depends on some pending kernel changes which haven't yet | |
| been accepted, so the QEMU patch series is blocked until that | |
| dependency has been dealt with, but is worth reviewing anyway | |
| - the patch set is not finished yet (perhaps it doesn't cover all use | |
| cases or work with all targets) but you want early review of a major | |
| API change or design structure before continuing | |
| In general, since it's asking other people to do review work on a | |
| patchset that the submitter themselves is saying shouldn't be applied, | |
| it's best to: | |
| - use it sparingly | |
| - in the cover letter, be clear about why a patch is an RFC, what areas | |
| of the patchset you're looking for review on, and why reviewers | |
| should care | |
| .. _consider_whether_your_patch_is_applicable_for_stable: | |
| Consider whether your patch is applicable for stable | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| If your patch fixes a severe issue or a regression, it may be applicable | |
| for stable. In that case, consider adding ``Cc: qemu-stable@nongnu.org`` | |
| to your patch to notify the stable maintainers. | |
| For more details on how QEMU's stable process works, refer to the | |
| :ref:`stable-process` page. | |
| .. _participating_in_code_review: | |
| Participating in Code Review | |
| ---------------------------- | |
| All patches submitted to the QEMU project go through a code review | |
| process before they are accepted. This will often mean a series will | |
| go through a number of iterations before being picked up by | |
| :ref:`maintainers<maintainers>`. You therefore should be prepared to | |
| read replies to your messages and be willing to act on them. | |
| Maintainers are often willing to manually fix up first-time | |
| contributions, since there is a learning curve involved in making an | |
| ideal patch submission. However for the best results you should | |
| proactively respond to suggestions with changes or justifications for | |
| your current approach. | |
| Some areas of code that are well maintained may review patches | |
| quickly, lesser-loved areas of code may have a longer delay. | |
| .. _stay_around_to_fix_problems_raised_in_code_review: | |
| Stay around to fix problems raised in code review | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| Not many patches get into QEMU straight away -- it is quite common that | |
| developers will identify bugs, or suggest a cleaner approach, or even | |
| just point out code style issues or commit message typos. You'll need to | |
| respond to these, and then send a second version of your patches with | |
| the issues fixed. This takes a little time and effort on your part, but | |
| if you don't do it then your changes will never get into QEMU. | |
| Remember that a maintainer is under no obligation to take your | |
| patches. If someone has spent the time reviewing your code and | |
| suggesting improvements and you simply re-post without either | |
| addressing the comment directly or providing additional justification | |
| for the change then it becomes wasted effort. You cannot demand others | |
| merge and then fix up your code after the fact. | |
| When replying to comments on your patches **reply to all and not just | |
| the sender** -- keeping discussion on the mailing list means everybody | |
| can follow it. Remember the spirit of the :ref:`code_of_conduct` and | |
| keep discussions respectful and collaborative and avoid making | |
| personal comments. | |
| .. _pay_attention_to_review_comments: | |
| Pay attention to review comments | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| Someone took their time to review your work, and it pays to respect that | |
| effort; repeatedly submitting a series without addressing all comments | |
| from the previous round tends to alienate reviewers and stall your | |
| patch. Reviewers aren't always perfect, so it is okay if you want to | |
| argue that your code was correct in the first place instead of blindly | |
| doing everything the reviewer asked. On the other hand, if someone | |
| pointed out a potential issue during review, then even if your code | |
| turns out to be correct, it's probably a sign that you should improve | |
| your commit message and/or comments in the code explaining why the code | |
| is correct. | |
| If you fix issues that are raised during review **resend the entire | |
| patch series** not just the one patch that was changed. This allows | |
| maintainers to easily apply the fixed series without having to manually | |
| identify which patches are relevant. Send the new version as a complete | |
| fresh email or series of emails -- don't try to make it a followup to | |
| version 1. (This helps automatic patch email handling tools distinguish | |
| between v1 and v2 emails.) | |
| .. _when_resending_patches_add_a_version_tag: | |
| When resending patches add a version tag | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| All patches beyond the first version should include a version tag -- for | |
| example, "[PATCH v2]". This means people can easily identify whether | |
| they're looking at the most recent version. (The first version of a | |
| patch need not say "v1", just [PATCH] is sufficient.) For patch series, | |
| the version applies to the whole series -- even if you only change one | |
| patch, you resend the entire series and mark it as "v2". Don't try to | |
| track versions of different patches in the series separately. `git | |
| format-patch <http://git-scm.com/docs/git-format-patch>`__ and `git | |
| send-email <http://git-scm.com/docs/git-send-email>`__ both understand | |
| the ``-v2`` option to make this easier. Send each new revision as a new | |
| top-level thread, rather than burying it in-reply-to an earlier | |
| revision, as many reviewers are not looking inside deep threads for new | |
| patches. | |
| .. _include_version_history_in_patchset_revisions: | |
| Include version history in patchset revisions | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| For later versions of patches, include a summary of changes from | |
| previous versions, but not in the commit message itself. In an email | |
| formatted as a git patch, the commit message is the part above the ``---`` | |
| line, and this will go into the git changelog when the patch is | |
| committed. This part should be a self-contained description of what this | |
| version of the patch does, written to make sense to anybody who comes | |
| back to look at this commit in git in six months' time. The part below | |
| the ``---`` line and above the patch proper (git format-patch puts the | |
| diffstat here) is a good place to put remarks for people reading the | |
| patch email, and this is where the "changes since previous version" | |
| summary belongs. The `git-publish | |
| <https://github.com/stefanha/git-publish>`__ script can help with | |
| tracking a good summary across versions. Also, the `git-backport-diff | |
| <https://github.com/codyprime/git-scripts>`__ script can help focus | |
| reviewers on what changed between revisions. | |
| .. _tips_and_tricks: | |
| Tips and Tricks | |
| --------------- | |
| .. _proper_use_of_reviewed_by_tags_can_aid_review: | |
| Proper use of Reviewed-by: tags can aid review | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| When reviewing a large series, a reviewer can reply to some of the | |
| patches with a Reviewed-by tag, stating that they are happy with that | |
| patch in isolation (sometimes conditional on minor cleanup, like fixing | |
| whitespace, that doesn't affect code content). You should then update | |
| those commit messages by hand to include the Reviewed-by tag, so that in | |
| the next revision, reviewers can spot which patches were already clean | |
| from the previous round. Conversely, if you significantly modify a patch | |
| that was previously reviewed, remove the reviewed-by tag out of the | |
| commit message, as well as listing the changes from the previous | |
| version, to make it easier to focus a reviewer's attention to your | |
| changes. | |
| .. _if_your_patch_seems_to_have_been_ignored: | |
| If your patch seems to have been ignored | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| If your patchset has received no replies you should "ping" it after a | |
| week or two, by sending an email as a reply-to-all to the patch mail, | |
| including the word "ping" and ideally also a link to the page for the | |
| patch on `patchew <https://patchew.org/QEMU/>`__ or | |
| `lore.kernel.org <https://lore.kernel.org/qemu-devel/>`__. It's worth | |
| double-checking for reasons why your patch might have been ignored | |
| (forgot to CC the maintainer? annoyed people by failing to respond to | |
| review comments on an earlier version?), but often for less-maintained | |
| areas of QEMU patches do just slip through the cracks. If your ping is | |
| also ignored, ping again after another week or so. As the submitter, you | |
| are the person with the most motivation to get your patch applied, so | |
| you have to be persistent. | |
| .. _is_my_patch_in: | |
| Is my patch in? | |
| ~~~~~~~~~~~~~~~ | |
| QEMU has some Continuous Integration machines that try to catch patch | |
| submission problems as soon as possible. `patchew | |
| <http://patchew.org/QEMU/>`__ includes a web interface for tracking the | |
| status of various threads that have been posted to the list, and may | |
| send you an automated mail if it detected a problem with your patch. | |
| Once your patch has had enough review on list, the maintainer for that | |
| area of code will send notification to the list that they are including | |
| your patch in a particular staging branch. Periodically, the maintainer | |
| then takes care of :ref:`submitting-a-pull-request` | |
| for aggregating topic branches into mainline QEMU. Generally, you do not | |
| need to send a pull request unless you have contributed enough patches | |
| to become a maintainer over a particular section of code. Maintainers | |
| may further modify your commit, by resolving simple merge conflicts or | |
| fixing minor typos pointed out during review, but will always add a | |
| Signed-off-by line in addition to yours, indicating that it went through | |
| their tree. Occasionally, the maintainer's pull request may hit more | |
| difficult merge conflicts, where you may be requested to help rebase and | |
| resolve the problems. It may take a couple of weeks between when your | |
| patch first had a positive review to when it finally lands in qemu.git; | |
| release cycle freezes may extend that time even longer. | |
| .. _return_the_favor: | |
| Return the favor | |
| ~~~~~~~~~~~~~~~~ | |
| Peer review only works if everyone chips in a bit of review time. If | |
| everyone submitted more patches than they reviewed, we would have a | |
| patch backlog. A good goal is to try to review at least as many patches | |
| from others as what you submit. Don't worry if you don't know the code | |
| base as well as a maintainer; it's perfectly fine to admit when your | |
| review is weak because you are unfamiliar with the code. |