<html> <head> <title>The Official FVWM Homepage - CVS Procedures</title> </head> <body BACKGROUND="black-stone1.jpg" bgcolor="#000000" text="#ffffff" link="#FFFF88" vlink="#EEDDDD" alink="#ff0000"> <center> <h1><font color="pink">The Official FVWM Homepage - CVS Procedures</font></h1> </center> Fvwm2 development uses a CVS server. <p><b>Note:</b> the state of code in the CVS repository fluctuates wildly. It will contain bugs, maybe ones that crash the program. It may not even compile for you. Consider it alpha-quality code. You have been warned. <H2> <font color="turquoise">Overview</font></h2> To know what is going in with the source tree you should be reading mail on the Fvwm Workers List. See the <a href="mailinglist.html">Mailing List Info</a> page for more information. <p>To build fvwm2 from the CVS sources, you need to have several <a href="http://www.gnu.org/">GNU</a> tools: <ul> <li>the <a href="http://www.gnu.org/software/cvs/cvs.html">CVS</a> client version 1.9 or better, <li><a href="http://www.gnu.org/software/gcc/gcc.html">GCC</a>, <li>GNU <a href="http://www.gnu.org/software/make/make.html">make</a>, <li><a href="http://www.gnu.org/software/autoconf/autoconf.html">autoconf</a>, version 2.13 or better, and <li><a href="http://www.gnu.org/software/automake/automake.html">automake</a>, version 1.4 or better. </ul> <H2> <font color="turquoise">The Initial Download</font></h2> To make life easier on yourself, create the file `~/.cvsrc', and insert the following lines. These set useful default options for the three most used CVS commands. Do this now before going any further. <pre><font color="yellow"> diff -u -b -B checkout -P update -d -P </font></pre> Also, if you are on a slow net link (like a dialup), you'll also want a line saying `cvs -z3' in the file. This turns on a useful compression level for all cvs commands. Setting it higher will only waste your CPU time. <p>Before you can download development source code for the first time, you must login. <pre><font color="yellow"> cvs -d :pserver:anonymous@cvs.fvwm.org:/home/cvs/fvwm login </font></pre> The password is `guest'. The command outputs nothing if it works, and an error message if it failed. You only need to log in once; all subsequent CVS commands read the password stored in the file `~/.cvspass'. <p>Next, you checkout the latest source code. <pre><font color="yellow"> cvs -d :pserver:anonymous@cvs.fvwm.org:/home/cvs/fvwm checkout fvwm </font></pre> This creates a "fvwm" directory in your current directory. Get in there and get to work. <pre><font color="yellow"> cd fvwm autoreconf </font></pre> You <em>did</em> remember to install autoconf and automake, right? <p>Once you are inside the working directory, you no longer need the long "-d :pserver:..." argument when issuing cvs commands. <p>CVS commands work from <em>anywhere</em> inside the source tree, and recurse downwards. So if you happen to issue an update from inside the `docs' subdirectory, it will work fine, but only update the docs. In all of the following command examples, we assume that you have <font color="yellow">cd</font>'d to the top of the fvwm source tree. <H2> <font color="turquoise">Code Updates</font></h2> From time to time, the dedicated FVWM Workers will make changes to the cvs repository. Announcements of this are automatically sent to the fvwm-workers list. You will want to be subscribed to this list! <p>You can update your copy of the sources to match the master repository with the update command. <pre><font color="yellow"> cvs update </font></pre> <H2> <font color="turquoise">Hacking the Code</font></h2> So you've found a bug you want to fix? Want to implement a feature from the TODO list? Got a new feature to implement? Hacking the code couldn't be easier. Just edit your copy of the sources. No need to copy files to `.orig' or anything. CVS keeps track of the original files for you! <p>When you have the code in a working state, generate a patch against the <em>current</em> sources in the CVS repository. <pre><font color="yellow"> cvs update cvs diff -u > patchfile </font></pre> Mail the patch to the fvwm-workers list with a description of what you did. But read the FAQ file about ChangeLog entries before doing so. <H2> <font color="turquoise">Conflicts</font></h2> If someone else has been working on the same files as you have, you may find that you have made conflicting modifications. You'll discover this when you try to update your sources. <pre><font color="yellow"> cvs update RCS file: /home/cvs/fvwm/fvwm/fvwm/icons.c,v retrieving revision 1.5 retrieving revision 1.6 Merging differences between 1.5 and 1.6 into icons.c rcsmerge: warning: conflicts during merge cvs server: conflicts found in fvwm/icons.c C fvwm/icons.c </font></pre> <font color="green">Don't Panic!</font> Your working file, as it existed before the update, is saved under the filename `.#icons.c.1.5'; hence you can always recover it, should things go horribly wrong. The file named `icons.c' now contains <b>both</b> the old (i.e. your) version and new version of lines that conflicted. You simply edit the file and resolve each conflict by deleting the unwanted version of the lines involved. <pre><font color="yellow"> <<<<<<< icons.c XpmImage my_image = {0}; /* testing */ ======= >>>>>>> 1.6 </font></pre> Don't forget to delete the lines with all the "<", "=", and ">" symbols. <H2> <font color="turquoise">Getting Other Versions</font></h2> Sometimes you may want to get a specific version of the sources. For example, let's say you want the sources as they existed for 2.1.5. <p>Since you'll want to check out a fresh copy of the sources, you'll need to <font color="yellow">cd</font> out of the fvwm source tree before issuing the following command. <pre><font color="yellow"> cvs -d :pserver:anonymous@cvs.fvwm.org:/home/cvs/fvwm checkout -r version-2_1_5 fvwm </font></pre> This creates a directory called `fvwm', with the sources as they existed for the version 2.1.5. There may be other tags in the repository, and you can use them as parameters for the `-r' option. Do <font color="yellow">cvs status -v README</font> for a list. <H2> <font color="turquoise">Getting Commit Access</font></h2> Using the procedures described above, and being on the workers list are a pre-requisite to gaining update access. We expect to have heard from you more than once on the fvwm-workers list so that we have some idea who you are. <p>Doing some testing, submitting some patches, and getting involved in the discussions will help us know about you. <p>After you have been involved for a while, if we don't suggest it, then ask. The fvwm2 development team is not a closed environment, we welcome new members. There are no required duties, all work is strictly voluntary. <p>If there is agreement on the list that you should be given update access, you will need to choose a CVS user ID and provide an encrypted password. The latter can be obtained with the following Perl snippet: <pre><font color="yellow"> perl -e 'print crypt("yourpass",join("",((a..z,A..Z,0..9)[rand(62),rand(62)]))), "\n"' </font></pre> Change 'yourpass' to whatever you want your password to be. <p>Once you have update access, re-do the "login" command above using your CVS user ID in place of 'anonymous', and your password in place of 'guest', and you are on your way. <H2> <font color="turquoise">Starting a Project</font></h2> Discuss your ideas on the workers list before you start. Someone may be working on the same thing you have in mind. Or they may have good ideas about how to go about it. <p>If you just have a small patch you want to make, you may just commit it to the main branch. If the change is large, and lots of other work is going on, you may want to do your changes on a "side branch" which will get merged into the main branch later on. Before creating a branch, you discuss the matter with the other workers. If you are new to CVS, you should read the CVS documentation several times, and ask for help. The documentation is sufficiently large and confusing that it is rather difficult to get right the first few times. <H2> <font color="turquoise">Adding Directories and Files</font></h2> First create the new directories and files locally. Then, assuming the new directory is named "newdir" and the new file is "newmod.c": <pre><font color="yellow"> cvs add -m "New directory for ..." newdir cd newdir cvs add -m "File newmod.c is a module that ..." newmod.c </font></pre> <H2> <font color="turquoise">Deleting Directories and Files</font></h2> You don't directly delete directories, you delete all the files in a directory and the directory goes away during an "update -dP". To delete one or more files: <pre><font color="yellow"> cvs remove -f filename... cvs commit -m 'deleted files because' filename... </font></pre> </body> </html>