diff options
Diffstat (limited to 'contrib/cvs/HACKING')
-rw-r--r-- | contrib/cvs/HACKING | 256 |
1 files changed, 0 insertions, 256 deletions
diff --git a/contrib/cvs/HACKING b/contrib/cvs/HACKING deleted file mode 100644 index c71d307..0000000 --- a/contrib/cvs/HACKING +++ /dev/null @@ -1,256 +0,0 @@ -How to write code for CVS - -* License of CVS - - CVS is Copyright (C) 1986-2006 The Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 1, or (at your option) - any later version. - - More details are available in the COPYING file but, in simplified - terms, this means that any distributed modifications you make to - this software must also be released under the GNU General Public - License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - -* Source - -Patches against the development version of CVS are most likely to be accepted: - - $ cvs -z3 -d:pserver:anonymous@cvs.sv.nongnu.org:/sources/cvs co ccvs - -See the Savannah sources page <http://savannah.nongnu.org/cvs/?group=cvs> for -more information. - -* 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 - -* Backwards Compatibility - -Only bug fixes are accepted into the stable branch. New features should be -applied to the trunk. - -If it is not inextricable from a bug fix, CVS's output (to stdout/stderr) -should not be changed on the stable branch in order to best support scripts and -other tools which parse CVS's output. It is ok to change output between -feature releases (on the trunk), though such changes should be noted in the -NEWS file. - -Changes in the way CVS responds to command line options, config options, etc. -should be accompanied by deprecation warnings for an entire stable series of -releases before being changed permanently, if at all possible. - -* 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); - } - switch (c) - { - case 'A': - aflag = 1; - break; - } -} - -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 - -The general rule for portability is that it is only worth including -portability cruft for systems on which people are actually testing and -using new CVS releases. Without testing, CVS will fail to be portable -for any number of unanticipated reasons. - -The current consequence of that general rule seems to be that 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. - -Do not use arbitrary limits (such as PATH_MAX) except perhaps when the -operating system or some external interface requires it. We spent a -lot of time getting rid of them, and we don't want to put them back. -If you find any that we missed, please report it as with other bugs. -In most cases such code will create security holes (for example, for -anonymous readonly access via the CVS protocol, or if a WWW cgi script -passes client-supplied arguments to CVS). - -Although this is a long-term goal, it also would be nice to move CVS -in the direction of reentrancy. This reduces the size of the data -segment and will allow a multi-threaded server if that is desirable. -It is also useful to write the code so that it can be easily be made -reentrant later. For example, if you need to pass data from a -Parse_Info caller to its callproc, you need a static variable. But -use a single pointer so that when Parse_Info is fixed to pass along a -void * argument, then the code can easily use that argument. - -* 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. - -* Regenerating Build Files - -On UNIX, if you wish to change the Build files, you will need Autoconf and -Automake. - -Some combinations of Automake and Autoconf versions may break the -CVS build if file timestamps aren't set correctly and people don't -have the same versions the developers do, so the rules to run them -automatically aren't included in the generated Makefiles unless you run -configure with the --enable-maintainer-mode option. - -The CVS Makefiles and configure script were built using Automake 1.10 and -Autoconf 2.61, respectively. - -There is a known bug in Autoconf 2.57 that will prevent the configure -scripts it generates from working on some platforms. Other combinations of -autotool versions may or may not work. If you get other versions to work, -please send a report to <bug-cvs@nongnu.org>. - -* Writing patches (strategy) - -Only some kinds of changes are suitable for inclusion in the -"official" CVS. Bugfixes, where CVS's behavior contradicts the -documentation and/or expectations that everyone agrees on, should be -OK (strategically). For features, the desirable attributes are that -the need is clear and that they fit nicely into the architecture of -CVS. Is it worth the cost (in terms of complexity or any other -tradeoffs involved)? Are there better solutions? - -If the design is not yet clear (which is true of most features), then -the design is likely to benefit from more work and community input. -Make a list of issues, or write documentation including rationales for -how one would use the feature. Discuss it with coworkers, a -newsgroup, or a mailing list, and see what other people think. -Distribute some experimental patches and see what people think. The -intention is arrive at some kind of rough community consensus before -changing the "official" CVS. Features like zlib, encryption, and -the RCS library have benefitted from this process in the past. - -If longstanding CVS behavior, that people may be relying on, is -clearly deficient, it can be changed, but only slowly and carefully. -For example, the global -q option was introduced in CVS 1.3 but the -command -q options, which the global -q replaced, were not removed -until CVS 1.6. - -* Writing patches (tactics) - -When you first distribute a patch it may be suitable to just put forth -a rough patch, or even just an idea. But before the end of the -process the following should exist: - - - ChangeLog entry (see the GNU coding standards for details). - - - Changes to the NEWS file and cvs.texinfo, if the change is a - user-visible change worth mentioning. - - - Somewhere, a description of what the patch fixes (often in - comments in the code, or maybe the ChangeLog or documentation). - - - Most of the time, a test case (see TESTS). It can be quite - frustrating to fix a bug only to see it reappear later, and adding - the case to the testsuite, where feasible, solves this and other - problems. See the TESTS file for notes on writing new tests. - -If you solve several unrelated problems, it is generally easier to -consider the desirability of the changes if there is a separate patch -for each issue. Use context diffs or unidiffs for patches. - -Include words like "I grant permission to distribute this patch under -the terms of the GNU Public License" with your patch. By sending a -patch to bug-cvs@nongnu.org, you implicitly grant this permission. - -Submitting a patch to bug-cvs is the way to reach the people who have -signed up to receive such submissions (including CVS developers), but -there may or may not be much (or any) response. If you want to pursue -the matter further, you are probably best off working with the larger -CVS community. Distribute your patch as widely as desired (mailing -lists, newsgroups, web sites, whatever). Write a web page or other -information describing what the patch is for. It is neither practical -nor desirable for all/most contributions to be distributed through the -"official" (whatever that means) mechanisms of CVS releases and CVS -developers. Now, the "official" mechanisms do try to incorporate -those patches which seem most suitable for widespread usage, together -with test cases and documentation. So if a patch becomes sufficiently -popular in the CVS community, it is likely that one of the CVS -developers will eventually try to do something with it. But dealing -with the CVS developers may be the last step of the process rather -than the first. - -* 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. - -* Mailing lists - -In addition to the mailing lists listed in the README file, developers should -take particular note of the following mailling lists: - - bug-cvs: This is the list which users are requested to send bug reports - to. General CVS development and design discussions also take place on - this list. - info-cvs: This list is intended for user questions, but general CVS - development and design discussions sometimes take place on this list. - cvs-cvs: The only messages sent to this list are sent - automatically, via the CVS `loginfo' mechanism, when someone - checks something in to the master CVS repository. - cvs-test-results: The only messages sent to this list are sent - automatically, daily, by a script which runs "make check" - and "make remotecheck" on the master CVS sources. - -To subscribe to any of these lists, send mail to <list>-request@nongnu.org -or visit http://savannah.nongnu.org/mail/?group=cvs and follow the instructions -for the list you wish to subscribe to. |