HOW-TO:Submit a patch
XBMC is a non-profit open source hobby project that is developed only by volunteers in their spare-time without any monetary gain. The team of developers working on XBMC encurage anyone submit your own source code patches for bug-fixes, new features/functions, improvements to existing ones. All and any help/additions/contributions to the source code are appriciated, and please note that even though we will do our best to look at and give feedback on your code/patch as soon as possible please understand trhat there are no garantees that your patch will be accepted and implemented into XBMC. Please be patient (especially during public holiday periods). Please understand that clean and well documented code will most likely be looked at and implemented sooner than messy and undocumented code.
- Note! We know our rules place a burden on you the submitter, but rest assured that maintaining a big and complex software project is even harder, so please accept our rules. We cannot afford to spend too much of our time fixing buggy, broken or outdated patches. The closer you follow our rules the higher is the probability that your patch will be included.
1 Submitting a source code patch
If it is under 255KB in size then please submit it on our XBMC Patch-Tracker (you may zip and/or split it if needed), otherwise please upload it somewhere on the internet and port the URL. Then to get some attention please post a new topic-thread in the development-section of our community-forums telling everyone about the patch and its functions/features, this also allows for a more open discussion about possible improvements/enhancements or additions and bugs/fixes.
2 Minimum requirements
We currently do not have any other minimum requirements other than the code being under LGPL or GPL license and that all/any comments and documentation should be in correct and in English. Clean and well documented (doxygen) code are also more appreciated than 'messy' and undocumented code.
3 Code documentation
Though not a standard in the XBMC source code tree nor a requirement please try to use doxygen to document your code, and if possible please also add a small readme.txt to the the patch when submitting it, telling people what functions/features it serves and how to apply it.
4 Code guide-lines and formatting conventions
This is still under discussion, so for now please follow or add to the discussion here. Of course, modular designs (like dynamic or static libraries) are preferred.
All code should strive to be platform agnostic - XBMC is a multi-platform software, thus any single platform specific features should be discussed with other team members before implemented. Major features should be developed in a separate branch or committed in small increments so that other members have the opportunity to review the code and comment on it during development.
Please also try try to avoid code duplications as the Xbox hardware-platform which (we still try to stay backwards compatible with whenever possible) is quite resource restrictive.
5 Patch format
Please do not send complete files. These need to be diffed by hand to see the changes, which makes reviews harder and less likely to occur. Besides as soon as one of the files changes, your version becomes harder to apply, thus reducing its chances of being accepted. Please follow these simple rules when making patch for XBMC.
- 1. Always make patches for Subversion HEAD. We do not accept patches for releases or outdated Subversion revisions.
- 2. Make unified diff created using e.g. svn diff against head ('svn diff' or 'diff -Naur'). Unified diffs can be applied easily with 'patch'. This is much harder with other diff types. Besides, unified diffs are more readable and thus easier to review. Also, if patch is general in nature, the the diff should preferably be against the trunk (and not a branch).
- NOTE! Please make each patch per feature, (not one patch per source file with multiple features in it).
- 3. Please create the diff from the root of the XBMC SVN source tree, this makes the diff easier to apply as it saves the step of searching for and changing to the correct directory.
- 4. Test the functionality of your patch. We'll *refuse* it if it breaks something, even if it extends other features!
- 5. Read your patch. We may *refuse* it if it changes indentation of the code or if it does tab/space conversion or other cosmetic changes!
- TIP! If you already wrote some code and did cosmetic changes, you can use 'diff -uwbBE' to help you remove them. Do not forget to check the patch to make sure diff did not ignore some important change and remove any remaining cosmetics! To use these options directly with svn, use this command: svn diff --diff-cmd diff -x -uwbBE
- 6. Comment parts that really need it (tricky side-effects etc). Always document string operations! Comment on what you are doing and why it is safe. This makes it easy to review and change your code if needed. Commenting trivial code not required. Comments must be English!
- 7. If you implement new features, add, change, or modify the behavior of existing features, please do not forget to also update the wiki documentation. The wiki documentation maintainers will assist you in doing this, (start by applying for "ninja" status which means write access to our wiki).
- 8. If you make independent changes, try to submit them as separate patches in separate patch-tracker item to our XBMC patch-tracker. Likewise, if your patch is very big, try splitting it into several self-contained pieces. Each part can then be reviewed and committed separately. Logical units should stay together, though, i.e. do not send a patch for every file or directory you change.
- 9. Do not upload the patch to a web or FTP site unless it is absolotly no way around it, intsead upload it directly to our XBMC patch-tracker. The fewer steps it takes us to get at the patch the higher the likelihood for it to get reviewed and applied. If your patch is so big you cannot send it by mail, try splitting it into smaller pieces.
- 10. Give us a few days to react. We try to review patches as fast as possible, but unfortunately we are constantly overloaded with work, be it XBMC-related or from our day to day lives. If your patch seems to be ignored, post a reminder asking for opinions as a reply to the original patch and mention that you got ignored. We are interested in your work and will eventually either accept it or reject it with an explanation of what we disliked about your patch. We will often ask you to make changes to your patch to make it acceptable. Implement them if you want to see your patch applied and send the update to the mailing list.
- 11. Do not immediately ask for Subversion write access. If you have contributed one or more nice, acceptable patches and they need maintaining or you want to be an XBMC developer, you'll get Subversion write access.
- 12. If you send a modified or updated version of your patch, resend the complete patch. It is very time-consuming and error-prone to piece together patches that are distributed over several mails. Please always resend patches as replies to the original mail to keep the thread with the discussion together.