Mercurial > public > pelican-blog
comparison 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 |
comparison
equal
deleted
inserted
replaced
3:c3115da3ff73 | 4:7ce6393e6d30 |
---|---|
1 Contributing to open source - a success story and advice for newbies | |
2 #################################################################### | |
3 | |
4 :date: 2011-06-23 21:45 | |
5 :tags: Subversion, OpenSource | |
6 :slug: contributing-to-open-source-a-success-story-and-advice-for-newbies | |
7 :author: Brian Neal | |
8 | |
9 Recently, my team at work found a `bug in Subversion`_, I submitted a patch, and it | |
10 was accepted! This was very exciting for me so I thought I would share this | |
11 story in the hopes of inspiring others to contribute to open source projects. | |
12 It may not be as hard as you might think! | |
13 | |
14 The Bug | |
15 ======= | |
16 | |
17 We use Subversion_ at work for revision control. My colleague and I were trying | |
18 to merge a branch back to trunk when we ran into some strange behavior. We make | |
19 use of Subversion properties, which allow you to attach arbitrary metadata to | |
20 files and directories. Our project has to deliver our source code and | |
21 documentation to the customer in a required directory format (can you guess who | |
22 our customer is?). However not all files need to be sent to the customer. To | |
23 solve this problem we use a simple "yes/no" delivery property on each file to | |
24 control whether it is delivered or not. Before making a delivery, a script is | |
25 run that prunes out the files that have the delivery flag set to "no". | |
26 | |
27 When our merge was completed, many files were marked with having merge conflicts | |
28 on the delivery property. Looking through the logs it was discovered that after | |
29 we had made our branch, someone had changed the delivery property on some files | |
30 to "yes" on the trunk. Someone else had also changed the delivery property | |
31 independently to "yes" on the branch. When we attempted to merge the branch back | |
32 to trunk, we were getting merge conflicts, even though we were trying to change | |
33 the delivery property value to "yes" on both the trunk and branch. Why was this | |
34 a conflict? This didn't seem quite right. | |
35 | |
36 I signed up for the Subversion user's mailing list and made a short post | |
37 summarizing our issue. I later learned that it is proper etiquette to attach a | |
38 bash script that can demonstrate the problem. Despite this, a Subversion developer | |
39 took interest in my post and created a test script in an attempt to reproduce our | |
40 issue. At first it looked like he could not reproduce the problem. However another | |
41 helpful user pointed out a bug in his script. Once this was fixed, the developer | |
42 declared our problem a genuine bug and created a ticket for it in the issue tracker. | |
43 | |
44 The Patch | |
45 ========= | |
46 | |
47 Impressed by all of this, I thanked him for his efforts and tentatively asked if | |
48 I could help. The developer told me which file and function he thought the | |
49 problem might be in. I downloaded the Subversion source and began looking at the | |
50 code. I was fairly impressed with the code quality, so I decided I would try to | |
51 create a patch for the bug over the weekend. We really wanted that bug fixed, | |
52 and I was genuinely curious to see if I would be able to figure something out. | |
53 It would be an interesting challenge and a test of my novice open source skills. | |
54 | |
55 When the weekend came I began a more thorough examination of the Subversion | |
56 website. The Subversion team has done a great job in providing documentation on | |
57 their development process. This includes a contributing guide and patch | |
58 submittal process. I also discovered they had recently added a makefile that | |
59 downloaded the Subversion source code and the source for all of Subversion's | |
60 dependencies. The makefile then builds everything with debug turned on. Wow! It | |
61 took me a few tries to get this working, but the problems were because I did not | |
62 have all the development tools installed on my Ubuntu box. Once this was | |
63 sorted, everything went smoothly, and in a matter of minutes I had a Subversion | |
64 executable I could run under the gdb debugger. Nice! | |
65 | |
66 I studied the code for about an hour, peeking and poking at a few things in the | |
67 debugger. I used the script the developer wrote to recreate the problem. I | |
68 wasn't quite sure what I was doing, as I was brand new to this code base. But | |
69 the code was clearly written and commented well. My goal was to get a patch that | |
70 was in the 80-100% complete range. I wanted to do enough work that a core | |
71 developer would be able to see what I was doing and either commit it outright or | |
72 easily fill in the parts that I missed. After a while I thought I had a solution | |
73 and generated a patch. I sent it to the Subversion developer's mailing list as | |
74 per the contributing guide. | |
75 | |
76 The Wait | |
77 ======== | |
78 | |
79 Next I began probably the worst part for a contributor. I had to wait and see if | |
80 I got any feedback. On some open source projects a patch may languish for months. | |
81 It all depends on the number of developers and how busy they are. My chances | |
82 didn't look good as the developers were in the initial stages of getting a | |
83 beta version of 1.7 out the door. It was also not clear to me who "owned" the | |
84 issue tracker. On some projects, the issue tracker is wide open to the | |
85 community. Was I supposed to update the ticket? I wasn't quite sure, and the | |
86 contributing guide was silent on this issue. I eventually concluded I was not; | |
87 it looked like only committers were using the tracker. Patches were being | |
88 discussed on the mailing list instead of in the tracker. This is a bit different | |
89 than some projects I am familiar with. | |
90 | |
91 I didn't have to wait long. After a few days, the original developer who | |
92 confirmed my bug took interest again. He looked at my patch, and thought I had | |
93 missed something. He suggested a change and asked for my opinion. I looked at | |
94 the code again; it seemed like a good change and I told him I agreed. I also | |
95 warned him I was brand new to the code, and to take my opinion with a grain a | |
96 salt. After running my change against the tests, he then committed my patch! | |
97 One small victory for open source! | |
98 | |
99 Final Thoughts | |
100 ============== | |
101 | |
102 So what went right here? I have to hand it to the Subversion team. They have | |
103 been in business a long time, and they have excellent documentation for people | |
104 who want to contribute. The makefile they created that sets up a complete | |
105 development environment most definitely tipped the scale for me and enabled me | |
106 to create my patch. Without that I'm not sure I would have had the time or | |
107 patience to get all that unfamiliar source code built. The Subversion team has | |
108 really worked hard at lowering the barrier for new contributors. | |
109 | |
110 My advice to people who want to contribute to open source but aren't quite sure | |
111 how to go about doing it: | |
112 | |
113 - Spend some time reading the documentation. This includes any FAQ's and | |
114 contributor guides (if any). | |
115 - Monitor the user and developer mailing lists to get a feel for how the | |
116 community operates. Each project has different customs and traditions. | |
117 - You may also wish to hang out on the project's IRC channel for the same | |
118 reason. | |
119 - When writing on the mailing lists, be extremely concise and polite. | |
120 You don't want to waste anyone's time, and you don't want to | |
121 be seen as someone who thinks they are entitled to a fix. Just remember you | |
122 are the new guy. You can't just barge in and make demands. | |
123 - Ask how you can help. Nothing makes a developer happier when someone asks how | |
124 they can help. Remember, most of the people in the community are volunteers. | |
125 - Open source can sometimes be "noisy". There will be people who | |
126 won't quite understand your issue and may hurriedly suggest an incorrect solution or give | |
127 incomplete advice. Study their responses and be polite. You may also wish to resist the temptation | |
128 to reply right away. This is especially hard when you are new and you don't | |
129 know who the "real" developers are. However you should assume everyone is trying to | |
130 help. | |
131 - Finally, be patient. Again, most folks are volunteers. They have real jobs, | |
132 families and lives. The project may also be preoccupied with other tasks, like | |
133 getting a beta out the door. Now may not be a good time for a brand new | |
134 feature, or your bug may not be considered a show stopper to the majority of | |
135 the community. | |
136 | |
137 A big thank-you to Stefan Sperling from the Subversion team who shepherded my | |
138 bug report and patch through their process. | |
139 | |
140 I hope this story encourages you to contribute to open source software! | |
141 | |
142 .. _bug in Subversion: http://subversion.tigris.org/issues/show_bug.cgi?id=3919 | |
143 .. _Subversion: http://subversion.apache.org/ |