comparison DOCS/tech/svn-howto.txt @ 18769:62455ce744c9

rename cvs-howto.txt to svn-howto.txt
author ivo
date Wed, 21 Jun 2006 12:56:42 +0000
parents DOCS/tech/cvs-howto.txt@a301e6ca6aca
children 67f847c438bd
comparison
equal deleted inserted replaced
18768:023937301637 18769:62455ce744c9
1
2 About Subversion write access:
3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
5 Before everything else, you should know how to use Subversion properly.
6 Subversion comes with some documentation.
7
8 svn help
9 man svn
10 info svn
11
12 are a good start. The most comprehensive manual is the book "Version Control
13 with Subversion" by Ben Collins-Sussman, Brian W. Fitzpatrick and C. Michael
14 Pilato. It can be viewed online at
15
16 http://svnbook.org/
17
18 For more information about the Subversion project, visit
19
20 http://subversion.tigris.org/
21
22 Consult these resources whenever you have problems, they are quite exhaustive.
23 What follows now are MPlayer specific guidelines.
24
25
26 I. TECH SIDE:
27 =============
28
29 1. Checking out development source tree:
30
31 svn checkout svn://svn.mplayerhq.hu/mplayer/trunk/
32
33 2. Updating source tree to latest revision:
34
35 svn update
36
37 3. Committing changes:
38
39 svn update
40 svn commit --username USERNAME filename(s)
41
42 Do not use comments such as: "bug fix." or "files changed" or "dunno".
43 You don't have to include the filename in the comment, as comments are linked
44 to files. If you have made several independent changes, commit them
45 separately, not at the same time. You will be prompted for a comment in an
46 editor, which is either specified by --editor-cmd on the command line, set
47 in your personal configuration file (~/.subversion/config) or set by one of
48 the following environment variables: SVN_EDITOR, VISUAL or EDITOR. When
49 prompted for a password, type the password you got assigned by the Subversion
50 server admin. By default, Subversion caches all authentication tokens. This
51 behaviour can be disabled by setting both 'store-passwords' and
52 'store-auth-creds' to "no" in ~/.subversion/config. You might need to remove
53 previous cache files, which are located in ~/.subversion/auth, by hand.
54
55 4. Adding new files/directories:
56
57 svn add filename/dirname
58 svn commit filename/dirname
59
60 5. Removing files:
61
62 svn delete filename
63 svn commit filename
64
65 6. Checking changes:
66
67 svn diff filename(s)
68
69 Doublecheck your changes before committing to avoid trouble later on.
70 This way you will see if your patch has debug stuff or indentation
71 changes and you can fix it before committing and triggering flames.
72
73 7. Checking changelog:
74
75 svn log filename(s)
76
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/
80
81 8. Renaming/moving files or content of files:
82
83 svn move source destination
84 svn commit source destination
85
86 Do not move or rename files before discussing it on the mplayer-dev-eng
87 mailing list first!
88
89 Don't do a lot of cut'n'paste from one file to another without a very good
90 reason and discuss it on the mplayer-dev-eng mailing list first. It will make
91 those changes untraceable!
92
93 Such actions are useless and treated as cosmetics in 99% of cases,
94 so try to avoid them.
95
96 9. Reverting broken commits
97
98 There is no Subversion equivalent of the 'cvs admin -o' command. Instead,
99 be very careful about what you commit! If somehow you broke something,
100 revert the changes locally and re-commit with a proper commit message.
101 You may want to use 'svn cat -r<revision> filename' to inspect an older
102 revision.
103
104 10. Checking status of source tree
105
106 svn status
107
108 This will detect all the changes you made and list what actions will be
109 taken in case of a commit (Additions, Modifications, Deletions, et cetera).
110
111 11. Reverting local changes
112
113 svn revert filename(s)
114
115 In case you made a lot of local changes to a file and want to start over
116 with a fresh checkout of that file, you can use svn revert filename(s).
117 NOTE: This has nothing to do with reverting changes on the Subversion
118 server! It only reverts changes that were not committed yet. If you need
119 to revert a broken commit, see 9.
120
121 12. Changing commit messages
122
123 svn propedit svn:log --revprop -r <revision>
124
125 If your commit message is too short or not explanatory enough, you can edit
126 it afterwards with svn propedit.
127
128 Contact the project admin <root at mplayerhq dot hu> if you have technical
129 problems with the Subversion server.
130
131
132
133 II. POLICY / RULES:
134 ===================
135
136 1. You must not commit code which breaks MPlayer! (Meaning unfinished but
137 enabled code which breaks compilation or compiles but does not work.)
138 You can commit unfinished stuff (for testing etc), but it must be disabled
139 (#ifdef etc) by default so it does not interfere with other developers'
140 work.
141
142 2. You don't have to over-test things. If it works for you, and you think it
143 should work for others, too, then commit. If your code has problems
144 (portability, exploits compiler bugs, unusual environment etc) they will be
145 reported and eventually fixed.
146
147 3. Do not commit unrelated changes together, split them into self-contained
148 pieces.
149
150 4. Do not change behavior of the program (renaming options etc) or
151 remove functionality from the code without approval in a discussion on
152 the mplayer-dev-eng mailing list.
153
154 5. Do not commit changes to the build system (Makefiles, configure script)
155 which change behaviour, defaults etc, without asking first. The same
156 applies to compiler warning fixes, trivial looking fixes and to code
157 maintained by other developers. We usually have a reason for doing things
158 the way we do. Send your changes as patches to the mplayer-dev-eng mailing
159 list, and if the code maintainers say OK, you may commit. This does not
160 apply to files you wrote and/or maintain.
161
162 6. We refuse source indentation and other cosmetic changes if they are mixed
163 with functional changes, such commits will be rejected and removed. Every
164 developer has his own indentation style, you should not change it. Of course
165 if you (re)write something, you can use your own style... (Many projects
166 force a given indentation style - we don't.) If you really need to make
167 indentation changes (try to avoid this), separate them strictly from real
168 changes.
169
170 NOTE: If you had to put if(){ .. } over a large (> 5 lines) chunk of code,
171 do NOT change the indentation of the inner part (don't move it to the right)!
172
173 7. Always fill out the commit log message. Describe in a few lines what you
174 changed and why. You can refer to mailing list postings if you fix a
175 particular bug. Comments such as "fixed!" or "Changed it." are unacceptable.
176
177 8. If you apply a patch by someone else, include the name and email address in
178 the log message. Since the mplayer-cvslog mailing list is publicly
179 archived you should add some spam protection to the email address. Send an
180 answer to mplayer-dev-eng (or wherever you got the patch from) saying that
181 you applied the patch. If the patch contains a documentation change, commit
182 that as well; do not leave it to the documentation maintainers.
183
184 9. Do NOT commit to code actively maintained by others without permission. Send
185 a patch to mplayer-dev-eng instead.
186
187 10. Subscribe to the mplayer-cvslog mailing list. The diffs of all commits
188 are sent there and reviewed by all the other developers. Bugs and possible
189 improvements or general questions regarding commits are discussed there. We
190 expect you to react if problems with your code are uncovered.
191
192 11. Update the documentation if you change behavior or add features. If you are
193 unsure how best to do this, send a patch to mplayer-docs, the documentation
194 maintainers will review and commit your stuff.
195
196 Also read DOCS/tech/patches.txt !!!!
197
198 We think our rules are not too hard. If you have comments, contact us.
199
200
201
202 III. Beginners Guide by David Holm
203 ====================
204
205 When I first got CVS write access I got banned after only a few hours
206 because I didn't fully understand this documentation. This part is for
207 those of you who have just got CVS write access and want to avoid the
208 most common pitfalls leading to CVS ban.
209 I will introduce a step-by-step guide explaining how I'm making sure
210 that my CVS commits are proper and won't get me banned.
211
212 1. You should set up two directoress for MPlayer, one which contains the stable
213 version and has the :ext: option instead of :pserver: in CVS/Root.
214 The other should be your development directory and have the CVS/Root set to
215 :pserver: instead of :ext:, that way you can't commit development code
216 by accident (since only :ext: allows writes).
217 This is my setup:
218 ~/mplayer
219 /main
220 /main.dev
221 NOTE: I'll use these directory names from here on in the guide, what you
222 call your directories is entirely up to you. This is _only_ an example.
223
224 2. When you are satisfied with the changes in "main.dev" and think you are
225 ready to commit the changes to CVS start by doing the following in the
226 "~/mplayer" dir":
227 diff -Nur -x "CVS" -x ".*" main main.dev > dev2stable
228 dev2stable is the filename for the patchfile, it doesn't matter what you
229 call it.
230
231 3. Now comes one of the tricky parts, editing the patch. I prefer using mcedit
232 (comes with Midnight Commander) since it does syntax highlighting in patches
233 (= it uses colors to identify lines =), But most ASCII editors should do
234 (meaning don't use Star Office and save it as a Star Office document for
235 instance ;) I will try to explain this as good as I can.
236
237 Read through the patch and remove all occurrences of:
238
239 * diff -Nur.... that are affecting files YOU have NOT modified. These
240 occur when either main or main.dev are a different version (not checked
241 out at the same time)
242 EVERYTHING from the diff -Nur... line until the next diff -Nur... line
243 are changes to the file specified after the diff options, and ONLY that
244 file.
245
246 * Lines containing "Binary files..." if you add the 'a' switch to -N(a)ur
247 binary files will be added to the patch as well, making it huge and
248 putting a lot of unnecessary data in it (since you seldom commit any
249 binaries).
250
251 * If you find changes within a diff block that you don't want to commit
252 you can delete them if they are the only changes ranging from the
253 @@ -x,y +x,y @@ until the line before the next @@ -x,y +x,y @@. You
254 _cannot_ remove single lines after a @@ -x,y +x,y @@ because that will
255 break the patch!.
256 Example:
257 ...
258 @@ -15,34 +15,6 @@
259 - old_option;
260 + new_option;
261 @@ -65,13 +65,3 @@
262 ...
263
264 OK:
265 ...
266 @@ -65,13 +65,3 @@
267 ...
268
269 Will break patch:
270 ...
271 @@ -15,34 +15,6 @@
272 old_option;
273 @@ -65,13 +65,3 @@
274 ...
275
276 When I end up in a situation where I have to remove just some lines from
277 a block, I leave it alone, remember (write down) which file it is in and
278 then edit the file in "main" after I've applied the patch.
279
280 * Now it's time for applying the patch to the "main" (stable) directory.
281 This should be done in two steps:
282 1. enter "main" and run
283
284 patch -p1 --dry-run < ../dev2stable
285
286 -p1 means that you are one level deep (that you have entered the
287 "main" directory and that should be stripped when patching, if you
288 run it from "~/mplayer" you would use -p0).
289 --dry-run means that patch does everything it normally does but
290 without modifying ANY files. This is a great way of testing whether
291 your patch works or not.
292 "../dev2stable" is your patchfile. (don't forget the '<')
293 If the dry run fails, check the line it failed on and figure out
294 why it failed, make a new patch and try again.
295
296 2. OK, you finally have a working patch, remove --dry-run, patch "main"
297 and you are done with the patching part =).
298
299 4. It's almost time for the final step, committing the changes. But first you
300 MUST make sure your changes compile without breaking anything and that it
301 follows the Policy mentioned in section 2. (Read it until your eyes are
302 bleeding if you want to keep CVS access!)
303 Don't worry about object files etc that will be created in your "main" dir,
304 they won't be sent to CVS on a commit, you must use the add command to add
305 new files (discuss it on dev-eng before adding new files!).
306 Now to make sure your additions follow policy do the following on every file
307 you will commit:
308
309 cvs -z3 diff -u <filename> > <filename.d>
310
311 Of course the output file (<filename.d>) can have any name you want. This
312 will create a file showing the differences between the file on CVS and your
313 updated local file.
314 I will explain some of the policy rules I had a hard time understanding:
315
316 II.5: This means that if for instance you have lines in <filename.d> that
317 look something like this:
318
319 -
320 +
321
322 That means you have added or removed tabs or spaces on that line.
323 That qualifies as a cosmetic change and is disallowed. Edit the
324 file and put back/remove the added/removed tabs/spaces.
325 Rediff the file and make sure the cosmetic changes are fixed.
326
327 II.6: Make sure you read and understand this properly before committing
328 anything. Commit one file at a time!
329
330 5. OK, you have a working patch following the CVS policy, excellent work. Now
331 for the final step, committing. This is really simple. Just run the
332 following command in "main" for each file you want to commit:
333
334 cvs -z3 commit -m "<comment (changes)>" <filename>
335 cvs -z3 commit <filename>
336
337 The latter will bring up your default text editor for writing comments (I
338 prefer this method).
339
340 You are done, congratulations. If you are certain you have followed all of the
341 policy you shouldn't have any trouble with the CVS maintainers at all.
342 At first I thought the policy was too strict, but I discussed it with A'rpi and
343 he made some very good points, so don't complain.