Apply Move command-parsing patch (Gerard Vermeulen)
[fvwm.git] / docs / DEVELOPER-CVS
blob0de8c919d010ae20e5398d3824dbf726a3d9eba6
1 CVS INFORMATION
2 ---------------
4 FVWM development uses a CVS server.
6 Note: the state of code in the CVS repository fluctuates wildly. It will
7 contain bugs, maybe ones that crash the program. It may not even compile for
8 you. Consider it alpha-quality code. You have been warned.
10 CONTENTS
12 Before You Begin Initial Setup Checking Out Source Code Building The Tree
13 Code Updates Starting a Project Hacking the Code Conflicts Getting Commit
14 Access Committing Changes Adding Directories and Files Deleting Directories
15 and Files Renaming/Moving Files Creating New Branches Creating New Source
16 Trees Working on the fvwm-web Source Tree Before You Begin [top]
18 To know what is going in with the source tree you should be reading mail on
19 the Fvwm Workers List. See the Mailing List Info page for more information.
21 To build FVWM from the CVS sources, you must have several GNU tools:
23 the CVS client version 1.9 or better, GCC, GNU make, autoconf, version 2.13
24 or better, and automake, version 1.4 or better.  Without these tools, you
25 won't be able to build out of the CVS source tree. But don't despair:
26 download one of the daily snapshots instead!
28 INITIAL SETUP
29 -------------
31 To make life easier on yourself, create the file `~/.cvsrc', and insert the
32 following lines. These set useful default options for the three most used
33 CVS commands. Do this now before going any further.
35     diff -u 
36     checkout -P 
37     update -d -P 
38     cvs -q 
40 The last line makes cvs operations quieter, but you still get full error
41 messages.
43 Also, if you are on a slow net link (like a dialup), you'll also want a line
44 containing `cvs -z3' in this file. This turns on a useful compression level
45 for all cvs commands. Setting it higher will only waste your CPU time.
47 Before you can download development source code for the first time, you must
48 login to the server:
50     cvs -d :pserver:anonymous@cvs.fvwm.org:/home/cvs/fvwm login
52 The password is `guest'. The command outputs nothing if it works, and an
53 error message if it failed. You only need to log in once; all subsequent CVS
54 commands read the password stored in the file `~/.cvspass'.
56 CHECKING OUT SOURCE CODE
57 ------------------------
59 Next, you checkout the source code. First you must decide what version
60 you're interested in. The structure of the CVS tree is as follows:
62 The latest code is always available at the tip of the main branch.  All
63 branches are labeled as branch-ver. So, for example, as development of the
64 2.3.x (latest) code continues on the main branch, a branch branch-2_2 has
65 been created for changes that would go into a 2.2.1 or future release.  At
66 various points we decide to checkpoint the code with a version number
67 change; there is always a label associated with every version number as
68 well. The label will have the format version-ver; for example,
69 version-2_1_13 or version-2_2_1.  Given these rules, you should be able to
70 translate the version of you want to retrieve to a label for use with the
71 checkout command below (or other CVS commands which might need them).
73 You use the CVS checkout (or co) command to retrieve an initial copy of the
74 code. The simplest form of this command, for retrieving the latest code,
75 doesn't require any label:
77     cvs -d :pserver:anonymous@cvs.fvwm.org:/home/cvs/fvwm checkout fvwm
79 This will create a new directory fvwm in your current directory, containing
80 the latest, up-to-the-minute code.
82 If you want to work on the latest code in the 2.2.x branch of the code, you
83 can use the branch label on the checkout command line:
85     cvs -d :pserver:anonymous@cvs.fvwm.org:/home/cvs/fvwm co -r branch-2_2 fvwm
87 This will put a copy of the very latest code on the 2.2.x branch into a
88 subdirectory fvwm. If you're going to be working on multiple branches at the
89 same time, or just feel like it, you can tell CVS to use a different name
90 for the directory with the checkout -d option:
92     cvs -d :pserver:anonymous@cvs.fvwm.org:/home/cvs/fvwm co -r branch-2_2 \
93         -d fvwm-2.2.x fvwm
95 Now the code will be checked out into a directory fvwm-2.2.x rather than
96 fvwm. In this way you can keep multiple copies of the source around and
97 "active" simultaneously. (It is also permissible to just checkout into fvwm
98 and rename the directory yourself.)
100 Finally, if you want to see a particular version of the sources you can use
101 a version label instead of a branch label on the checkout command:
103     cvs -d :pserver:anonymous@cvs.fvwm.org:/home/cvs/fvwm co -r \
104         version-2_1_10 -d fvwm-2.1.10 fvwm
106 Please note that if you check out a specific version, the update command
107 will be useless in that copy: after all, the code for that version hasn't
108 changed so there's nothing to update...
110 The version and branch labels "stick" to your copy of the tree, so that if
111 you check out a branch, all update commands will be handled with respect to
112 that branch. These are called "sticky tags"; please see the CVS
113 documentation for more details on these and how they work, or how to
114 "un-stick" a checked out version if you need to.
116 Note that when you are inside the working directory, you no longer need the
117 "-d :pserver:..." argument when issuing CVS commands.
119 CVS commands work from anywhere inside the source tree, and recurse
120 downwards. So if you happen to issue an update from inside the `docs'
121 subdirectory it will work fine, but only update the docs. In all of the
122 following command examples, we assume that you have cd'd to the top of the
123 source tree.
125 BUILDING THE TREE
126 -----------------
128 So, you now have a copy of the code. Get in there and get to work!
130 The first thing you need to do is create a configure script. The configure
131 script will also need the Makefile.in files in order to generate the
132 Makefiles. The autoconf and automake tools do this for you (you did remember
133 to install autoconf and automake, right?)
135 So, when you have a newly checked-out source tree the first thing to do is:
137     utils/configure_dev.sh
139 in the cvs tree, it may be run with usual ./configure arguments instead of
140 all auto commands above.
142 Once that's done, you can proceed to build the code as discussed in the
143 INSTALL.fvwm and INSTALL files:
145     ./configure && make && make install
147 with appropriate options and arguments, as you like.
149 CODE UPDATES
150 ------------ 
152 From time to time, the dedicated FVWM Workers will make changes to the CVS
153 repository. Announcements of this are automatically sent to the fvwm-workers
154 list. You will want to be subscribed to this list!
156 You can update your copy of the sources to match the master repository with
157 the update command. Note it's not necessary to check out a new copy! Using
158 update is significantly faster and simpler, as it will download only patches
159 instead of entire files, only update files that have changed since your last
160 update, and it will automatically merge any changes in the CVS repository
161 with any local changes you may have made.
163     cvs update
165 If you didn't use a tag when you checked out, this will update your sources
166 to the latest version on the main branch. If you used a branch tag, it will
167 update to the latest version on that branch. If you used a version tag, it
168 won't do anything (see above).
170 After updating the local source directory, it is usually enough to issue
171 make to rebuild everything. It is safe to manually run aclocal, automake and
172 autoconf if you think something should be rebuilt, but this sould be run
173 automatically on make.
175 STARTING A PROJECT
176 ------------------
178 Discuss your ideas on the workers list before you start. Someone may be
179 working on the same thing you have in mind. Or they may have good ideas
180 about how to go about it.
182 If you just have a small patch you want to make, you may just commit it to
183 the main branch. If the change is large, and lots of other work is going on,
184 you may want to do your changes on a "side branch" which will get merged
185 into the main branch later on. Before creating a branch, you discuss the
186 matter with the other workers. If you are new to CVS, you should read the
187 CVS documentation several times, and ask for help. The documentation is
188 sufficiently large and confusing that it is rather difficult to get right
189 the first few times.
191 HACKING THE CODE 
192 ----------------
194 So you've found a bug you want to fix? Want to implement a feature from the
195 Jitterbug list? Got a new feature to implement? Hacking the code couldn't be
196 easier. Just edit your copy of the sources. No need to copy files to `.orig'
197 or anything; CVS has copies of the originals.
199 When you have the code in a working state, generate a patch against the
200 current sources in the CVS repository.
202     cvs update 
203     cvs diff -u > patchfile
205 Mail the patch to the fvwm-workers list with a description of what you did.
206 But read the FAQ file about ChangeLog entries before doing so.
208 CONFLICTS
209 --------- 
211 If someone else has been working on the same files as you have, you may find
212 that you have made conflicting modifications. You'll discover this when you
213 try to update your sources.
215     $ cvs update
216     RCS file: /home/cvs/fvwm/fvwm/fvwm/icons.c,v
217     retrieving revision 1.5
218     retrieving revision 1.6
219     Merging differences between 1.5 and 1.6 into icons.c
220     rcsmerge: warning: conflicts during merge
221     cvs server: conflicts found in fvwm/icons.c
222     C fvwm/icons.c
224 Don't Panic! Your working file, as it existed before the update, is saved
225 under the filename `.#icons.c.1.5'; hence you can always recover it, should
226 things go horribly wrong. The file named `icons.c' now contains both the old
227 (i.e. your) version and new version of lines that conflicted. You simply
228 edit the file and resolve each conflict by deleting the unwanted version of
229 the lines involved.
231     <<<<<<< icons.c
232     XpmImage    my_image = {0};  /* testing */
233     =======
234     >>>>>>> 1.6
236 Don't forget to delete the lines with all the "<", "=", and ">" symbols.
238 GETTING COMMIT ACCESS 
239 ---------------------
241 Using the procedures described above, and being on the workers list are a
242 prerequisite to gaining update access. We expect to have heard from you more
243 than once on the fvwm-workers list so that we have some idea who you are.
245 Doing some testing, submitting some patches, and getting involved in the
246 discussions will help us know about you.
248 After you have been involved for a while, if we don't suggest it, then ask.
249 The FVWM development team is not a closed environment, we welcome new
250 members. There are no required duties, all work is strictly voluntary.
252 If there is agreement on the list that you should be given update access,
253 you will need to choose a CVS user ID and provide an encrypted password. The
254 latter can be obtained with the following Perl snippet:
256     perl -e 'print crypt("yourpass", join("", \
257         ((a..z, A..Z, 0..9)[rand(62), rand(62)]))), "\n"'
259 Change yourpass to whatever you want your password to be. Send the encrypted
260 password to Jason Tibbitts, (tibbs@math.uh.edu). Jason is the list
261 maintainer, and provides our CVS repository.
263 Once you have update access, re-do the login command above using your CVS
264 user ID in place of anonymous and your password in place of guest, and you
265 are on your way.
267 COMMITTING CHANGES
268 ------------------
270 Now that you have write permissions and have logged in with your CVS
271 username, you can commit changes. This is done (surprise!) with the CVS
272 commit command.
274 Note it's usually a good idea to run a cvs update just before you commit, to
275 make sure you've got the latest code. If you try to commit changes to a file
276 that someone else has changed since you last updated, CVS will complain and
277 not allow the commit. But, changes to other files could indirectly affect
278 your new code, as well. In general if you're doing development it really
279 pays to follow the old(?) adage, "Update early and often".
281 To commit all the modified files in your workspace, use:
283     cvs commit
285 CVS will pop up your favorite editor to allow you to enter comments about
286 what changes you've made. These comments will appear in the email sent to
287 fvwm-workers, so please write something useful.
289 Also, you will see a complete list of files that CVS thinks you have
290 changed. Please sanity-check this list! Make sure there's nothing you don't
291 expect there, and everything you do expect.
293 If you don't like the all-or-nothing approach, you can specify only certain
294 files to be committed:
296     cvs commit fvwm/fvwm.1 modules/FvwmAuto/FvwmAuto.1
298 Again, please sanity-check the list to be sure you have everything.
300 Adding Directories and Files [top]
302 First create the new directories and files locally. Then, assuming the new
303 directory is named `newdir' and the new file is `newmod.c':
305     cvs add -m "New directory for ..." newdir
306     cd newdir
307     cvs add -m "File newmod.c is a module that ..." newmod.c
308   
309 When adding new directories and files, please be sure to take a look at the
310 relevant Makefile.am files and modify them as appropriate! See the
311 DEVELOPERS file for more details on this.
313 DELETING DIRECTORIES AND FILES
314 ------------------------------
316 You don't directly delete directories, you delete all the files in a
317 directory and the directory goes away during an `update -dP'. To delete one
318 or more files:
320     cvs remove filename...  
321     cvs commit -m 'deleted files because' filename...
323 Again, when removing directories or files please be sure to update the
324 appropriate Makefile.am files. See DEVELOPERS.
326 RENAMING/MOVING FILES 
327 ---------------------
329 There is no perfect way to rename or move files in CVS. There are a few
330 different methods, each with good and bad points. For FVWM, we've chosen the
331 most straightforward method: remove the old file and add a new file. In
332 order to preserve some kind of link, please include a pointer to the old
333 file in the comments of the new file (and vice versa).
335 Again, when renaming or moving files please be sure to update the
336 appropriate Makefile.am files. See DEVELOPERS.
338 CREATING NEW BRANCHES
339 ---------------------
341 Please contact the fvwm-workers list and discuss any new branch you'd like
342 to create, just so we have an idea about what and why.
344 When creating a branch it's best to base it off of a previously-existing,
345 labeled checkpoint. Here we'll use the example of creating a new branch for
346 2.2.x development after the 2.2 release was made. Because of our rules, we
347 know that the new branch name should be branch-2_2, but if you're creating a
348 branch for a new feature you can use any valid label.
350 Once you know where you want to branch from and what you want to call the
351 new branch, use the cvs rtag command to create the branch (be sure you're in
352 the root of your checkout):
354     cvs rtag -b -r version-2_2_0 branch-2_2 .
356 The first thing you'll probably want to do on the new branch is edit the
357 configure.in file to change the version number, so people know it's
358 different. See the DEVELOPERS file for information on this.
360 CREATING NEW SOURCE TREES 
361 -------------------------
363 Please contact the fvwm-workers list and discuss any new source trees you'd
364 like to create, just so we have an idea about what and why.
366 The source code for Fvwm is in the "fvwm" source tree. At the time this
367 sentence was written, (September, 1999), there were 1 more source tree,
368 "fvwm-web".
370 If you have update access to "fvwm", you can also update the other source
371 trees and create new source trees.
373 WORKING ON THE FVWM-WEB SOURCE TREE
374 -----------------------------------
376 It's important to remember anything checked into the fvwm-web branch will
377 automatically appear on the fvwm web pages. Be careful to check your work
378 before you commit a change.
380 You can check to see what your changes will look like before a commit, by
381 using a "file:" URL to look at your changes with your browser. If you have
382 the fvwm-web source in /home/my/fvwm-web, your browser should be able to
383 view the source with the URL file:/home/my/fvwm-web. (This is one of the
384 reasons you want to use relative URLs to link one page to another.)
386 Some of the sub-directories in the fvwm-web branch can take a long time to
387 checkout or commit due to their large size. This is especially true over
388 dial-up connections. All of the CVS commands can be convinced to only work
389 on one directory or sub-directory by using the -l argument.
391 Some parts of the fvwm-web tree are generated from fvwm tree source files.
392 The generated files are in the directories:
394     fvwm-web/authors/ 
395     fvwm-web/news/ 
396     fvwm-web/documentation/faq/
397     fvwm-web/documentation/manpages/ 
398     fvwm-web/documentation/perllib/ 
400 Each directory has a script generating one or more php files. You would normally
401 run these scripts (at least in the first 3 directories) whenever you made a
402 change to fvwm/NEWS, fvwm/docs/FAQ or fvwm/AUTHORS that you want to appear
403 on the fvwm web site. Instructions are in the scripts.