Short Version:

 - Make small logical changes.
 - Provide a meaningful commit message.
 - Check for coding errors with pylint
 - Make sure all code is under the Apache License, 2.0.
 - Publish your changes for review:

   git push https://gerrit-review.googlesource.com/git-repo HEAD:refs/for/master


Long Version:

I wanted a file describing how to submit patches for repo,
so I started with the one found in the core Git distribution
(Documentation/SubmittingPatches), which itself was based on the
patch submission guidelines for the Linux kernel.

However there are some differences, so please review and familiarize
yourself with the following relevant bits:


(1) Make separate commits for logically separate changes.

Unless your patch is really trivial, you should not be sending
out a patch that was generated between your working tree and your
commit head.  Instead, always make a commit with complete commit
message and generate a series of patches from your repository.
It is a good discipline.

Describe the technical detail of the change(s).

If your description starts to get too long, that's a sign that you
probably need to split up your commit to finer grained pieces.


(2) Check for coding errors with pylint

Run pylint on changed modules using the provided configuration:

  pylint --rcfile=.pylintrc file.py


(3) Check the license

repo is licensed under the Apache License, 2.0.

Because of this licensing model *every* file within the project
*must* list the license that covers it in the header of the file.
Any new contributions to an existing file *must* be submitted under
the current license of that file.  Any new files *must* clearly
indicate which license they are provided under in the file header.

Please verify that you are legally allowed and willing to submit your
changes under the license covering each file *prior* to submitting
your patch.  It is virtually impossible to remove a patch once it
has been applied and pushed out.


(4) Sending your patches.

Do not email your patches to anyone.

Instead, login to the Gerrit Code Review tool at:

  https://gerrit-review.googlesource.com/

Ensure you have completed one of the necessary contributor
agreements, providing documentation to the project maintainers that
they have right to redistribute your work under the Apache License:

  https://gerrit-review.googlesource.com/#/settings/agreements

Ensure you have obtained an HTTP password to authenticate:

  https://gerrit-review.googlesource.com/new-password

Push your patches over HTTPS to the review server, possibly through
a remembered remote to make this easier in the future:

   git config remote.review.url https://gerrit-review.googlesource.com/git-repo
   git config remote.review.push HEAD:refs/for/master

   git push review

You will be automatically emailed a copy of your commits, and any
comments made by the project maintainers.
