How to write code for CVS * Compiler options If you are using GCC, you'll want to configure with -Wall, which can detect many programming errors. This is not the default because it might cause spurious warnings, but at least on some machines, there should be no spurious warnings. For example: $ CFLAGS="-g -Wall" ./configure Configure is not very good at remembering this setting; it will get wiped out whenever you do a ./config.status --recheck, so you'll need to use: $ CFLAGS="-g -Wall" ./config.status --recheck * Indentation style CVS mostly uses a consistent indentation style which looks like this: void foo (arg) char *arg; { if (arg != NULL) { bar (arg); baz (arg); } } The file cvs-format.el contains settings for emacs and the NEWS file contains a set of options for the indent program which I haven't tried but which are correct as far as I know. You will find some code which does not conform to this indentation style; the plan is to reindent it as those sections of the code are changed (one function at a time, perhaps). In a submitted patch it is acceptable to refrain from changing the indentation of large blocks of code to minimize the size of the patch; the person checking in such a patch should reindent it. * Portability If it is in ANSI C and it is in SunOS4 (using /bin/cc), generally it is OK to use it without ifdefs (for example, assert() and void * as long as you add more casts to and from void * than ANSI requires. But not function prototypes). Such constructs are generally portable enough, including to NT, OS/2, VMS, etc. * Run-time behaviors Use assert() to check "can't happen" conditions internal to CVS. We realize that there are functions in CVS which instead return NULL or some such value (thus confusing the meaning of such a returned value), but we want to fix that code. Of course, bad input data, a corrupt repository, bad options, etc., should always print a real error message instead. * Coding standards in general Generally speaking the GNU coding standards are mostly used by CVS (but see the exceptions mentioned above, such as indentation style, and perhaps an exception or two we haven't mentioned). This is the file standards.text at the GNU FTP sites. * Submitting patches Please include a ChangeLog entry (see the GNU coding standards for information on writing one) with patches. Include a description of what the patch does (sometimes the ChangeLog entry and/or comments in the code are appropriate for this, but not always)--patches should not be checked in unless there is some reason for them, and the description may be helpful if there is a better way to solve the problem. In addition to the ChangeLog entry, there should be a change to the NEWS file in the case of a new feature. If you solve several unrelated problems, submit a separate patch for each one. Patches should be tested before submission. Use context diffs or unidiffs for patches. Note that all submitted changes may be distributed under the terms of the GNU Public License, so if you don't like this, don't submit them. Submit changes to bug-cvs@prep.ai.mit.edu. Generally speaking if you follow the guidelines in this file you can expect a yes or no answer about whether your patch is accepted. But even in this case there is no guarantee because wading through a bunch of submissions can be time consuming, and noone has volunteered to offer any such guarantee. If you don't receive an answer one way or another within a month, feel free to ask what the status is. You can, if you wish, distribute your patch on mailing lists or newsgroups, if you want to make it available before it gets merged. * What is the schedule for the next release? There isn't one. That is, upcoming releases are not announced (or even hinted at, really) until the feature freeze which is approximately 2 weeks before the final release (at this time test releases start appearing and are announced on info-cvs). This is intentional, to avoid a last minute rush to get new features in.