|  | <chapter id="patches"> | 
|  | <title>Submitting Patches</title> | 
|  |  | 
|  | <sect1 id="patch-format"> | 
|  | <title>Patch Format</title> | 
|  |  | 
|  | <para> | 
|  | Patches are submitted via email to the Wine patches mailing list, | 
|  | <email>wine-patches@winehq.org</email>. Your patch should include: | 
|  | </para> | 
|  |  | 
|  | <itemizedlist> | 
|  | <listitem> | 
|  | <para> | 
|  | A meaningful subject (very short description of patch) | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | A long (paragraph) description of what was wrong and what is now | 
|  | better. (recommended) | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | A change log entry (short description of what was changed). | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | The patch in <command>diff -u</command> format | 
|  | </para> | 
|  | </listitem> | 
|  | </itemizedlist> | 
|  |  | 
|  | <para> | 
|  |  | 
|  | </para> | 
|  |  | 
|  | <para> | 
|  | <command>cvs diff -u</command> works great for the common case | 
|  | where a file is edited.  However, if you add or remove a file | 
|  | <command>cvs diff</command> will not report that correctly so | 
|  | make sure you explicitly take care of this rare case. | 
|  | </para> | 
|  | <para> | 
|  | For additions simply include them by appending the | 
|  | <command>diff -u /dev/null /my/new/file</command> output of them | 
|  | to any <command>cvs diff -u</command> output you may have. | 
|  | Alternatively, use <command>diff -Nu olddir/ newdir/</command> | 
|  | in case of multiple new files to add. | 
|  | </para> | 
|  | <para> | 
|  | For removals, clearly list the files in the description of the patch. | 
|  | </para> | 
|  | <para> | 
|  | Since wine is constantly changing due to development it is strongly | 
|  | recommended that you use cvs for patches, if you cannot use cvs for | 
|  | some reason, you can submit patches against the latest tarball. | 
|  | To do this make a copy of the files that you will be modifying and | 
|  | <command>diff -u</command> against the old file. I.E. | 
|  | </para> | 
|  | <screen> | 
|  | diff -u file.old file.c > file.txt | 
|  | </screen> | 
|  | </sect1> | 
|  |  | 
|  | <sect1 id="Style-notes"> | 
|  | <title>Some notes about style</title> | 
|  |  | 
|  | <para> | 
|  | There are a few conventions that about coding style that have been | 
|  | adopted over the years of development. The rational for these | 
|  | <quote>rules</quote> is explained for each one. | 
|  | </para> | 
|  | <itemizedlist> | 
|  | <listitem> | 
|  | <para> | 
|  | No HTML mail, since patches should be in-lined and HTML turns the | 
|  | patch into garbage. Also it is considered bad etiquette as it | 
|  | uglifies the message, and is not viewable by many of the subscribers. | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | Only one change set per patch. Patches should address only one | 
|  | bug/problem at a time. If a lot of changes need to be made then it | 
|  | is preferred to break it into a series of patches. This makes it | 
|  | easier to find regressions. | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | Tabs are not forbidden but discouraged. A tab is defined as | 
|  | 8 characters and the usual amount of indentation is 4 | 
|  | characters. | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | C++ style comments are discouraged since some compilers choke on | 
|  | them. | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | Commenting out a block of code is usually done by enclosing it in | 
|  | <command>#if 0 ... #endif</command> Statements. For example. | 
|  | </para> | 
|  | <screen> | 
|  | /* note about reason for commenting block */ | 
|  | #if 0 | 
|  | code | 
|  | code /* comments */ | 
|  | code | 
|  | #endif | 
|  | </screen> | 
|  | <para> | 
|  | The reason for using this method is that it does not require that | 
|  | you edit comments that may be inside the block of code. | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | Patches should be in-lined (if you can configure your email client to | 
|  | not wrap lines), or attached as plain text attachments so they can | 
|  | be read inline. This may mean some more work for you. However it | 
|  | allows others to review your patch easily and decreases the chances | 
|  | of it being overlooked or forgotten. | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | Code is usually limited to 80 columns. This helps prevent mailers | 
|  | mangling patches by line wrap. Also it generally makes code easier | 
|  | to read. | 
|  | </para> | 
|  | </listitem> | 
|  | </itemizedlist> | 
|  | <sect2 id="Inline-Attachments-with-OE"> | 
|  | <title>Inline attachments with Outlook Express</title> | 
|  | <para> | 
|  | Outlook Express is notorious for mangling attachments. Giving the | 
|  | patch a <filename>.txt</filename> extension and attaching will solve | 
|  | the problem for most mailers including Outlook. Also, there is a way | 
|  | to enable Outlook Express send <filename>.diff</filename> | 
|  | attachments. | 
|  | </para> | 
|  | <para> | 
|  | You need following two things to make it work. | 
|  | </para> | 
|  | <orderedlist> | 
|  | <listitem> | 
|  | <para> | 
|  | Make sure that <filename>.diff</filename> files have \r\n line | 
|  | ends, because if OE detects that there is no \r\n line endings it | 
|  | switches to quoted-printable format attachments. | 
|  | </para> | 
|  | </listitem> | 
|  | <listitem> | 
|  | <para> | 
|  | Using regedit add key "Content Type" with value "text/plain" | 
|  | to the .diff extension under HKEY_CLASSES_ROOT (same as for .txt | 
|  | extension). This tells OE to use Content-Type: text/plain instead | 
|  | of application/octet-stream. | 
|  | </para> | 
|  | </listitem> | 
|  | </orderedlist> | 
|  | <para> | 
|  | Item #1 is important. After you hit "Send" button, go to "Outbox" | 
|  | and using "Properties" verify the message source to make sure that | 
|  | the mail has correct format. You might want to send several test | 
|  | emails to yourself too. | 
|  | </para> | 
|  | </sect2> | 
|  | <sect2 id="Alexandre-Bottom-Line"> | 
|  | <title>Alexandre's Bottom Line</title> | 
|  | <para> | 
|  | <quote>The basic rules are: no attachments, no mime crap, no | 
|  | line wrapping, a single patch per mail. Basically if I can't | 
|  | do <command>"cat raw_mail | patch -p0"</command> it's in the | 
|  | wrong format.</quote> | 
|  | </para> | 
|  | </sect2> | 
|  | </sect1> | 
|  |  | 
|  | <sect1 id="patch-quality"> | 
|  | <title>Quality Assurance</title> | 
|  |  | 
|  | <para> | 
|  | (Or, "How do I get Alexandre to apply my patch quickly so I | 
|  | can build on it and it will not go stale?") | 
|  | </para> | 
|  | <para> | 
|  | Make sure your patch applies to the current CVS head | 
|  | revisions.  If a bunch of patches are committed to CVS that may | 
|  | affect whether your patch will apply cleanly then verify that | 
|  | your patch does apply!   <command>cvs update</command> is your | 
|  | friend! | 
|  | </para> | 
|  | <para> | 
|  | Save yourself some embarrassment and run your patched code | 
|  | against more than just your current test example.  Experience | 
|  | will tell you how much effort to apply here. | 
|  | </para> | 
|  |  | 
|  | </sect1> | 
|  | </chapter> | 
|  |  | 
|  | <!-- Keep this comment at the end of the file | 
|  | Local variables: | 
|  | mode: sgml | 
|  | sgml-parent-document:("wine-devel.sgml" "set" "book" "part" "chapter" "") | 
|  | End: | 
|  | --> |