1.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
2
3Contributing Changes to a Component
4************************************
5
6Contributions to the Yocto Project and OpenEmbedded are very welcome.
7Because the system is extremely configurable and flexible, we recognize
8that developers will want to extend, configure or optimize it for their
9specific uses.
10
11.. _ref-why-mailing-lists:
12
13Contributing through mailing lists --- Why not using web-based workflows?
14=========================================================================
15
16Both Yocto Project and OpenEmbedded have many key components that are
17maintained by patches being submitted on mailing lists. We appreciate this
18approach does look a little old fashioned when other workflows are available
19through web technology such as GitHub, GitLab and others. Since we are often
20asked this question, we’ve decided to document the reasons for using mailing
21lists.
22
23One significant factor is that we value peer review. When a change is proposed
24to many of the core pieces of the project, it helps to have many eyes of review
25go over them. Whilst there is ultimately one maintainer who needs to make the
26final call on accepting or rejecting a patch, the review is made by many eyes
27and the exact people reviewing it are likely unknown to the maintainer. It is
28often the surprise reviewer that catches the most interesting issues!
29
30This is in contrast to the "GitHub" style workflow where either just a
31maintainer makes that review, or review is specifically requested from
32nominated people. We believe there is significant value added to the codebase
33by this peer review and that moving away from mailing lists would be to the
34detriment of our code.
35
36We also need to acknowledge that many of our developers are used to this
37mailing list workflow and have worked with it for years, with tools and
38processes built around it. Changing away from this would result in a loss
39of key people from the project, which would again be to its detriment.
40
41The projects are acutely aware that potential new contributors find the
42mailing list approach off-putting and would prefer a web-based GUI.
43Since we don’t believe that can work for us, the project is aiming to ensure
44`patchwork <https://patchwork.yoctoproject.org/>`__ is available to help track
45patch status and also looking at how tooling can provide more feedback to users
46about patch status. We are looking at improving tools such as ``patchtest`` to
47test user contributions before they hit the mailing lists and also at better
48documenting how to use such workflows since we recognise that whilst this was
49common knowledge a decade ago, it might not be as familiar now.
50
51Preparing Changes for Submission
52================================
53
54Set up Git
55----------
56
57The first thing to do is to install Git packages. Here is an example
58on Debian and Ubuntu::
59
60   sudo apt install git-core git-email
61
62Then, you need to set a name and e-mail address that Git will
63use to identify your commits::
64
65   git config --global user.name "Ada Lovelace"
66   git config --global user.email "ada.lovelace@gmail.com"
67
68Clone the Git repository for the component to modify
69----------------------------------------------------
70
71After identifying the component to modify as described in the
72":doc:`../contributor-guide/identify-component`" section, clone the
73corresponding Git repository. Here is an example for OpenEmbedded-Core::
74
75  git clone https://git.openembedded.org/openembedded-core
76  cd openembedded-core
77
78Create a new branch
79-------------------
80
81Then, create a new branch in your local Git repository
82for your changes, starting from the reference branch in the upstream
83repository (often called ``master``)::
84
85   $ git checkout <ref-branch>
86   $ git checkout -b my-changes
87
88If you have completely unrelated sets of changes to submit, you should even
89create one branch for each set.
90
91Implement and commit changes
92----------------------------
93
94In each branch, you should group your changes into small, controlled and
95isolated ones. Keeping changes small and isolated aids review, makes
96merging/rebasing easier and keeps the change history clean should anyone need
97to refer to it in future.
98
99To this purpose, you should create *one Git commit per change*,
100corresponding to each of the patches you will eventually submit.
101See `further guidance <https://www.kernel.org/doc/html/latest/process/submitting-patches.html#separate-your-changes>`__
102in the Linux kernel documentation if needed.
103
104For example, when you intend to add multiple new recipes, each recipe
105should be added in a separate commit. For upgrades to existing recipes,
106the previous version should usually be deleted as part of the same commit
107to add the upgraded version.
108
109#. *Stage Your Changes:* Stage your changes by using the ``git add``
110   command on each file you modified. If you want to stage all the
111   files you modified, you can even use the ``git add -A`` command.
112
113#. *Commit Your Changes:* This is when you can create separate commits. For
114   each commit to create, use the ``git commit -s`` command with the files
115   or directories you want to include in the commit::
116
117      $ git commit -s file1 file2 dir1 dir2 ...
118
119   To include **a**\ ll staged files::
120
121      $ git commit -sa
122
123   -  The ``-s`` option of ``git commit`` adds a "Signed-off-by:" line
124      to your commit message. There is the same requirement for contributing
125      to the Linux kernel. Adding such a line signifies that you, the
126      submitter, have agreed to the `Developer's Certificate of Origin 1.1
127      <https://www.kernel.org/doc/html/latest/process/submitting-patches.html#sign-your-work-the-developer-s-certificate-of-origin>`__
128      as follows:
129
130      .. code-block:: none
131
132         Developer's Certificate of Origin 1.1
133
134         By making a contribution to this project, I certify that:
135
136         (a) The contribution was created in whole or in part by me and I
137             have the right to submit it under the open source license
138             indicated in the file; or
139
140         (b) The contribution is based upon previous work that, to the best
141             of my knowledge, is covered under an appropriate open source
142             license and I have the right under that license to submit that
143             work with modifications, whether created in whole or in part
144             by me, under the same open source license (unless I am
145             permitted to submit under a different license), as indicated
146             in the file; or
147
148         (c) The contribution was provided directly to me by some other
149             person who certified (a), (b) or (c) and I have not modified
150             it.
151
152         (d) I understand and agree that this project and the contribution
153             are public and that a record of the contribution (including all
154             personal information I submit with it, including my sign-off) is
155             maintained indefinitely and may be redistributed consistent with
156             this project or the open source license(s) involved.
157
158   -  Provide a single-line summary of the change and, if more
159      explanation is needed, provide more detail in the body of the
160      commit. This summary is typically viewable in the "shortlist" of
161      changes. Thus, providing something short and descriptive that
162      gives the reader a summary of the change is useful when viewing a
163      list of many commits. You should prefix this short description
164      with the recipe name (if changing a recipe), or else with the
165      short form path to the file being changed.
166
167      .. note::
168
169         To find a suitable prefix for the commit summary, a good idea
170         is to look for prefixes used in previous commits touching the
171         same files or directories::
172
173            git log --oneline <paths>
174
175   -  For the body of the commit message, provide detailed information
176      that describes what you changed, why you made the change, and the
177      approach you used. It might also be helpful if you mention how you
178      tested the change. Provide as much detail as you can in the body
179      of the commit message.
180
181      .. note::
182
183         If the single line summary is enough to describe a simple
184         change, the body of the commit message can be left empty.
185
186   -  If the change addresses a specific bug or issue that is associated
187      with a bug-tracking ID, include a reference to that ID in your
188      detailed description. For example, the Yocto Project uses a
189      specific convention for bug references --- any commit that addresses
190      a specific bug should use the following form for the detailed
191      description. Be sure to use the actual bug-tracking ID from
192      Bugzilla for bug-id::
193
194         Fixes [YOCTO #bug-id]
195
196         detailed description of change
197
198#. *Crediting contributors:* By using the ``git commit --amend`` command,
199   you can add some tags to the commit description to credit other contributors
200   to the change:
201
202   -  ``Reported-by``: name and email of a person reporting a bug
203      that your commit is trying to fix. This is a good practice
204      to encourage people to go on reporting bugs and let them
205      know that their reports are taken into account.
206
207   -  ``Suggested-by``: name and email of a person to credit for the
208      idea of making the change.
209
210   -  ``Tested-by``, ``Reviewed-by``: name and email for people having
211      tested your changes or reviewed their code. These fields are
212      usually added by the maintainer accepting a patch, or by
213      yourself if you submitted your patches to early reviewers,
214      or are submitting an unmodified patch again as part of a
215      new iteration of your patch series.
216
217   -  ``CC:`` Name and email of people you want to send a copy
218      of your changes to. This field will be used by ``git send-email``.
219
220   See `more guidance about using such tags
221   <https://www.kernel.org/doc/html/latest/process/submitting-patches.html#using-reported-by-tested-by-reviewed-by-suggested-by-and-fixes>`__
222   in the Linux kernel documentation.
223
224Test your changes
225-----------------
226
227For each contributions you make, you should test your changes as well.
228For this the Yocto Project offers several types of tests. Those tests cover
229different areas and it depends on your changes which are feasible. For example run:
230
231   -  For changes that affect the build environment:
232
233      -  ``bitbake-selftest``: for changes within BitBake
234
235      -  ``oe-selftest``: to test combinations of BitBake runs
236
237      -  ``oe-build-perf-test``: to test the performance of common build scenarios
238
239   -  For changes in a recipe:
240
241      - ``ptest``: run package specific tests, if they exist
242
243      - ``testimage``: build an image, boot it and run testcases on it
244
245      - If applicable, ensure also the ``native`` and ``nativesdk`` variants builds
246
247   -  For changes relating to the SDK:
248
249      - ``testsdk``: to build, install and run tests against a SDK
250
251      - ``testsdk_ext``: to build, install and run tests against an extended SDK
252
253Note that this list just gives suggestions and is not exhaustive. More details can
254be found here: :ref:`test-manual/intro:Yocto Project Tests --- Types of Testing Overview`.
255
256Creating Patches
257================
258
259Here is the general procedure on how to create patches to be sent through email:
260
261#. *Describe the Changes in your Branch:* If you have more than one commit
262   in your branch, it's recommended to provide a cover letter describing
263   the series of patches you are about to send.
264
265   For this purpose, a good solution is to store the cover letter contents
266   in the branch itself::
267
268      git branch --edit-description
269
270   This will open a text editor to fill in the description for your
271   changes. This description can be updated when necessary and will
272   be used by Git to create the cover letter together with the patches.
273
274   It is recommended to start this description with a title line which
275   will serve a the subject line for the cover letter.
276
277#. *Generate Patches for your Branch:* The ``git format-patch`` command will
278   generate patch files for each of the commits in your branch. You need
279   to pass the reference branch your branch starts from.
280
281   If you branch didn't need a description in the previous step::
282
283      $ git format-patch <ref-branch>
284
285   If you filled a description for your branch, you will want to generate
286   a cover letter too::
287
288      $ git format-patch --cover-letter --cover-from-description=auto <ref-branch>
289
290   After the command is run, the current directory contains numbered
291   ``.patch`` files for the commits in your branch. If you have a cover
292   letter, it will be in the ``0000-cover-letter.patch``.
293
294   .. note::
295
296      The ``--cover-from-description=auto`` option makes ``git format-patch``
297      use the first paragraph of the branch description as the cover
298      letter title. Another possibility, which is easier to remember, is to pass
299      only the ``--cover-letter`` option, but you will have to edit the
300      subject line manually every time you generate the patches.
301
302      See the `git format-patch manual page <https://git-scm.com/docs/git-format-patch>`__
303      for details.
304
305#. *Review each of the Patch Files:* This final review of the patches
306   before sending them often allows to view your changes from a different
307   perspective and discover defects such as typos, spacing issues or lines
308   or even files that you didn't intend to modify. This review should
309   include the cover letter patch too.
310
311   If necessary, rework your commits as described in
312   ":ref:`contributor-guide/submit-changes:taking patch review into account`".
313
314Validating Patches with Patchtest
315=================================
316
317``patchtest`` is available in ``openembedded-core`` as a tool for making
318sure that your patches are well-formatted and contain important info for
319maintenance purposes, such as ``Signed-off-by`` and ``Upstream-Status``
320tags. Note that no functional testing of the changes will be performed by ``patchtest``.
321Currently, it only supports testing patches for ``openembedded-core`` branches.
322To setup, perform the following::
323
324    pip install -r meta/lib/patchtest/requirements.txt
325    source oe-init-build-env
326    bitbake-layers add-layer ../meta-selftest
327
328Once these steps are complete and you have generated your patch files,
329you can run ``patchtest`` like so::
330
331    patchtest --patch <patch_name>
332
333Alternatively, if you want ``patchtest`` to iterate over and test
334multiple patches stored in a directory, you can use::
335
336    patchtest --directory <directory_name>
337
338By default, ``patchtest`` uses its own modules' file paths to determine what
339repository and test suite to check patches against. If you wish to test
340patches against a repository other than ``openembedded-core`` and/or use
341a different set of tests, you can use the ``--repodir`` and ``--testdir``
342flags::
343
344    patchtest --patch <patch_name> --repodir <path/to/repo> --testdir <path/to/testdir>
345
346Finally, note that ``patchtest`` is designed to test patches in a standalone
347way, so if your patches are meant to apply on top of changes made by
348previous patches in a series, it is possible that ``patchtest`` will report
349false failures regarding the "merge on head" test.
350
351Using ``patchtest`` in this manner provides a final check for the overall
352quality of your changes before they are submitted for review by the
353maintainers.
354
355Sending the Patches via Email
356=============================
357
358Using Git to Send Patches
359-------------------------
360
361To submit patches through email, it is very important that you send them
362without any whitespace or HTML formatting that either you or your mailer
363introduces. The maintainer that receives your patches needs to be able
364to save and apply them directly from your emails, using the ``git am``
365command.
366
367Using the ``git send-email`` command is the only error-proof way of sending
368your patches using email since there is no risk of compromising whitespace
369in the body of the message, which can occur when you use your own mail
370client. It will also properly include your patches as *inline attachments*,
371which is not easy to do with standard e-mail clients without breaking lines.
372If you used your regular e-mail client and shared your patches as regular
373attachments, reviewers wouldn't be able to quote specific sections of your
374changes and make comments about them.
375
376Setting up Git to Send Email
377----------------------------
378
379The ``git send-email`` command can send email by using a local or remote
380Mail Transport Agent (MTA) such as ``msmtp``, ``sendmail``, or
381through a direct SMTP configuration in your Git ``~/.gitconfig`` file.
382
383Here are the settings for letting ``git send-email`` send e-mail through your
384regular STMP server, using a Google Mail account as an example::
385
386   git config --global sendemail.smtpserver smtp.gmail.com
387   git config --global sendemail.smtpserverport 587
388   git config --global sendemail.smtpencryption tls
389   git config --global sendemail.smtpuser ada.lovelace@gmail.com
390   git config --global sendemail.smtppass = XXXXXXXX
391
392These settings will appear in the ``.gitconfig`` file in your home directory.
393
394If you neither can use a local MTA nor SMTP,  make sure you use an email client
395that does not touch the message (turning spaces in tabs, wrapping lines, etc.).
396A good mail client to do so is Pine (or Alpine) or Mutt. For more
397information about suitable clients, see `Email clients info for Linux
398<https://www.kernel.org/doc/html/latest/process/email-clients.html>`__
399in the Linux kernel sources.
400
401If you use such clients, just include the patch in the body of your email.
402
403Finding a Suitable Mailing List
404-------------------------------
405
406You should send patches to the appropriate mailing list so that they can be
407reviewed by the right contributors and merged by the appropriate maintainer.
408The specific mailing list you need to use depends on the location of the code
409you are changing.
410
411If people have concerns with any of the patches, they will usually voice
412their concern over the mailing list. If patches do not receive any negative
413reviews, the maintainer of the affected layer typically takes them, tests them,
414and then based on successful testing, merges them.
415
416In general, each component (e.g. layer) should have a ``README`` file
417that indicates where to send the changes and which process to follow.
418
419The "poky" repository, which is the Yocto Project's reference build
420environment, is a hybrid repository that contains several individual
421pieces (e.g. BitBake, Metadata, documentation, and so forth) built using
422the combo-layer tool. The upstream location used for submitting changes
423varies by component:
424
425-  *Core Metadata:* Send your patches to the
426   :oe_lists:`openembedded-core </g/openembedded-core>`
427   mailing list. For example, a change to anything under the ``meta`` or
428   ``scripts`` directories should be sent to this mailing list.
429
430-  *BitBake:* For changes to BitBake (i.e. anything under the
431   ``bitbake`` directory), send your patches to the
432   :oe_lists:`bitbake-devel </g/bitbake-devel>`
433   mailing list.
434
435-  *meta-poky* and *meta-yocto-bsp* trees: These trees contain Metadata. Use the
436   :yocto_lists:`poky </g/poky>` mailing list.
437
438-  *Documentation*: For changes to the Yocto Project documentation, use the
439   :yocto_lists:`docs </g/docs>` mailing list.
440
441For changes to other layers and tools hosted in the Yocto Project source
442repositories (i.e. :yocto_git:`git.yoctoproject.org <>`), use the
443:yocto_lists:`yocto-patches </g/yocto-patches/>` general mailing list.
444
445For changes to other layers hosted in the OpenEmbedded source
446repositories (i.e. :oe_git:`git.openembedded.org <>`), use
447the :oe_lists:`openembedded-devel </g/openembedded-devel>`
448mailing list, unless specified otherwise in the layer's ``README`` file.
449
450If you intend to submit a new recipe that neither fits into the core Metadata,
451nor into :oe_git:`meta-openembedded </meta-openembedded/>`, you should
452look for a suitable layer in https://layers.openembedded.org. If similar
453recipes can be expected, you may consider :ref:`dev-manual/layers:creating your own layer`.
454
455If in doubt, please ask on the :yocto_lists:`yocto </g/yocto/>` general mailing list
456or on the :oe_lists:`openembedded-devel </g/openembedded-devel>` mailing list.
457
458Subscribing to the Mailing List
459-------------------------------
460
461After identifying the right mailing list to use, you will have to subscribe to
462it if you haven't done it yet.
463
464If you attempt to send patches to a list you haven't subscribed to, your email
465will be returned as undelivered.
466
467However, if you don't want to be receive all the messages sent to a mailing list,
468you can set your subscription to "no email". You will still be a subscriber able
469to send messages, but you won't receive any e-mail. If people reply to your message,
470their e-mail clients will default to including your email address in the
471conversation anyway.
472
473Anyway, you'll also be able to access the new messages on mailing list archives,
474either through a web browser, or for the lists archived on https://lore.kernel.org,
475through an individual newsgroup feed or a git repository.
476
477Sending Patches via Email
478-------------------------
479
480At this stage, you are ready to send your patches via email. Here's the
481typical usage of ``git send-email``::
482
483   git send-email --to <mailing-list-address> *.patch
484
485Then, review each subject line and list of recipients carefully, and then
486and then allow the command to send each message.
487
488You will see that ``git send-email`` will automatically copy the people listed
489in any commit tags such as ``Signed-off-by`` or ``Reported-by``.
490
491In case you are sending patches for :oe_git:`meta-openembedded </meta-openembedded/>`
492or any layer other than :oe_git:`openembedded-core </openembedded-core/>`,
493please add the appropriate prefix so that it is clear which layer the patch is intended
494to be applied to::
495
496   git format-patch --subject-prefix="meta-oe][PATCH" ...
497
498.. note::
499
500   It is actually possible to send patches without generating them
501   first. However, make sure you have reviewed your changes carefully
502   because ``git send-email`` will just show you the title lines of
503   each patch.
504
505   Here's a command you can use if you just have one patch in your
506   branch::
507
508      git send-email --to <mailing-list-address> -1
509
510   If you have multiple patches and a cover letter, you can send
511   patches for all the commits between the reference branch
512   and the tip of your branch::
513
514      git send-email --cover-letter --cover-from-description=auto --to <mailing-list-address> -M <ref-branch>
515
516See the `git send-email manual page <https://git-scm.com/docs/git-send-email>`__
517for details.
518
519Troubleshooting Email Issues
520----------------------------
521
522Fixing your From identity
523~~~~~~~~~~~~~~~~~~~~~~~~~
524
525We have a frequent issue with contributors whose patches are received through
526a ``From`` field which doesn't match the ``Signed-off-by`` information. Here is
527a typical example for people sending from a domain name with :wikipedia:`DMARC`::
528
529   From: "Linus Torvalds via lists.openembedded.org <linus.torvalds=kernel.org@lists.openembedded.org>"
530
531This ``From`` field is used by ``git am`` to recreate commits with the right
532author name. The following will ensure that your e-mails have an additional
533``From`` field at the beginning of the Email body, and therefore that
534maintainers accepting your patches don't have to fix commit author information
535manually::
536
537   git config --global sendemail.from "linus.torvalds@kernel.org"
538
539The ``sendemail.from`` should match your ``user.email`` setting,
540which appears in the ``Signed-off-by`` line of your commits.
541
542Streamlining git send-email usage
543---------------------------------
544
545If you want to save time and not be forced to remember the right options to use
546with ``git send-email``, you can use Git configuration settings.
547
548-  To set the right mailing list address for a given repository::
549
550      git config --local sendemail.to openembedded-devel@lists.openembedded.org
551
552-  If the mailing list requires a subject prefix for the layer
553   (this only works when the repository only contains one layer)::
554
555      git config --local format.subjectprefix "meta-something][PATCH"
556
557Using Scripts to Push a Change Upstream and Request a Pull
558==========================================================
559
560For larger patch series it is preferable to send a pull request which not
561only includes the patch but also a pointer to a branch that can be pulled
562from. This involves making a local branch for your changes, pushing this
563branch to an accessible repository and then using the ``create-pull-request``
564and ``send-pull-request`` scripts from openembedded-core to create and send a
565patch series with a link to the branch for review.
566
567Follow this procedure to push a change to an upstream "contrib" Git
568repository once the steps in
569":ref:`contributor-guide/submit-changes:preparing changes for submission`"
570have been followed:
571
572.. note::
573
574   You can find general Git information on how to push a change upstream
575   in the
576   `Git Community Book <https://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows>`__.
577
578#. *Request Push Access to an "Upstream" Contrib Repository:* Send an email to
579   ``helpdesk@yoctoproject.org``:
580
581    -  Attach your SSH public key which usually named ``id_rsa.pub.``.
582       If you don't have one generate it by running ``ssh-keygen -t rsa -b 4096 -C "your_email@example.com"``.
583
584    -  List the repositories you're planning to contribute to.
585
586    -  Include your preferred branch prefix for ``-contrib`` repositories.
587
588#. *Push Your Commits to the "Contrib" Upstream:* Push your
589   changes to that repository::
590
591      $ git push upstream_remote_repo local_branch_name
592
593   For example, suppose you have permissions to push
594   into the upstream ``meta-intel-contrib`` repository and you are
595   working in a local branch named `your_name`\ ``/README``. The following
596   command pushes your local commits to the ``meta-intel-contrib``
597   upstream repository and puts the commit in a branch named
598   `your_name`\ ``/README``::
599
600      $ git push meta-intel-contrib your_name/README
601
602#. *Determine Who to Notify:* Determine the maintainer or the mailing
603   list that you need to notify for the change.
604
605   Before submitting any change, you need to be sure who the maintainer
606   is or what mailing list that you need to notify. Use either these
607   methods to find out:
608
609   -  *Maintenance File:* Examine the ``maintainers.inc`` file, which is
610      located in the :term:`Source Directory` at
611      ``meta/conf/distro/include``, to see who is responsible for code.
612
613   -  *Search by File:* Using :ref:`overview-manual/development-environment:git`, you can
614      enter the following command to bring up a short list of all
615      commits against a specific file::
616
617         git shortlog -- filename
618
619      Just provide the name of the file for which you are interested. The
620      information returned is not ordered by history but does include a
621      list of everyone who has committed grouped by name. From the list,
622      you can see who is responsible for the bulk of the changes against
623      the file.
624
625   -  *Find the Mailing List to Use:* See the
626      ":ref:`contributor-guide/submit-changes:finding a suitable mailing list`"
627      section above.
628
629#. *Make a Pull Request:* Notify the maintainer or the mailing list that
630   you have pushed a change by making a pull request.
631
632   The Yocto Project provides two scripts that conveniently let you
633   generate and send pull requests to the Yocto Project. These scripts
634   are ``create-pull-request`` and ``send-pull-request``. You can find
635   these scripts in the ``scripts`` directory within the
636   :term:`Source Directory` (e.g.
637   ``poky/scripts``).
638
639   Using these scripts correctly formats the requests without
640   introducing any whitespace or HTML formatting. The maintainer that
641   receives your patches either directly or through the mailing list
642   needs to be able to save and apply them directly from your emails.
643   Using these scripts is the preferred method for sending patches.
644
645   First, create the pull request. For example, the following command
646   runs the script, specifies the upstream repository in the contrib
647   directory into which you pushed the change, and provides a subject
648   line in the created patch files::
649
650      $ poky/scripts/create-pull-request -u meta-intel-contrib -s "Updated Manual Section Reference in README"
651
652   Running this script forms ``*.patch`` files in a folder named
653   ``pull-``\ `PID` in the current directory. One of the patch files is a
654   cover letter.
655
656   Before running the ``send-pull-request`` script, you must edit the
657   cover letter patch to insert information about your change. After
658   editing the cover letter, send the pull request. For example, the
659   following command runs the script and specifies the patch directory
660   and email address. In this example, the email address is a mailing
661   list::
662
663      $ poky/scripts/send-pull-request -p ~/meta-intel/pull-10565 -t meta-intel@lists.yoctoproject.org
664
665   You need to follow the prompts as the script is interactive.
666
667   .. note::
668
669      For help on using these scripts, simply provide the ``-h``
670      argument as follows::
671
672              $ poky/scripts/create-pull-request -h
673              $ poky/scripts/send-pull-request -h
674
675Submitting Changes to Stable Release Branches
676=============================================
677
678The process for proposing changes to a Yocto Project stable branch differs
679from the steps described above. Changes to a stable branch must address
680identified bugs or CVEs and should be made carefully in order to avoid the
681risk of introducing new bugs or breaking backwards compatibility. Typically
682bug fixes must already be accepted into the master branch before they can be
683backported to a stable branch unless the bug in question does not affect the
684master branch or the fix on the master branch is unsuitable for backporting.
685
686The list of stable branches along with the status and maintainer for each
687branch can be obtained from the
688:yocto_wiki:`Releases wiki page </Releases>`.
689
690.. note::
691
692   Changes will not typically be accepted for branches which are marked as
693   End-Of-Life (EOL).
694
695With this in mind, the steps to submit a change for a stable branch are as
696follows:
697
698#. *Identify the bug or CVE to be fixed:* This information should be
699   collected so that it can be included in your submission.
700
701   See :ref:`dev-manual/vulnerabilities:checking for vulnerabilities`
702   for details about CVE tracking.
703
704#. *Check if the fix is already present in the master branch:* This will
705   result in the most straightforward path into the stable branch for the
706   fix.
707
708   #. *If the fix is present in the master branch --- submit a backport request
709      by email:* You should send an email to the relevant stable branch
710      maintainer and the mailing list with details of the bug or CVE to be
711      fixed, the commit hash on the master branch that fixes the issue and
712      the stable branches which you would like this fix to be backported to.
713
714   #. *If the fix is not present in the master branch --- submit the fix to the
715      master branch first:* This will ensure that the fix passes through the
716      project's usual patch review and test processes before being accepted.
717      It will also ensure that bugs are not left unresolved in the master
718      branch itself. Once the fix is accepted in the master branch a backport
719      request can be submitted as above.
720
721   #. *If the fix is unsuitable for the master branch --- submit a patch
722      directly for the stable branch:* This method should be considered as a
723      last resort. It is typically necessary when the master branch is using
724      a newer version of the software which includes an upstream fix for the
725      issue or when the issue has been fixed on the master branch in a way
726      that introduces backwards incompatible changes. In this case follow the
727      steps in ":ref:`contributor-guide/submit-changes:preparing changes for submission`"
728      and in the following sections but modify the subject header of your patch
729      email to include the name of the stable branch which you are
730      targetting. This can be done using the ``--subject-prefix`` argument to
731      ``git format-patch``, for example to submit a patch to the
732      "&DISTRO_NAME_NO_CAP_MINUS_ONE;" branch use::
733
734         git format-patch --subject-prefix='&DISTRO_NAME_NO_CAP_MINUS_ONE;][PATCH' ...
735
736Taking Patch Review into Account
737================================
738
739You may get feedback on your submitted patches from other community members
740or from the automated patchtest service. If issues are identified in your
741patches then it is usually necessary to address these before the patches are
742accepted into the project. In this case you should your commits according
743to the feedback and submit an updated version to the relevant mailing list.
744
745In any case, never fix reported issues by fixing them in new commits
746on the tip of your branch. Always come up with a new series of commits
747without the reported issues.
748
749.. note::
750
751   It is a good idea to send a copy to the reviewers who provided feedback
752   to the previous version of the patch. You can make sure this happens
753   by adding a ``CC`` tag to the commit description::
754
755      CC: William Shakespeare <bill@yoctoproject.org>
756
757A single patch can be amended using ``git commit --amend``, and multiple
758patches can be easily reworked and reordered through an interactive Git rebase::
759
760   git rebase -i <ref-branch>
761
762See `this tutorial <https://hackernoon.com/beginners-guide-to-interactive-rebasing-346a3f9c3a6d>`__
763for practical guidance about using Git interactive rebasing.
764
765You should also modify the ``[PATCH]`` tag in the email subject line when
766sending the revised patch to mark the new iteration as ``[PATCH v2]``,
767``[PATCH v3]``, etc as appropriate. This can be done by passing the ``-v``
768argument to ``git format-patch`` with a version number::
769
770   git format-patch -v2 <ref-branch>
771
772Lastly please ensure that you also test your revised changes. In particular
773please don't just edit the patch file written out by ``git format-patch`` and
774resend it.
775
776Tracking the Status of Patches
777==============================
778
779The Yocto Project uses a `Patchwork instance <https://patchwork.yoctoproject.org/>`__
780to track the status of patches submitted to the various mailing lists and to
781support automated patch testing. Each submitted patch is checked for common
782mistakes and deviations from the expected patch format and submitters are
783notified by ``patchtest`` if such mistakes are found. This process helps to
784reduce the burden of patch review on maintainers.
785
786.. note::
787
788   This system is imperfect and changes can sometimes get lost in the flow.
789   Asking about the status of a patch or change is reasonable if the change
790   has been idle for a while with no feedback.
791
792If your patches have not had any feedback in a few days, they may have already
793been merged. You can run ``git pull``  branch to check this. Note that many if
794not most layer maintainers do not send out acknowledgement emails when they
795accept patches. Alternatively, if there is no response or merge after a few days
796the patch may have been missed or the appropriate reviewers may not currently be
797around. It is then perfectly fine to reply to it yourself with a reminder asking
798for feedback.
799
800.. note::
801
802      Patch reviews for feature and recipe upgrade patches are likely be delayed
803      during a feature freeze because these types of patches aren't merged during
804      at that time --- you may have to wait until after the freeze is lifted.
805
806Maintainers also commonly use ``-next`` branches to test submissions prior to
807merging patches. Thus, you can get an idea of the status of a patch based on
808whether the patch has been merged into one of these branches. The commonly
809used testing branches for OpenEmbedded-Core are as follows:
810
811-  *openembedded-core "master-next" branch:* This branch is part of the
812   :oe_git:`openembedded-core </openembedded-core/>` repository and contains
813   proposed changes to the core metadata.
814
815-  *poky "master-next" branch:* This branch is part of the
816   :yocto_git:`poky </poky/>` repository and combines proposed
817   changes to BitBake, the core metadata and the poky distro.
818
819Similarly, stable branches maintained by the project may have corresponding
820``-next`` branches which collect proposed changes. For example,
821``&DISTRO_NAME_NO_CAP;-next`` and ``&DISTRO_NAME_NO_CAP_MINUS_ONE;-next``
822branches in both the "openembdedded-core" and "poky" repositories.
823
824Other layers may have similar testing branches but there is no formal
825requirement or standard for these so please check the documentation for the
826layers you are contributing to.
827
828