Submitting patches or diff's to the FreeRADIUS project ====================================================== For a person or company wishing to submit a change to the FreeRADIUS project the process can sometimes be daunting if you're not familiar with "the system." This text is a collection of suggestions which can greatly increase the chances of your change being accepted. Note: Only trivial patches will be accepted via email. Large patches, or patches that modify a number of files MUST be submitted as a pull-request via GitHub. Hints and tips -------------- 1. Describe your changes ~~~~~~~~~~~~~~~~~~~~~~~~ Describe the technical detail of the change(s) your patch or commit includes. Be as specific as possible. The WORST descriptions possible include things like "update file X", "bug fix for file X", or "this patch includes updates for subsystem X. Please apply." If your description starts to get long, that's a sign that you probably need to split up your commit. See #3, next. 2. Separate your changes ~~~~~~~~~~~~~~~~~~~~~~~~ Separate each logical change into its own commit. For example, if your changes include both bug fixes and performance enhancements for a single module, separate those changes into two or more patches. On the other hand, if you make a single change to numerous files, group those changes into a single commit. Thus a single LOGICAL change is contained within a single commit. If one commit depends on another commit in order for a change to be complete, that is OK. Simply note "this commit depends on commit X" in the extended commit description. If your commit includes significant whitespace changes these should also be broken out into another, separate, commit. Submitting patches via GitHub ----------------------------- See the following links for more details about submitting via github: - https://help.github.com/articles/fork-a-repo - http://wiki.freeradius.org/contributing/GitHub Submitting patches via email ---------------------------- 1. "diff -u" ~~~~~~~~~~~~ Use ``diff -u`` or ``diff -urN`` to create patches. All changes to the source occur in the form of patches, as generated by diff(1). When creating your patch, make sure to create it in "unified diff" format, as supplied by the '-u' argument to diff(1). Patches should be based in the root source directory, not in any lower subdirectory. To create a patch for a single file, it is often sufficient to do:: SRCTREE=/home/user/src/freeradiusd/ MYFILE=src/modules/rlm_foo/foo.c cd $SRCTREE cp $MYFILE $MYFILE.orig vi $MYFILE # make your change diff -u $MYFILE.orig $MYFILE > /tmp/patch To create a patch for multiple files, you should unpack a "vanilla", or unmodified source tree, and generate a diff against your own source tree. For example:: MYSRC=/home/user/src/freeradiusd-feature/ gunzip freeradiusd-version.tar.gz tar xvf freeradiusd-version.tar diff -urN freeradiusd-version $MYSRC > ~/feature-version.patch 2. Select e-mail destination ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If you are on the developers mailing list, send the patch there. freeradius-devel@lists.freeradius.org Otherwise, please use GitHub. 3. No MIME, no links, no compression, no attachments. Just plain text ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The developers need to be able to read and comment on the changes you are submitting. It is important for a developer to be able to "quote" your changes, using standard e-mail tools, so that they may comment on specific portions of your code. For this reason, all patches should be submitting e-mail "inline". Do not attach the patch as a MIME attachment, compressed or not. Many popular e-mail applications will not always transmit a MIME attachment as plain text, making it impossible to comment on your code. A MIME attachment also takes a bit more time to process, decreasing the likelihood of your MIME-attached change being accepted. Compressed patches are generally rejected outright. If the developer has to do additional work to read your patch, the odds are that it will be ignored completely. 4. E-mail size ~~~~~~~~~~~~~~ Large changes are not appropriate for mailing lists, and some maintainers. If your patch, exceeds 5Kb in size, you must submit the patch via GitHub instead. 5. Name the version of the server ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ It is important to note, either in the subject line or in the patch description, the server version to which this patch applies.