New features of SCCS-5.06: With the upcoming SCCS-6.0 we introduce a new SCCS history file format that intentionally causes historic SCCS implementations to abort (to prevent file corruption) but that can be easily converted back into a SCCS-5.x compliant history file using a conversion program. This conversion does not cause a loss of information as the new information is encoded as special comment that is accepted by all other SCCS implementations except for the current version of GNU "CSSC". Since SCCS-5.04, the first (partial) support for the upcoming SCCS v6 history format has been introduced. See the file TODO_V6 for more information. Please join the discussion mainling list for the development of enhancements on: http://lists.berlios.de/mailman/listinfo/sccs-devel sccs-devel@lists.berlios.de The next task for SCCS is to introduce a changeset file that brackets a group of single file changes into a change set related to a commit. New features included with SCCS-5.06: This new version of SCCS implements new fundamental basic features and meta data that is needed in order to implement changesets. The new SCCS v6 specific metadata tags "urandom" and "path" allow futute SCCS versions to deal with renames and with removing of files. To check the new feature: - create a .sccs directory in the project set home directory. - In a directory below call admin -V6 s.xx - Check the content for s.xx Note that the current version of SCCS does not yet implement changesets, but we are close to that goal. - A POSIX compliance bug that also caused a deviation from all known SCCS documentation ever published for prs(1) has been fixed: prs -d:DI: s.file Now prints again "//" in the standard case. The related bug most likely has been introduced by AT&T around 1984 by replacing: printf("%s",iline); putchar('/'); printf("%s",xline); putchar('/'); printf("%s",gline); with: printf("%s",iline); if (length(xline)) printf("/%s",xline); if (length(gline)) printf("/%s",gline); The related bug has been discussed in the POSIX standard committee and the decision was to require the documented old behavior. - The automated testing scripts related to the bug mentioned above have been fixed to require/accept the correct POSIX compliant behavior. Note that SCCS fom Sun/Orcale as found on Solaris as well as GNU CSSC will no longer pass the tests. - The SCCS delta command now correctly locks the s.file _before_ opening it and thus prevents that the s.file may be replaced in a way that results in a possible lost delta. - A previous limitation in SCCS val(1) to max. 50 files per command line has been removed. - A previous limitation in SCCS vc(1) to a length of max 9 characters for keywords has been removed. - A previous limitation in SCCS vc(1) to max 40 keywords has been removed. - A previous limitation in SCCS vc(1) to a line length of max 1024 characters has been removed. - The central library function auxf() that computes derived file names from a s.filename has been rewritten to become safe against buffer overflows. - The handling of programmer names in the delta table has been made safe against buffer overflows. - The SCCS help text for error "co2" now also mentions the SCCS v6 file header - The SCCS default help no longer gives a complete "sccs" subcommand list but a subcommand overview. - The SCCS sccsfile man page now mentions the undocumented "z" flag in the s.file. - The SCCS sccsfile man page now mentions the new global metadata for path and urand - The libraries comobj/cassi/mpwlib have been restructured to allow shared libaries on Mac OS X with it's limited dynamic linker. - In future, these libraries will be pooled to a single "libsccs" in order to work around the problems from the Mac OS dynamic linker that is unable to support full C semantics and thus does not support to link a library against calling entities. - Shared variable definitions have been moved from the programs to the libs as the Mac OS dynamic linker is unable to link program variable to be usable from a dynamic library. - s. file specific shared variables have been moved to struct packet whereever possible. - s. file specific shared variables have been moved into struct packet to make the library reentrant. - The global "clean up" callback function for fatal() that is used with global context is installed via set_clean_up(function). - Callback functions that are used with s. file specific context are now function pointers in struct packet. The pooling of libcomobj, libcassi and libmpw to a new library "libsccs" will be delayed to the time when the library interface is stable enough for SCCS v6. After that time, libsccs can be made a dynamic library. The Mac OS X static linker is too silly to link in .o files from static libs if only a variable is referenced. The elegant workaround for this bug (using common variables) triggers a different bug in the dynamic linker from Mac OS that is unable to link common variables. This forces us to introduce funcs that need to be called from central places to enforce to link in the vars. - The function libcassi::error() was renamed to cmrerror() in order to avoid a name conflict with the older error() function from libschily. - The function mpwlib::abspath() was renamed to "fixpath()" as it does not create an absolute path name but only a path that avoids "/./" and "/..". - New functions libcassi::urandom() and libcassi::sethome() to allow to deal with renaming files in SCCS based projects. - For operating systems with no mem*() functions, these functions are now mapped to *bytes() functions from libschily. - libschily::gettimeofday() now maps to time() in case that there is neither a system gettimeofday() nor GetSystemTimeAsFileTime() - libschily now includes an emulation for openat(). - libschilly added new functions getaline() and fgetaline(). These functions do the same as the illegal POSIX.1-2008 function getline() that is in conflict with the getline() function that is in libschily since 1982. - include/schily/fcntl.h now includes O_SEARCH for POSIX.1-2008 compliance. SCCS-5.06 is 2.5x faster than Sun SCCS and consumes 4.7x less CPU time than Sun SCCS. SCCS-5.06 is 6x faster than RCS-5.8 and consumes 7x less CPU time than RCS-5.8. For RCS files > 256 kB, add factor of 2x to CPU times when you use RCS-5.8. SCCS now has been tested to compile and work on the following platforms: - SunOS-4.x - SunOS-5.x (Solaris 2.x, 7, 8, 9, 10, 11) - FreeBSD - HP-UX - Linux - Mac OS X - AIX - IRIX - VMS - Cygwin The portability now reached a state that should allow SCCS to compile and run on other platforms too. SCCS compiles and has been verified on all major platforms.