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 99.1. 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 99.1, March 1999. Compatibility with Previous Releases 1. If you are upgrading from 97.3 or earlier releases, please see the 98.2 compatibility information, below. 2. Unless stated otherwise you can intermix any release Perforce client with any release Perforce server, but any functionality new to 99.1 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 3. The 99.1 server will automatically upgrade 98.1 or 98.2 databases. Downgrading thereafter requires assistance from technical support. 4. Beginning with 98.2, remote depots will interoperate across releases. In 98.1 and before, remote depots will only operate with another server of the same release. HOWEVER REMOTE DEPOTS WILL NOT INTEROPERATE BETWEEN UNIX AND NT due to sort ordering differences. Big Database Support These platforms support big (>2GB) databases. See change 5713 below. FreeBSD Digital Unix SGI Irix Solaris 2.6 Windows/NT Bug fixes since 99.1/9814 #12183 ** Supposedly read-only values in new jobs, to be set by the Perforce server, were being set by p4win (the Windows GUI client) and accepted by the server. This could cause problems with date fields where the client and server are in different timezones. Now the server properly tells p4win that these fields are read-only and ignores the defaults that p4win generates, and instead uses its own defaults. In order for the server to tell p4win to grey-out read-only fields, the jobspec must be updated with 'p4 jobspec'. It doesn't have to be changed -- just resaved. (Bug #2674). #12175 ** With large views (>50,000 files), degenerate sort logic could cause 'p4 sync' and other commands to take a very long time to start. In general, a sync of 100,000 files should start within a minute of server CPU time. #12159 ** 'p4 filelog' would randomize the integration records for any particular revision. Now all the integration records for a single revision are sorted by the other file's name. #12103 * The BEOS p4 client now supports symlinks (as the UNIX p4 clients do). (Bug #2661). #12080 ** The handling of large client and branch views, especially those with many exclusion (-) mappings, has again been sped up. The earlier change (11260) affected the handling of large numbers of files (reducing time from minutes to seconds); this change affects the handling of small numbers of files (reducing time from sub-second to really sub-second). #11947 * 'p4 resolve -am' now skips baseless merges, as advertised in the help for 'p4 resolve'. Previously, it would accept all the changes from the source file, which was wrong. (Bug #2635). #11536 ** Checkpointing during heavy use could leave the saved journal files with garbage at the end (instead of real data). This has been corrected. #11533 ** ktext files that ended in a line with a $ but no newline would get mangled on checkout, with the last line disappearing. This has been corrected. (Bug #2314). #11531 ** 'p4 resolve' of a binary file leaked a file descriptor/handle on the server. On NT the server would eventually run out of available handles and refuse to operate. On UNIX the problem only surfaced during a 'p4 resolve' of many files. This has been corrected. (Bug #2557). #11339 * ** The '-ds' flag to 'p4 diff', 'p4 diff2', and 'p4 describe' now accurately reports the number of chunks/lines added and deleted. Previously, it only got the number of changed chunks/lines right. (Bug #2468). #11215, 11221 ** On VMS, referring to local files on a client with a directory-less root (only dev:) produced bogus file names with an extra [ after the dev: name. This has been corrected. Note: this is a server change. (Bug #2477). On VMS, using a relative path [-] would produce bogus file names with an extra ] before the file name. This has been corrected. (Bug #325). #11260 ** The performance of large views (client, label, branch) has been improved substantially, reducing the compute time on 'p4 sync', 'p4 labelsync', and 'p4 integrate' operations. #10983 * Passing '-i' options to the Mac client no longer causes the client to Beach Ball. Previously, using '-i' to pass data in to the Perforce client would hang MPW. (Bug #2162) #10769 ** You now only need 'list' access, not 'review', just to view a counter with the 'p4 counter' command. You still need 'review' access to delete or change the counter. #10760 ** Fix RCS keyword expansion to properly expand strings found after a non-matching string introduced by a dollar sign. e.g. $myvar = "$Id:$" (Bug#2214). #10655 The case-insensitive Perforce server on NT is now a little more sensitive: it detects case changes in user and file names when saving client/label/branch/user/protection specs. (Bug #2156). #10554 ** Certain mapping combinations would cause the Perforce server to ignore files. This happend with mappings that used only *'s and tried to rearrange subdirectories. E.g: //depot/foo/*.h //client/*.h //depot/*.c //client/*.c would ignore the files in the //depot/foo directory. This has been corrected. (Bug #2190). #10522 ** With certain exclusion mappings (those with -'s in front of them) it was possible to get different results depending on how much you limited the operation with file arguments on the command line. For example, with the client view: //depot/bar/... //client/foo/... -//depot/...cc //client/...cc Then a 'p4 sync' would give different results from 'p4 sync //client/foo/...'. This has been corrected. #10314 ** 'p4 change -f' now updates the timestamps on individual revision records, as well as that of the change itself. This is needed because as of 99.1 'p4 filelog' displays the revision's timestamp, not the changes. Without this change, 'p4 change -f' would not be able to influence the timestamp output of 'p4 filelog'. (Bug #839, #2110). #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). #10308 ** Remote depot access no longer consumes a license for the user "remote". If you have a "remote" user, you'll need to delete it to get the license back, but thereafter remote depot access won't recreate it. This fix is required on the server in the remote depot, rather than the local server accessing the remote depot. (Bug #2128). #10224 ** The IRIX64 p4d would corrupt the db.desc table if a description was longer than about 2K. This has been corrected. #10054 ** 'p4 resolve' of ktext files once again merges with the keywords unexpanded, so they don't produce conflicts. This is the way it worked in 98.2. (Bug #2066). #10048 ** 'p4 resolve -b' no longer attempts a 3-way merge when the binary files had no base. 'p4 resolve' no longer pretends to report the base type when there is no base. #10025 ** The prohibition on client/branch/label names containing the slash (/) character has been recalled, so as to help those poor, unfortunate souls who use conventions with slashes. Slashes are harmless enough in branch names, but continue to be a bad idea for client and label names, as the syntax @label will improperly include any files in any label/* labels. #10024 ** 'p4 diff2' on NT caused file handle leaks and could prevent subsequent submits from succeeding. This has been corrected. (Bug #1748). #9934 ** 'p4 submit' during the middle of a 'p4 verify -u' could cause duplicate head revision records for a single file, causing 'p4 sync' to try to update each such file twice. This has been corrected. (Bug #2028). #9933 ** 'p4 submit -c change file' caused the server to get confused about what was being submitted, resulting in a spurious "file got unlocked!" message. Now file arguments are prohibited if a change number is given. (Bug #1925). #9926 ** Triggers wouldn't run when the Perforce server was running as a Windows/NT service. This has been corrected. Major new functionlity in 99.1 PRESUBMIT TRIGGERS - #8594 ** Pre-submit triggers are now supported. These are commands run on the server after the change is created and the files are locked but prior to file transfers taking place, used to provide user-validation of the change being submitted. See 'p4 help triggers' or the manual for more information. LINE COMPRESSION - #8622 * ** The new client option 'compress' turns on compression of the client/server connection. Both client and server must be 99.1 for this to work. If either client or server are older, this option is silently ignored. Line compression's effectiveness depends on two factors: the nature of the data being transferred and the speed of the link balanced against the processor speed at each end. Because of the repetitive nature of Perforce file names (e.g. //depot/this/that/theotherthing/...), among other factors, compression yields a 10:1 gain on the basic protocol. If text or binary files are being transferred, the gain is roughly the same as compressing the files before submitting them into Perforce. Because compressing data takes CPU cycles, line compression is only effective if the processors can compress faster than the link can pass the data. As a rule of thumb, compression is best for WANs (wide area networks bridging remote locations) and not so good for LANs (local area networks, such as Ethernet). (Bug #1000). EDITABLE CHANGELISTS - #8744 ** 'p4 change' of a pending changelist now presents the jobs and files associated with the changelist, and allows you to add/delete those jobs and files. Only files from the default changelist can be added, and removing a file causes it to return to the default changelist. (Bug #14). 'p4 change' of a submitted changelist now presents the jobs, and allows you to add/delete jobs. Adding a job closes the job as with 'p4 fix'. FLEXIBLE FILETYPES - #7724 ** User-refinable filetypes are now supported: individual bits that control how a file is manipulated and stored can now be set when specifying the filetype during 'p4 add', 'edit', or 'reopen'. See 'p4 help filetypes' for more information. NEWLINE TRANSLATION SUPPRESSION - #7880 ** * The new client option 'nocrlf' suppresses newline translation on Macintosh and Windows clients. If this option is set, text files are read and written as binary files on the client, meaning that the newline is passed through untouched. Normally, newline is translated to carriage-return/newline on Windows and carriage-return on Macintosh. Note that the Perforce server uses newlines, not carriage-return/newline, in text files. This is true even with the server on Windows/NT. This option works with pre-99.1 client programs, but 'p4 diff' and 'p4 resolve' will not diff what they think are binary files, and they won't set the execute bit for xtext files. Upgrade to 99.1 clients for full support of 'nocrlf'. (Bug #333, #695, #940). P4 DIFF2 OVERHAUL Summary Line - #9151 ** The header line has been changed to include a (one word) summary indicating content or type mismatches. (Bug #1311). Comparing binary files - #9127 ** Diff2 now compares binary files and prints out the line "(... files differ...)" if they are not identical. (Bug #1607). Quiet flag - #8494 ** Diff2 now takes a '-q' flag to suppress all output for files known to be identical (because they are the same file or because they were branched). Also, 'p4 help diff2' now attempts to explain the output of diff2. (Bugs #693, #550.) Using a branch view - #8306 ** Diff2 can now take -b branch name to specify the pairs of files to be compared. If file arguments are also present, they can further limit the files and specify the revisions for comparison. (Bug #799.) BIG INSTALLATION ADMINISTRATION MaxResults avoids unwieldy operations - #8720 ** 'p4 group' now has a 'MaxResults' field, which can be used to limit the size of operations for users in that group. This enables large installations to prevent users from swamping the server with inadvertant, oversized requests (such as 'p4 files //depot/...'). By default, users have no limit on the size of operations they can perform. Once a user belongs to one or more groups with any limit, however, that user has the maximum of those groups' limits. This allows, for example, an administrator to create a "novice" group with a low limit, thereby affecting only certain users. See 'p4 help group' and 'p4 help maxresults' for further info. (Bug #1189). Access times for clients, branches, labels - #8276, #9648 ** Branches, clients, and labels now all have last access dates to facilitate finding and deleting old, unused ones. - For branches, the last access is the last time the branch was used with 'p4 integrate' or 'p4 diff2'. - For clients, it is the last time the client was used for any command that _required_ a client (many commands, such as 'p4 describe', 'p4 changes', etc. do not), or when the client was used as a revision specification (@client). - For labels, it is the last time the label was updated with 'p4 labelsync' or when the label was used as a revision specification (@label). (Bug #1236.) Archive validation - #8587 ** 'p4 verify' now can save the MD5 digest (fingerprint) of file revisions and later compare them to verify archive contents. This can be used, for example, to verify that the server's archive is consistent with the metadata after a restore from backup. The saved digests are also used by 'p4 diff' and 'p4 diff2' to avoid having to compute them for their normal operation. This can considerably lighten the server load if these commands are used frequently. See 'p4 help verify' for information. (Bug #861). Compressed checkpoints/journals - #8558 ** The server can now generate and read compressed (gzip) checkpoints and journals when the -z flag is used with -jc, -jd, or -jr. The live journal of database updates remains uncompressed. (Bug #61). Minor New Functionality in 99.1 #9627, #9754 ** 'p4 integrate' now supports a '-s from' flag, which specifies the source files of an integration when a branch view is used (normally only the target files are allowed). -s also tells it to use the union of the branch view and its reverse (with the target and source files exchanged). #9662 ** The 'p4 fstat' command, long present but undocumented, is now supported. See 'p4 help fstat' for info. The 'p4 -s' flag, also long present but undocumented, is now supported. See 'p4 help usage'. #9260 ** 'p4 jobs' now has a '-m max' flag, like 'p4 changes', to limit the output to the first 'max' jobs. #9240 ** 'p4 jobspec' has been altered to handle Readonly fields, Required fields, and Default values differently. Now a single 'field-type' flag on the field definition line determines how a field is set (automatically, or otherwise). See 'p4 help jobspec'. (Bug #1319, #1670). #9139, #9649 * ** 'p4 resolve' now takes a -b flag to force it to attempt a 3 way merge, even if the files are binary. It also makes the files editable/diffable in the resolve dialog. When resolving binary files, Perforce uses an 8-bit clean path. This option works with pre-99.1 client programs, but 'p4 resolve' will not or edit diff what it thinks are binary files. #8951 ** The 'p4 client' and 'p4 label' commands now allow you to use '-t template' for existing as well as new clients and labels. This copies a client or label's view from another client or label. #8878 * ** The new 'p4 passwd' command enables you to set the user's password without having it appear on the screen as editing the form for 'p4 user' does. On Windows clients, 'p4 passwd' also sets the password in the registry in the same way that 'p4 set P4PASSWD' does. #8803 ** You can now directly edit any (unlocked) client. Previously, the Perforce server wouldn't allow you to edit a client other than the current one, but that could easily be circumvented by saying "p4 -c xxx client". Now the more direct "p4 client xxx" works. To protect a client against inadvertant updates by other users, you can use the upgraded lock mechanism (see #7787). #8713 ** The new 'p4 counter' command allows users with 'review' access to set and delete counters directly. (Bug #812). #8557 ** 'p4 add' now allows you to re-add a file that has been deleted if your client has 'p4 sync'ed to something other than the (deleted) head rev. (Bug #459). #8556 ** File patterns in client, label, and branch views can now be quoted (") to allow embedded spaces. The quotes must surround the file pattern. Client roots must now be quoted if they contain spaces. (Bug #420, #429). #7848 ** The logging done by setting P4DEBUG to "server=1" now puts all info for each operation on a single line. #7787 ** Locking of clients is now possible, and locking of labels and clients has converged to mean: it can't be deleted, and its spec can't be updated except by the owner. As before, 'p4 labelsync' can't be used on locked labels. Now, no commands that affect a client can be used on a locked client, _except by the owner_. (Bugs #850, #962, #1043, #1144). The client option 'allwrite', present since 98.2, has now been documented in 'p4 help client'. This option leaves all client files writeable. Bugs Fixed in 99.1 #9650 ** 'p4 sync' and 'p4 integrate' now honor the client option 'noclobber' when attempting to delete a file: if the file is writeable, it won't be deleted. (Bug #1308). #9613 ** The performance of the Windows GUI could be undermined by certain protection table entries. Commands like 'p4 fstat //depot/*' would take an inordinate amount of time. This has been optimized. (Bug #1904). #9588 ** 'p4 refresh' refreshed all files, rather than just those on the command line. Fixed. (99.1 beta only. Bug #1910). #9551 ** 'p4 diff2' left temp files around on the server, eventually running it out of unique temp file names. Fixed. (99.1 beta only. Bug #1910). #9531 ** With certain overlapping client or branch views it was possible to get different results depending on how much you limited the operation with file arguments on the command line. For example, with the client view: //depot/... //client/... //depot/hdrs/... //client/h/... Any files that might be under //depot/h should be obscured, and a 'p4 sync' would not fetch them. But an explicit 'p4 sync //depot/h/...' _would_ fetch them, which was improper and confusing since a subsequent 'p4 sync' would then delete them again. The view handling has been corrected to ensure that if a part of the namespace is obscured in a view, it remains obscured even if referring directly to obscured files. (Bug #37). #9464 ** Checkpointing to a checkpoint file that was on an NFS mounted disk was very slow, as it locked the file for each write. Now it locks the file once, and is as fast as it was prior to 98.2/8352. #9441 ** Tempobj files created in previous releases couldn't be submitted because they were read-only. Fixed. (99.1 beta only.) #9416 ** 'p4 diff' against a file that was synced by integrate would diff against the wrong client file. Fixed. #9397 ** 'p4 changes -m max path' crashed the server. Fixed. (99.1 beta only. Bug #1878). #9346 * The 'modtime' option of 'p4 client' now works better on the Mac; previously, it didn't adjust for the difference between the UNIX/NT and Mac epochs (1970 vs 1904). Now its only shortcoming is that it does not adjust for timezone differences. (Bug #1804). #8851 ** A limit of 1024 characters has been imposed on all identifiers: branch, client, file, group, job, label, user, etc. Previously no limit was enforced and extremely long identifiers could cause problems in the underlying database. #8821 ** Using 'p4 integrate' to branch into a file already existing in the client workspace would issue the proper "can't clobber writeable file" message, but then act as if the file was branched. A subsequent 'p4 revert' would then wipe out the file. This has been corrected, and the file is only opened for integrate upon successful transfer of the file to the client workspace. (Bug #1488). #8800 ** Spaces are now consistently translated to _ in branch, client, depot, group, job, label, and user names. Elsewhere, spaces are specifically allowed. #8773 ** If you had multiple depots defined, it was then possible to enter a client, label, or branch view with something other than a valid depot name on the left hand side of the mapping. This could cause client files to map to no good place, with bizarre results. Now, only valid depot names are allowed. (Bug #1579). #8772 ** Another concurrency related Windows NT server crash has been fixed, similar to #8401. #8764 ** It is no longer possible to create branch/label/client/depot names that begin with a dash (-) or are purely numeric. The dash made it impossible to delete the entity (as the command line interpreter thought the name was flags) and purely numeric entities could be confused with change numbers when using the @label syntax to specify a revision. (Bug #624, #638, #1001). #8756 ** Branching a text file to ktext now works. Previously, if you branched a text file and reopened it as ktext, the server didn't do the keyword expansion for the first rev. Now it does. #8747 ** RCS keyword expansion has been tightened up to be more RCS-like: now only valid strings (currently $Id$, $Id:$, $Header$, and $Header:$) are intercepted. All other strings are passed through untouched. (Bug #277). #8700 ** Changes with associated fixes can no longer be deleted. (Bug #620). #8668 ** Merely running 'p4 job' no longer causes the job to be considered updated. Something on the form must actually change. (Bug #1127). #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. #8439 ** 'p4 add' no longer allows adding files that are specifically unmapped (by using an exclusion mapping in the client map). (Bugs #983, #1019, #1270.) #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. #8222 ** UNC (\\host\drive\path) paths on NT are now handled properly by the server. That is, the current drive letter (c:) is no longer automatically (and incorrectly) prepended to UNC paths. This is a server change. (Bug #565.) #8205 ** RCS keywords must be followed by : or $ to be expanded, so $Identifier (for example) no longer gets expanded. #8199 ** Mappings with null directories (//) are no longer allowed in client/label/branch views. (Bug #1331). #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 seemed to reach toolserver, and it would 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). #8188 ** Empty user names are now blocked at the server, so as to keep from corrupting the underlying RCS file format. #8142 ** Entries to db.depot weren't being logged in the journal. Now they are. #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 (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). #8014 ** Slashes (/) are no longer allowed in branch, client, label, or depot names. Previously they were allowed, but the semantics were questionable. #7857 * 'p4 resolve -v' no longer suggests editing (option [e]) if the result of the merge was changes to only one leg of the file. Editing is now only required if there were changes to both legs. As before, 'p4 resolve' (without -v) only requires editing if there were conflicting changes. (Bug #795). #7846 ** Removing a depot now requires that its files are first removed with 'p4 obliterate'. (Bug #890). #7845 ** The 'p4 integrate' command no longer produces illegal filenames due to mismatched /'s in branch views. If the branch view produces an illegal filename, the 'p4 integrate' is aborted. (Bug #874). #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 following 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). -------------------------------------------------------------------------- -------------------------------------------------------------------------- Release 98.2, July 1998. Changes between 97.3 and 98.1. 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'. 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.