Release Notes for Perforce The FAST Software Configuration Management System Introduction This document lists all user-visible changes to Perforce between Release 97.3 and 98.2. Note: 98.1 was a beta-only database release. Release notes for the GUI can now be found under "Supplement for GUI for Windows" on the Perforce Technical Documentation web page. A release is identified by two numbers: its major functionality release number (e.g. 97.1), indicating the year and release of that year, and its minor bugfix change level, which indicates any fixes made since the major release. For example, 97.1/2700 is a bugfix release of 97.1 that includes all changes up to 2700. Both "p4" and "p4d" will report their version information by passing the "-V" flag. Additionally, "p4" can report the server's information with the "p4 info" command. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Release 98.2, July 1998. Compatibility with Previous Releases 1. NEW DATABASE FORMAT WITH FLEXNAMES. The 98.1/98.2 database is not compatible with earlier databases. You must convert it using a 97.3 checkpoint (checkpoints from earlier releases will not be compatible): /path/to/97.3/p4d -r$P4ROOT -jc checkpoint.97.3 (remove the $P4ROOT/db.* files) /path/to/98.2/p4d -r$P4ROOT -jr checkpoint.97.3 The Windows/NT installer will perform this upgrade automatically for you if you do not do it yourself. See change #5312 for details on flexnames. 2. NEW JOBS SUPPORT. Jobs data (if any) must be upgraded after restarting with 98.2. To convert, issue the client command: p4 jobs -R You must have 'superuser' access, as granted by 'p4 protect' to use this flag. It is harmless to run this more than once. Note: the jobview field of the user form is not automatically converted. Users must replace their jobviews. The new jobviews that correspond to the old ones are: Old JobView New JobView ----------- ----------- all status=open mine user=username status=open replacing 'username' as appropriate. 3. You can mix 98.2 and earlier clients, GUI, and servers, but any functionality new to 98.2 requires you to upgrade the client and/or the server. See marks in the notes below. * -- requires new p4 client program ** -- requires new p4d server program 4. The new password support (see change #6323) requires 98.2 or newer clients and servers. You cannot set the password if the client program is earlier than 98.2, and once the password is set you cannot connect at all with old client programs. 5. You cannot mix a 98.2 server with a lower version server using remote depots. Further, remote depots between Unix and NT do not work correctly because of the different sort ordering. 6. $Id$ EXPANSION CHANGED. $Id$ in ktext files now expands with a space before the final $, like RCS. This makes current ktext files look different according to 'p4 diff -se', so users of that command should refresh their ktext files with 'p4 sync -f'. Big Database Support These platforms support big (>2GB) databases. See change 5713 below. Digital Unix #5713 SGI Irix #5713 Solaris 2.6 #7488 Windows/NT #8127 Bug fixes since 98.2/6625 #19482 ** Rare db state could crash p4d for some operations. This change allows p4d to continue operations. #10335 ** Remote depot access by users with "complicated" protections could crash the server. "complicated" here means multiple lines in the protection table granting access to the same remote depot for a given user. (Bug #2136). #10311 ** 'p4 obliterate' of a file that has been branched out into a file which itself has been branched out could leave the target files with dangling references to the original file's text. This change fixes the obliterate problem, but not any past damage it has done. You'll know you have this problem if you are trying to access files and you see the error: Operation: user-sync Librarian checkout PATH failed. Where "PATH" is the path of a previously obliterated file. If you have such errors, contact technical support (info@perforce.com) for help recovering the files. (Bug #2085). #8772 ** Another concurrency related Windows NT server crash has been fixed, similar to #8401. #8525 ** The 98.2 GUI required at least 'list' level access (granted via 'p4 protect) on all depots for them to show up in the depot explorer window. Now it only requires 'list' level access to the files within the directories to show the directories. (Bug #1191.) #8468 ** Certain combinations of wildcards on the command line coupled with certain combinations of wildcards in the client view could cause the server to generate bogus answers or crash. This has been corrected. (Bug #1071, #1440.) #8465 ** The NT server now runs under NT5.0 beta 2. #8414 ** So as to provide relief to installations with less-than-perfect name services, the 'p4 info' command issued by the Windows GUI no longer causes the server to attempt to look up its own FQDN (fully qualified domain name). Instead, the server now just quickly returns the server's IP address. (Bug #1462). #8401 ** Under certain concurreny conditions on Windows NT, the Perforce server could crash. This has been corrected. #8352, 8186 ** Journal files were getting scrambled on OSF (Digital UNIX) against NFS mounted filesystems and on NT systems with multiple processors, due to write collisions. Journal writes are now protected by the same file locking which protects the database files, which should ensure serialized updates on all platforms against all filesystems. Change 8186 addressed OSF. Change 8352 addresses all other platforms. #8190 * The Mac client now works a little better with Toolserver. As before, if there is an error editing a spec (say from 'p4 client'), the p4 client command attempts to wait for the user to enter a line before continuing. Previously, it waited for a keydown event, which never seem to reach toolserver, and it would to hang; now it attempts to read a line from stdin, where it immediately finds an EOF and continues. One consequence of this change is that from MPW you must now hit 'Enter' rather than 'Return' to continue after such an error. (Bug #946). #8102 Temp file names on OS/2 are now kept short by limiting the unique identifier to 3 digits. This makes the file names adhere to the 8.3 file name limit. (Bug #1276). #8061 If a file was changed from binary to text during a branch (i.e. integrate creates the new file, which is then reopened as text), and that file was used as the source for further integrations, 'p4 resolve' used the head type type (text) when fetching the base for merging. It now uses the base's type (binary). (Bug #1264). #8018 ** The p4d server now suppresses the Windows GUI from listing directories with only delete files in them. Requires new GUI as well. (Bug #1145). #7811 * The Macintosh client has been sped up considerably: I/O buffers are enlarged, network traffic is reduced, and output to the MPW shell is now block buffered instead of line buffered. #7652 ** Sometimes p4d servers couldn't access files in remote depots: the files just appeared not to be there. This has been corrected. (Bug #1153). #7612 ** Referring to a small subset of files against a large label (e.g. p4 sync somefiles...@biglabel) could get staggeringly slow. This operation now runs fast, as it did prior to 98.2. #7488 ** Checking out binary files from the NT server caused the server to bloat due to a memory leak. This has been corrected. #7488 ** The follow interoperability bugs with the 97.3 GUI against the 98.2 server have been fixed: The GUI was unable to create or edit labels. (Bug #1072). The GUI was unable to associate jobs with pending changes. (Bug #1076). The 97.3 GUI still cannot modify the user's jobview: it can only set it to the now unusable values "all" or "mine". To edit the jobview, you must invoke 'p4 user' from the command line. The equivalent of 'all' is now 'status=open'; the equivalent of 'mine' is now 'status=open user=_username_' (replacing _username_ with your user name). #7452 ** The rcstoperf conversion script would crash if any RCS files contained symbols that began with a digit. The server (which is used to process the RCS files) has been fixed to understand symbols beginning with a digit. #7363 * 'p4 print -q' of a binary file on Windows/NT was treating the last buffer output as text; now it properly outputs the whole file as binary (without CR/LF translation). (Bug #1092). #7242 ** The NT server got confused when integrating filenames whose case had changed between being deleted and re-added. This has been corrected. #7006 * ** The AIX4.1 executables now run on 4.1 again, rather than just 4.2. #6944 * Resolving the data fork of files on a mac would zero the resource fork; similarly, resolving the resource fork would zero the data fork. This has been corrected. (Bugs #926, #1012). #6921 ** Contrary to the 'p4 protect' documentation, a protection access level could not be downgraded by removing 'list' access for a set of files and then granting the new level for those files: if a new level was granted, it would ignore the fact that the old level was removed. Now the behavior matches the documentation, and it is possible to downgrade an access level as in this example: write user * * //... list user * * -//depot/read-only/... read user * * //depot/read-only/... This allows read/write access to the whole depot, except the //depot/read-only tree, which is read-only. #6905 ** Attempting to check empty binary files in generated errors from the zlib compression module on Irix and other systems. This has been fixed. (Bug #957). #6899 ** On IRIX, the 'p4 fixes' and 'p4 describe' commands wouldn't report job fixes that were associated with changes. This has been fixed. (Bug #969). On Solaris, 'p4 submit' would not close jobs attached to the change being submitted. This has been fixed. (Bug #993). #6679 * A blank line (or any line missing an ='s) in a P4CONFIG file crashed the client. This has been fixed. (Bug #996). Major new functionlity in 98.2 NEW JOBS FUNCTIONALITY - #6542 ** Jobs have been upgraded. Two major shortcomings have been rectified: lack of configurability and lack of searching. 1. Jobs may now contain user defined fields, rather than a fixed set of fields. This is controlled by the jobspec, which is set by the superuser. The default jobspec is compatible with 97.3 jobs. See 'p4 help jobspec' for redefining the jobspec. 2. Jobs now support a fast searching mechanism. As jobs are entered or updated, text and dates are indexed. The index can be searched by passing the 'p4 jobs' command a search expression with the new '-e jobview' flag. The jobview field in 'p4 user' is likewise now a search expression. See 'p4 help jobs', 'p4 help jobview', 'p4 help user' for more information. EASE OF USE P4CONFIG Names Client Config File - #5955 * The new variable P4CONFIG names a file containing variable settings for the client. If the file can't be found in the current directory, then parent directories are searched for the file. Each variable setting is alone on a line and of the form: P4VAR=value. The variables that can be set for the client are currently: P4CLIENT P4DIFF P4EDITOR P4MERGE P4PASSWD P4PORT P4USER (Bug #349, #773). New Revision Specification @date - #5628 ** Wherever revision specifications are supported, @date and "@datetime" can now be used in addition to @change and @label. The format for date is YYYY/MM/DD, and the format for datetime is YYYY/MM/DD:HH:MM:SS. If no time is given, midnight is assumed. Syncing Specific Revisions - #5808 ** 'p4 sync', 'p4 files', and 'p4 print' now allow their file specifications to include a revision range, which limits their operation to files affected within that range. Previously, only the top revision could be specified, and all files as of that revision were considered. This makes it possible to take a single change ('p4 sync @n,n') or to display the files affected between two labels ('p4 files @lab1,lab2'). PROTECTIONS/GROUP User Authentication - #6323 * ** Simple user authentication is now supported. Each user may have an optional password set via 'p4 user'. The password is provided by the client either by setting the new $P4PASSWD variable or by using p4's new '-P passwd' flag. To make use of passwords, both the client and server must be 98.2 or later. If an older client attempts to connect to the server and the user has a password, the server will reject the connection. SETTING THE PASSWORD WITH 'P4 USER' WILL TRANSMIT THE PASSWORD IN THE CLEAR, AND SHOULD BE DONE LOCALLY ON THE SERVER MACHINE OR OVER NETWORKS THAT ARE TRUSTED. The authentication protocol itself does not transmit the password. Protection Groups - #6355 ** User groups are now supported for use with the 'p4 protect' command. Groups are created, updated, and displayed with the new 'p4 group' and 'p4 groups' command. Lines in the protection table managed by 'p4 protect' now have an indicator as to whether they apply to individual users or to a group. (Bug #637). Unauthorized Access Doesn't Use a License - #6427 ** Entries in the user table are now created only after the access level check completes, so that if a user does not have access to the server, then he will not accidentally consume a user license. Protection Levels Make More Sense - #6484, #6471, #5310 ** Non-superusers can now use the depot/group/jobspec commands with the -o flag, as that makes them display only commands. A superuser (a user with 'super' access granted by 'p4 protect') can now create a new user with 'p4 user -f username'. If a user has 'list' but not 'read' access to a file (as granted by 'p4 protect') and attempts to 'p4 sync' the file, the file will now be deleted. Previously, it just pretended the client didn't have the file (and did nothing to it). This allows for part of the depot to be made obsolescent by granting only list access. New "Force" Flags Empower Superusers - #5511 ** The 'branch', 'client', 'label', 'job', and 'user' commands all now take a -f flag to force actions: deleting entities not owned by the current user and setting the modified date of entities. The -f flag requires superuser access. Directly Invoking p4d - #2884 * ** UNIX ONLY. The p4 client program can now directly invoke the p4d server program by setting P4PORT to "rsh:p4d -ir _root_". The "rsh:" instructs the client to run the program following the :, and the -i flag makes p4d run once with its stdin/stdout as the communications pipe. By setting P4PORT to "rsh:rsh host cmd" it is possible to invoke a server on a remote machine, if "cmd" is either the invocation of p4d or a wrapper script which does as much. DATABASE UPGRADES New database format with flexnames - #5312 ** All identifiers may now be of arbitrary lengths. Previously, identifiers were limited to lengths of 32 (user names), 64 (client/label/branch/job names), or 128 (file name) bytes. Because the data is now manipulated using the actual size of the data, rather than the maximum size, the disk and memory usage for the Perforce server has shrunk considerably. Databases are typically 1/3 to 1/2 of their former size, and memory use is commensurately smaller. Because much less data is moved around, the server Performs much better, especially on large queries which previously caused the server to page. Big Databases for SGI Irix - #5713 ** The p4d server now supports database files in excess of 2GB on SGI Irix. Typically, it is the db.have ("have" and label lists) that grows the most, and on large installations these database files have approached the 2GB limit. Now the internal limit for database files is 8TB (8000 GB) for SGI Irix. Upwardly Compatible Checkpoints/Journals - #5313 ** Checkpoint and journal files now have a version number on each line that indicates the format of the line. This will allow checkpoints from previous releases and journals made from multiple releases to be handled properly. Previously, a server could read checkpoints and journals only from the same release level. Most database upgrades are handled by compatibility code for the binary database itself. In some cases, however, it will be necessary to checkpoint and restore in order to upgrade releases. In those cases the compatibility of checkpoints (and journals) will come into play. LIBRARIAN Lazy Copy on Resolve - #5320 ** 'p4 resolve' 'accept theirs' now gets the text of the new revision of the file by doing a lazy copy from the integrated file, rather than taking the text from the client. When using 'p4 integrate' to copy one set of files on top of another, the lazy copy can save space. Compressed File Types - #6120 ** Compressed file types are now supported for text and binary files. The existing binary, xbinary, and resource types have become compressed types, with the old uncompressed types being renamed to ubinary, uxbinary, and uresource. There is also a new ctext and cxtext for storing compressed text. Compressed types are stored in gzip format on the server, but otherwise behave like regular text and binary files on the client. New "Temporary Object" File Types - #6113 ** Two new file types are now supported: tempobj and xtempobj. Both are binary files that are always left writable on the client and only have the head revision stored in the server. xtempobj also has the execute permission set on the client. $Id$ Now Expands More Like RCS - #6042 ** $Id$ in ktext and kxtext files are now expanded with a space before the final $, so as to be compatible with RCS and its "ident" program. This makes current ktext files look different according to 'p4 diff -se', so users of that command should refresh their ktext files with 'p4 sync -f'. (Bug #819). $Header$ Mimics $Id$ - #5608 ** The keyword $Header$ is now supported for ktext type files. It expands the same as $Id$. Minor New Functionality in 98.2 #6559 ** The p4d server process id is now logged in the error log along with the date, client, command, etc when command logging is turned on. Turn command logging on by setting P4DEBUG to "server=1". #6360 ** 'p4 opened' now sports a '-c changelist#' to restrict output to the given changelist number. #6021 ** 'p4 where' now also outputs the local name of the mapped file. This is in addition to displaying the name in both depot and client form in Perforce syntax. (Bug #833). #5381 ** 'p4 filelog' now includes the filetype at each rev. (Bug #709). #5369 ** All ASCII forms are now more tolerant of indenting. Except for text blocks (where the indent is exactly the first white space), values in the forms may be arbitrarily indented, as long as they are indented at all. This makes 'p4 submit' more immune to accidental alterations to the 'Files:' list. 'p4 submit' now has a kinder, gentler message when a file appears in the list that wasn't part of the default changelist. (Bug #694). Bugs Fixed in 98.2 #6108 ** Spurious carriage return characters (CRs in addition to the CRLF at the end of each line) in a text file stored in an NT server depot could cause older revisions of the file to be corrupted. Files with extra CRs usually come about from "windows aware" UNIX text editors or from manually moving text files between UNIX and NT without handling the CRLF translation properly. (Bug #864). #6039 ** Date conversion wasn't taking into account daylights savings time. Now it does. Only 'p4 change -f' did date conversion prior to 98.2. (Bug #852). #5988 * ^C while in the editor launched by p4 client, etc. is now ignored properly. (Bug #789). #5828 ** When expanding database tables hit an out-of-disk condition, the resulting failure was being handled poorly, and sometimes the table was left in a corrupted state. The symptoms of this corruption were either missing rows or, worse, a loop in the btree structure. The latter caused the server to loop, consuming memory, on certain queries and made it impossible to checkpoint, because the checkpoint would never end. This usually happened with the db.have table, as it is the table that typically grows the largest the fastest. Now disk-full conditions are detected earlier, so that the database tables can maintain their consistency better. #5822 * ** The diff logic used by the Perforce client and server (for 'p4 diff', 'p4 diff2', 'p4 describe', and 'p4 resolve') has been adjusted to produce more compact diffs, similar to GNU diff. #5514 * 'p4 resolve -at', and other commands that were supposed to deposit read/write files on the client, were leaving the files read-only on NT. This has been corrected. (Bug #736). #5453 ** In certain cases (with ambiguous client mappings), it was possible to get the same depot file opened twice for branch. This confused the server when it came time to submit or revert, because it only expects the file to be opened at most once. This has been corrected. (Bug #731). #5437 ** 'p4 diff2' and 'p4 integ' would sometimes not see files or pair them properly if protections were being used. This has been corrected. (Bug #549). #5367 ** 'p4 labelsync' of a single file with a revision # would delete the file from the label, rather than replacing it. This has been fixed. (Bug #685). #5317 ** Ending a parameter with a "%" (such as 'p4 have foo%') would yield bogus error messages (at best) and server crashes (at worst). The error message handling has been fixed. (Bug #625). #5315 ** "Keepalives" are now turned on by the server so that it discovers workstations that shut down with live Perforce connections. Without these, if a workstation was powered down (or pulled from the network) while the 'p4' client program was running, the server would just leave the connection in permanent limbo. (Bugs #151, #465). #5309 * ** 'p4 print' of a binary file now actually writes it as binary to standard output on NT. Previously, it would leave stdout in text mode, even if it was a binary file. Now it switches stdout to reflect the type of the file. (Bug #644). #5204 ** Integrate of an already opened file mentioned a bogus revision number. Now it reports the right revision. (Bug #645). #5133 ** The p4d server will now fail to start (logging an error message) if the license file is present but invalid. Previously, the server would start but operate in unlicensed mode (2 users, 2 clients). Rather than being a convenience, that made finding licensing problems harder, so now the server just fails to start if the license is bad. #4961 ** Paths with null directories (//) were no longer allowed in 97.3, but if files with such names came from an upgrade from 97.2, it was not possible to manipulate (or obliterate) them. Now existing files with // in them can be accessed, but new ones cannot be added. #4943 ** On SMP NT machines, a race condition could lead to a server crash under heavy load. This has been fixed, and support for SMP NT machines has been reenabled #4887 ** 'p4 lock' and 'p4 unlock' of a file not opened at the head rev were making it look as if the file was opened at the head rev. This meant files could be submitted without resolving the changes from the head rev. This has been fixed. (Bug #569). #4871 * The NT clients were stripping anything after the first "." in a client name set with P4CLIENT. This has been fixed. If the client name is taken from the hostname it is still truncated after the first ".". This now reflects the 97.2 behavior. (Bug #562). #4847 ** Under certain circumstances, it was possible to replace a label, client, or branch description with a description with the same name but a different type (i.e. a label replaced with a client). This could cause a certain amount of havoc if a client was replaced by a branch, because the client's "have" list would suddenly become inaccessible. This has been fixed. (Bug #547). #4844 ** 'p4d -jc' now again takes an argument (where to put the checkpoint file). This was removed in a misguided change from 97.2. GUI BUGS FIXED IN 98.2 Release notes for the GUI can now be found under "Supplement for GUI for Windows" on the Perforce Technical Documentation web page.