I want to learn to patch

Chuck Robey chuckr at telenix.org
Sat Jun 6 01:04:52 BST 2009

James Richard Tyrer wrote:
> First I admire your enthusiasm.  Do not take offense at my rather direct 
> engineer's analysis.
> Dotan Cohen wrote:
>> Here is a very simple bug, that I want to learn to submit patches with:
>> https://bugs.kde.org/show_bug.cgi?id=188383
> I have to warn your that there have been major arguments about this 
> issue and I have rather strong opinions about it.  We won't worry about 
> my opinions but expect to run into some resistance.
>> I have googled KDE Development and found lots of tutorials from KDE 2
>> and KDE 3, and lots of tutorials about setting up what seems to be a
>> very complex and error-prone development environment. However, as one
>> can simply view the code online [1] I would like to work this way. I
>> looked around the websvn tree for the file(s) that contain the string
>> "Other Tabs" from the bug in question, but I could not find them. So I
>> have these two questions:
>> 1) How does one go about finding the correct file(s) to modify?
> This is probably part of the Konqueror code:
> 	KDEBase:Apps:Konqueror
> in SVN.  You can find the relevant files using "Find File" looking for 
> "*.*c*" with a string in: "Context::Containing Text" or use Grep 
> (command line) in  Konsole.
>> 2) How does one make a diff file?
> First, you need to checkout and build the KDEBase module from SVN:
> svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kdebase
> Well actually, you need to install subversion, the GNU C/C++ compiler, 
> and CMake.  I would suggest reading the relevant (user/client) parts of:
> 	http://svnbook.red-bean.com/
> Now, having found what needs to be changed:
> 1.  Change it.
> 2.  Compile and install.
> 3.  Test to see that it works like you want (if not go back to #1)
> 4.  Execute: "svn status" to see that all is well
> 5.  Execute: "svn up" to see that there is no conflict
> 6.  Execute: "svn diff" to see your patch.
> 7.  If you want a patch file, Execute: "svn diff > file.diff
> 8.  Post your patch to the "kde-devel" (subscribe to it) mailing list
>      with the Subject starting with "[PATCH]" or attach the diff file to
>      the bug and label the attachment as a Patch.
> So, that is a basic outline.  I expect that you might have further 
> questions.

Nothing you say here is wrong, but I thought it would make sense to *some* folks
to describe one part a bit more closely (with the idea that this is gonna be
bait for would-be coders via Google).  I'm not criticizing here, please note that.

First, there are a group of different forms that diff can be coaxed into
producing.  They all do actually work, but some forms are easier for humans to
read, and more obvious to catch errors in, than others forms, so a convention
has been formed for a lot of projects (certainly, this includes FreeBSD and KDE)
to require that all diff runs to use the "unified" form.  Among other
parameters, just include -u to diff (as opposed to -c for context type, or even
the default kind which is the "edit" form.  Both the "edit" and "context" diff
outputs will get you yelled at (even though they work), and if you run them on
purpose (just so you can view the outputs yourself) I think the reason that
folks want you to use the unified diff will be obvious to you (as a human,

The 2nd point which I think might be confusing is the order that you give the
files to diff  on the command line in.  One is called the original, the other is
our changed data.  If you're not using a system like KDE, or FreeBSD, or
anything that wraps your diffs for you so you are more likely to get it correct,
 then you need to worry a bit more about file order, because you're going to be
giving the diff command directly.   First, you want to have a copy of the form
of the file you're going to be changing, before any mods go into it.  My habit
is to copy the original of any file I'm intending to modify to a file of the
same name, but with a suffix of ".orig"  Well, the the point I'm going to make
is, that the order that you give the files to diff is very important.  In KDE,
where svn is handling your diff calls for you, you can ignore this point, but if
other systems, the trick to remember is, to always give the file original form
to the diff first, and after that, the modified file.  You mustn't get the order
incorrect, because if you do, "patch" is going to ask you if your patch might be
reversed.  So, if you get that response from "patch", remember you always give
the original file first, THEN the modified file.  The output is what patch has
been created to read, directly.
This message is from the kde mailing list.
Account management:  https://mail.kde.org/mailman/listinfo/kde.
Archives: http://lists.kde.org/.
More info: http://www.kde.org/faq.html.

More information about the kde mailing list