2 About Subversion write access:
3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5 Before everything else, you should know how to use Subversion properly.
6 Luckily Subversion comes with excellent documentation.
10 shows you the available subcommands,
14 shows information about the subcommand <command>.
16 The most comprehensive manual is the book "Version Control with Subversion"
17 by Ben Collins-Sussman, Brian W. Fitzpatrick and C. Michael Pilato. It can
22 For more information about the Subversion project, visit
24 http://subversion.tigris.org/
26 Consult these resources whenever you have problems, they are quite exhaustive.
28 What follows now is a basic introduction to Subversion and some MPlayer-specific
29 guidelines. Read it at least once, if you are granted commit privileges to the
30 MPlayer project you are expected to be familiar with these rules.
39 The MPlayer project server runs Subversion 1.5. For optimal compatibility
40 you should use version 1.5 or later.
43 1. Checking out the source tree:
45 svn checkout svn://svn.mplayerhq.hu/mplayer/trunk/ <target>
47 This will put the MPlayer sources into the directory <target>.
50 2. Updating the source tree to the latest revision:
54 pulls in the latest changes from the repository to your working directory.
57 3. Adding/removing files/directories:
59 svn add <filename/dirname>
60 svn delete <filename/dirname>
62 Subversion needs to get notified of all changes you make to your working
66 4. Showing modifications:
68 svn diff <filename(s)>
70 will show all local modifications in your working directory as unified diff.
73 5. Inspecting the changelog:
77 You may also find viewvc, a web frontend for Subversion, helpful. It's often
78 more comfortable than using 'svn log' and 'svn diff'. Find it here:
79 http://svn.mplayerhq.hu/mplayer/trunk/
82 6. Checking source tree status:
86 detects all the changes you made and lists what actions will be taken in case
87 of a commit (additions, modifications, deletions, etc.).
94 Run 'svn update' before committing to make sure there were no changes to the
95 files you worked on in the meantime. Afterwards look at the output of
97 svn diff <filename(s)>
99 to doublecheck your changes before committing to avoid trouble later on. All
100 experienced developers do this on each and every commit, no matter how small.
101 Every one of them has been saved from looking like a fool by this many times.
102 It's very easy for stray debug output or cosmetic modifications to slip in,
103 please avoid problems through this extra level of scrutiny.
105 For cosmetics-only commits you should get (almost) empty output from
107 svn diff --diff-cmd diff -x '-duwbBE' <filename(s)>
109 Also check the output of
113 to make sure you did not forget to 'svn add' some files (they will be marked
116 Once you have made sure everything is fine
118 svn commit <filename(s)>
120 propagates your stuff to the repository. If you have made several independent
121 changes, commit them separately, not at the same time.
123 When prompted for a password, type the password you got assigned by the
124 project admins. By default, Subversion caches all authentication tokens.
125 This behavior can be disabled by setting both 'store-passwords' and
126 'store-auth-creds' to "no" in ~/.subversion/config. You might need to remove
127 previous cache files, which are located in ~/.subversion/auth, by hand.
129 You will be prompted for a log message in an editor, which is either specified
130 by --editor-cmd on the command line, set in your personal configuration file
131 (~/.subversion/config) or set by one of the following environment variables:
132 SVN_EDITOR, VISUAL or EDITOR.
134 Log messages should be concise but descriptive. Explain why you made a change,
135 what you did will be obvious from the changes themselves most of the time.
136 Saying just "bug fix" or "10l" is bad. Remember that people of varying skill
137 levels look at and educate themselves while reading through your code. Don't
138 include filenames in log messages, Subversion provides that information.
141 8. Renaming/moving/copying files or contents of files:
143 svn move/copy <source> <destination>
144 svn commit <source> <destination>
146 Do not move, rename or copy files of which you are not the maintainer without
147 discussing it on the mplayer-dev-eng mailing list first!
149 Never copy or move a file by using 'svn delete' and 'svn add'. Always use
150 'svn move' or 'svn copy' instead in order to preserve history and minimize
153 To split a file, use 'svn copy' and remove the unneeded lines from each file.
155 Don't do a lot of cut'n'paste from one file to another without a very good
156 reason and discuss it on the mplayer-dev-eng mailing list first. It will make
157 those changes hard to trace.
159 Such actions are useless and treated as cosmetics in 99% of cases,
160 so try to avoid them.
163 9. Reverting broken commits
165 There are 2 ways to reverse a change, they differ significantly in what they
166 do to the repository.
167 The recommit old method:
170 This simply changes the file(s) back to their old version locally and then
171 the change is committed as if it were a new change.
174 svn cp -r<good revision> svn://svn.mplayerhq.hu/mplayer/trunk/[<path>/]<file> <file>
176 This simply removes the file and then copies the last good version with
177 its history over it. This method can only be used to revert the n last
178 commits but not to revert a bad commit in the middle of its history.
179 Neither method will change the history, checking out an old version will
180 always return exactly that revision with all its bugs and features. The
181 difference is that with the svn copy method the broken commit will not be
182 part of the directly visible history of the revisions after the reversal
183 So if the change was completely broken like reindenting a file against the
184 maintainers decision, or a change which mixed functional and cosmetic
185 changes then it is better if it is not part of the visible history as it
186 would make it hard to read, review and would also break svn annotate.
187 For the example of a change which mixed functional and cosmetic parts they
188 should of course be committed again after the reversal but separately, so one
189 change with the functional stuff and one with the cosmetics.
190 OTOH if the change which you want to reverse was simply buggy but not
191 totally broken then it should be reversed with svn merge as otherwise
192 the fact that the change was bad would be hidden.
193 One method to decide which reversal method is best is to ask yourself
194 if there is any value in seeing the whole bad change and its removal
195 in SVN vs. just seeing a comment that says what has been reversed while
196 the actual change does not clutter the immediately visible history and
198 If you are even just slightly uncertain how to revert something then ask on
199 the mplayer-dev-eng mailing list.
202 10. Reverting local changes
204 svn revert <filename(s)>
206 In case you made a lot of local changes to a file and want to start over
207 with a fresh checkout of that file, you can use 'svn revert <filename(s)>'.
208 NOTE: This has nothing to do with reverting changes on the Subversion
209 server! It only reverts changes that were not committed yet. If you need
210 to revert a broken commit, see 9.
213 11. Changing commit messages
215 svn propedit svn:log --revprop -r <revision>
217 If your commit message is too short or not explanatory enough, you can edit
218 it afterwards with 'svn propedit'.
221 Contact the project admins <root at mplayerhq dot hu> if you have technical
222 problems with the Subversion server.
229 1. You must not commit code which breaks MPlayer! (Meaning unfinished but
230 enabled code which breaks compilation or compiles but does not work.)
231 You can commit unfinished stuff (for testing etc), but it must be disabled
232 (#ifdef etc) by default so it does not interfere with other developers'
236 2. You don't have to over-test things. If it works for you, and you think it
237 should work for others, too, then commit. If your code has problems
238 (portability, exploits compiler bugs, unusual environment etc) they will be
239 reported and eventually fixed.
242 3. Do not commit unrelated changes together, split them into self-contained
243 pieces, but not smaller. Do not split commits by files or directories,
244 keep related changes together.
247 4. Do not change behavior of the program (renaming options etc) or remove
248 functionality from the code without approval in a discussion on the
249 mplayer-dev-eng mailing list.
252 5. Do not commit changes which change behavior, defaults etc, without asking
253 first. The same applies to compiler warning fixes, trivial looking fixes and
254 to code maintained by other developers. We usually have a reason for doing
255 things the way we do. Send your changes as patches to the mplayer-dev-eng
256 mailing list, and if the code maintainers say OK, you may commit. This does
257 not apply to files you wrote and/or maintain.
260 6. We refuse source indentation and other cosmetic changes if they are mixed
261 with functional changes, such commits will be rejected and removed. Every
262 developer has his own indentation style, you should not change it. Of course
263 if you (re)write something, you can use your own style... (Many projects
264 force a given indentation style - we don't.) If you really need to make
265 indentation changes (try to avoid this), separate them strictly from real
268 NOTE: If you had to put if(){ .. } over a large (> 5 lines) chunk of code,
269 do NOT change the indentation of the inner part (don't move it to the right)!
272 7. Always fill out the commit log message. Describe in a few lines what you
273 changed and why. You can refer to mailing list postings if you fix a
274 particular bug. Comments such as "fixed!" or "Changed it." are unacceptable.
277 8. If you apply a patch by someone else, include the name and email address in
278 the log message. Since the mplayer-cvslog mailing list is publicly archived
279 you should add some spam protection to the email address. Send an answer to
280 mplayer-dev-eng (or wherever you got the patch from) saying that you applied
281 the patch. If the patch contains a documentation change, commit that as
282 well; do not leave it to the documentation maintainers.
285 9. Do NOT commit to code actively maintained by others without permission. Send
286 a patch to mplayer-dev-eng instead.
289 10. Subscribe to the mplayer-cvslog mailing list. The diffs of all commits
290 are sent there and reviewed by all the other developers. Bugs and possible
291 improvements or general questions regarding commits are discussed there. We
292 expect you to react if problems with your code are uncovered.
295 11. Update the documentation if you change behavior or add features. If you are
296 unsure how best to do this, send a patch to mplayer-docs, the documentation
297 maintainers will review and commit your stuff.
300 12. Always send a patch to the mplayer-dev-eng mailing list before committing
301 if you suspect that the change is going to be controversial. Based on past
302 experience, these changes are likely to be controversial:
303 - feature removal, even if obsolete
304 - changes to "special" output messages (like the "Core dumped ;)" message)
305 - verbosity changes from default (info) level
306 - changes to "historical" parts of docs and web pages
307 - use of internal or external libraries
308 - reverting commits from other developers
309 - making the spelling of words consistent without actually correcting
313 13. Try to keep important discussions and requests (also) on the mplayer-dev-eng
314 mailing list, so that all developers can benefit from them.
315 IRC is good for quick discussions, but nobody is there 24/7.
318 Also read DOCS/tech/patches.txt !!!!
320 We think our rules are not too hard. If you have comments, contact us.
327 The typical flow of development would be:
329 1. Check out the source:
331 svn checkout svn://svn.mplayerhq.hu/mplayer/trunk/ devel
334 2. Make your changes.
339 Run 'svn diff' from the root of the source tree, like this:
342 svn diff > ../my_changes.patch
344 If you have made several changes, but only want to submit one for review
345 by other developers, you can specify the filename(s), for example:
347 svn diff mplayer.c > ../major_cleanup.patch
352 Check out another, clean source tree and verify your patch:
354 svn checkout svn://svn.mplayerhq.hu/mplayer/trunk/ clean
356 patch -p0 --dry-run < ../my_changes.patch
358 If there are no errors, you can apply your patch:
360 patch -p0 < ../my_changes.patch
362 After that, verify that MPlayer still builds correctly with your patch
363 applied. Also, be sure that your patch meets our policy as described in
364 section II, specifically rules 1 to 6, before you continue submitting
370 Send an e-mail to the mplayer-dev-eng mailing list. Describe what your
371 patch does and why, and attach the patch file for review by others.
374 6. During the review process, incorporate all suggested fixes. Go to step 2
375 repeatedly until there is nothing more to do for step 6. Of course, if
376 you don't agree with certain suggestions, things can be discussed on
377 the mailing list in a polite manner.
382 If your patch is accepted, double check if your source tree contains the
383 most recent version of your patch with 'svn diff'! After verifying that
384 you met these conditions, commit with:
386 svn commit <filename(s)>
388 Go to step 2 ad infinitum until MPlayer is the perfect media player ;)
391 Note: If you are listed as the maintainer for a particular piece of code,
392 you can skip step 5 and 6 if your patch _only_ applies to the code you
393 maintain. If it touches other code or is otherwise very intrusive, please
394 post it to mplayer-dev-eng first.