Mercurial > public > pelican-blog
diff content/Coding/007-subversion-contrib.rst @ 4:7ce6393e6d30
Adding converted blog posts from old blog.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Thu, 30 Jan 2014 21:45:03 -0600 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/content/Coding/007-subversion-contrib.rst Thu Jan 30 21:45:03 2014 -0600 @@ -0,0 +1,143 @@ +Contributing to open source - a success story and advice for newbies +#################################################################### + +:date: 2011-06-23 21:45 +:tags: Subversion, OpenSource +:slug: contributing-to-open-source-a-success-story-and-advice-for-newbies +:author: Brian Neal + +Recently, my team at work found a `bug in Subversion`_, I submitted a patch, and it +was accepted! This was very exciting for me so I thought I would share this +story in the hopes of inspiring others to contribute to open source projects. +It may not be as hard as you might think! + +The Bug +======= + +We use Subversion_ at work for revision control. My colleague and I were trying +to merge a branch back to trunk when we ran into some strange behavior. We make +use of Subversion properties, which allow you to attach arbitrary metadata to +files and directories. Our project has to deliver our source code and +documentation to the customer in a required directory format (can you guess who +our customer is?). However not all files need to be sent to the customer. To +solve this problem we use a simple "yes/no" delivery property on each file to +control whether it is delivered or not. Before making a delivery, a script is +run that prunes out the files that have the delivery flag set to "no". + +When our merge was completed, many files were marked with having merge conflicts +on the delivery property. Looking through the logs it was discovered that after +we had made our branch, someone had changed the delivery property on some files +to "yes" on the trunk. Someone else had also changed the delivery property +independently to "yes" on the branch. When we attempted to merge the branch back +to trunk, we were getting merge conflicts, even though we were trying to change +the delivery property value to "yes" on both the trunk and branch. Why was this +a conflict? This didn't seem quite right. + +I signed up for the Subversion user's mailing list and made a short post +summarizing our issue. I later learned that it is proper etiquette to attach a +bash script that can demonstrate the problem. Despite this, a Subversion developer +took interest in my post and created a test script in an attempt to reproduce our +issue. At first it looked like he could not reproduce the problem. However another +helpful user pointed out a bug in his script. Once this was fixed, the developer +declared our problem a genuine bug and created a ticket for it in the issue tracker. + +The Patch +========= + +Impressed by all of this, I thanked him for his efforts and tentatively asked if +I could help. The developer told me which file and function he thought the +problem might be in. I downloaded the Subversion source and began looking at the +code. I was fairly impressed with the code quality, so I decided I would try to +create a patch for the bug over the weekend. We really wanted that bug fixed, +and I was genuinely curious to see if I would be able to figure something out. +It would be an interesting challenge and a test of my novice open source skills. + +When the weekend came I began a more thorough examination of the Subversion +website. The Subversion team has done a great job in providing documentation on +their development process. This includes a contributing guide and patch +submittal process. I also discovered they had recently added a makefile that +downloaded the Subversion source code and the source for all of Subversion's +dependencies. The makefile then builds everything with debug turned on. Wow! It +took me a few tries to get this working, but the problems were because I did not +have all the development tools installed on my Ubuntu box. Once this was +sorted, everything went smoothly, and in a matter of minutes I had a Subversion +executable I could run under the gdb debugger. Nice! + +I studied the code for about an hour, peeking and poking at a few things in the +debugger. I used the script the developer wrote to recreate the problem. I +wasn't quite sure what I was doing, as I was brand new to this code base. But +the code was clearly written and commented well. My goal was to get a patch that +was in the 80-100% complete range. I wanted to do enough work that a core +developer would be able to see what I was doing and either commit it outright or +easily fill in the parts that I missed. After a while I thought I had a solution +and generated a patch. I sent it to the Subversion developer's mailing list as +per the contributing guide. + +The Wait +======== + +Next I began probably the worst part for a contributor. I had to wait and see if +I got any feedback. On some open source projects a patch may languish for months. +It all depends on the number of developers and how busy they are. My chances +didn't look good as the developers were in the initial stages of getting a +beta version of 1.7 out the door. It was also not clear to me who "owned" the +issue tracker. On some projects, the issue tracker is wide open to the +community. Was I supposed to update the ticket? I wasn't quite sure, and the +contributing guide was silent on this issue. I eventually concluded I was not; +it looked like only committers were using the tracker. Patches were being +discussed on the mailing list instead of in the tracker. This is a bit different +than some projects I am familiar with. + +I didn't have to wait long. After a few days, the original developer who +confirmed my bug took interest again. He looked at my patch, and thought I had +missed something. He suggested a change and asked for my opinion. I looked at +the code again; it seemed like a good change and I told him I agreed. I also +warned him I was brand new to the code, and to take my opinion with a grain a +salt. After running my change against the tests, he then committed my patch! +One small victory for open source! + +Final Thoughts +============== + +So what went right here? I have to hand it to the Subversion team. They have +been in business a long time, and they have excellent documentation for people +who want to contribute. The makefile they created that sets up a complete +development environment most definitely tipped the scale for me and enabled me +to create my patch. Without that I'm not sure I would have had the time or +patience to get all that unfamiliar source code built. The Subversion team has +really worked hard at lowering the barrier for new contributors. + +My advice to people who want to contribute to open source but aren't quite sure +how to go about doing it: + +- Spend some time reading the documentation. This includes any FAQ's and + contributor guides (if any). +- Monitor the user and developer mailing lists to get a feel for how the + community operates. Each project has different customs and traditions. +- You may also wish to hang out on the project's IRC channel for the same + reason. +- When writing on the mailing lists, be extremely concise and polite. + You don't want to waste anyone's time, and you don't want to + be seen as someone who thinks they are entitled to a fix. Just remember you + are the new guy. You can't just barge in and make demands. +- Ask how you can help. Nothing makes a developer happier when someone asks how + they can help. Remember, most of the people in the community are volunteers. +- Open source can sometimes be "noisy". There will be people who + won't quite understand your issue and may hurriedly suggest an incorrect solution or give + incomplete advice. Study their responses and be polite. You may also wish to resist the temptation + to reply right away. This is especially hard when you are new and you don't + know who the "real" developers are. However you should assume everyone is trying to + help. +- Finally, be patient. Again, most folks are volunteers. They have real jobs, + families and lives. The project may also be preoccupied with other tasks, like + getting a beta out the door. Now may not be a good time for a brand new + feature, or your bug may not be considered a show stopper to the majority of + the community. + +A big thank-you to Stefan Sperling from the Subversion team who shepherded my +bug report and patch through their process. + +I hope this story encourages you to contribute to open source software! + +.. _bug in Subversion: http://subversion.tigris.org/issues/show_bug.cgi?id=3919 +.. _Subversion: http://subversion.apache.org/