Release Notes for P4, the Perforce Command-Line Client, and P4D, the Perforce Server Version 2009.2 Introduction This document lists all user-visible changes to the Perforce server (P4D) and command line client (P4) between Release 97.3 and 2009.1. Release notes for P4Merge, P4SCC, P4V, P4Web, P4Win, and P4WinMerge, as well as supplemental Platform Notes and notes on Internationalization, are available separately on the Perforce Documentation web page. Perforce numbers releases YYYY.R/CCCCC, e.g. 2002.1/30547. YYYY is the year; R is the release of that year; CCCCC is the bugfix change level. Each bugfix in these release notes is marked by its change number. Any build includes (1) all bugfixes of all previous releases and (2) all bugfixes of the current release up to the bugfix change level. 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. -------------------------------------------------------------------------- Upgrading the Server DOWNGRADING A 2009.2 SERVER IS NOT POSSIBLE Significant schema upgrades are performed by the 'p4d -xu' command. The 'p4d -xu' command is generally required when upgrading a server with 1000 or more changelists. If a server has fewer than 1000 changelists, it is automatically upgraded when the new server is started. Before Upgrading To upgrade your Perforce server, your Perforce license file must be current. Expired licenses do not work with upgraded servers. In addition to your usual checkpointing scheme, always checkpoint your server immediately before undertaking an upgrade. To ensure that the checkpoint contains the latest information prior to the upgrade, stop the Perforce server and use the 'p4d -r -J -jc' command to make the checkpoint. Significant schema upgrades performed by the 'p4d -xu' command can consume a significant amount of disk space. You will need to ensure that you have in the filesystem where the db.* files are located free space equal to the size of the tables being upgraded, and twice that amount in the filesystem where the journal is located. The significant schema upgrades in each release are: 2009.2: db.boddate/db.ixdate moved to db.bodtext/db.ixtext 2008.1: db.change 2007.3: db.archmap (re)build db.archive replacement table 2007.3: db.view (re)build haveMap entries 2005.2: db.revsx (dedicated table for 'spec' depot entries) 2005.2: db.revdx (new table) 2005.1: db.locks, db.revhx (new table) 2003.2: db.user 2003.1: db.depot 2002.2: db.rev, db.working (tempobj entries only) 2002.1: db.change 2001.1: db.integ, db.have The schema upgrades are cumulative through releases. For example, if you are upgrading a 2003.2 server to 2009.2, the db.locks, db.view, db.change and the new tables db.revhx, db.revdx, db.revsx and db.archmap will all be upgraded/created by the 'p4d -xu' command. If you are upgrading from 97.3 or earlier releases, please see the upgrade note at the end of this file. Upgrading Unix Platforms If your server has fewer than 1000 changelists or there are no significant schema upgrades required for your upgrade, simply replace your p4d binary with the new p4d and restart your server with your site's usual parameters. The server automatically upgrades its schema. If your server has 1000 or more changelists and there are significant schema upgrades required for your upgrade: 1. Replace your p4d binary with the 2009.2 p4d. 2. Issue the 'p4d -r -J -xu' command. This command performs the significant schema upgrades, then exits. 3. Restart your server with your site's usual parameters. Windows Platforms If your server has fewer than 1000 changelists or there are no significant schema upgrades required for your upgrade, simply run the new perforce.exe installer, which will restart your Perforce server service. The server automatically upgrades its schema. If your server has 1000 or more changelists and there are significant schema upgrades required for your upgrade: 1. Run the 2009.2 perforce.exe installer. The installer replaces the p4d.exe and p4s.exe executables, but will be unable to restart the Perforce server service since there are significant schema upgrades required. 2. Issue the 'p4d -r -J -xu' command from a command prompt window. This command performs the significant schema upgrades, then exits. 3. Restart your Perforce server service. After Upgrading After upgrading to 2009.2 taking a checkpoint and restoring from it is recommended to enable checksum data verification support and recover any disk space lost to bug 30304. 2002.1 jobs searching supports matching punctuation, but old jobs must be reindexed with the 'p4 jobs -R' command before punctuation in those jobs will be found. (See change 27808). -------------------------------------------------------------------------- Interoperating With Previous Releases 1. Unless stated otherwise you can intermix any release Perforce client with any release Perforce server, but any functionality new to 2009.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 *** -- requires new p4p proxy program 2. Beginning with 99.2, remote depots will interoperate between UNIX and NT. Beginning with 98.2, remote depots will interoperate across (98.2 and higher) releases. In 98.1 and before, remote depots will only operate with another server of the same release. 3. As of 2005.1, remote depot support for 98.2 and 99.1 servers has been dropped. Attempts by 98.2 and 99.1 servers to contact 2005.1 servers still works, but the depots will appear devoid of files. -------------------------------------------------------------------------- Major new functionality in 2009.2 #215740 * ** This release brings together two commands which provide core infrastructure required for replication. These commands are administrative only and should not be used without reading and understanding the available documentation. 'p4 export' (first introduced in 2009.1) is now a fully supported command for extracting checkpoint and journal meta-data out of a Perforce repository. See 'p4 help export' for more information. 'p4 replicate' is a new command built into the command line client that polls for new journal entries from a server and allows them to be played into a replicating repository. See 'p4 help replicate' for more information. Please see the Perforce System Administrator's Guide for more details on replication functionality and usage. #208746 (Bug #15043) ** Two new commands, 'p4 shelve' and 'p4 unshelve', enable developers to store and retrieve files on the Perforce server without submitting them. These commands make multi-tasking, code sharing, testing and review much easier and more practical. Users gain access to shelved files and their content through the following commands: 'p4 describe -S change#' displays files that are shelved for the specified change (along with any diffs). 'p4 changes -s shelved' limits the output of the command to only thoses changes that have shelved files. 'p4 fstat -e change# -Rs' displays file information for those files shelved at the specified change. 'p4 diff/diff2/files/print' have access to shelved files through the '@=change' revision specification, where 'change' is the pending changelist number. See 'p4 help shelve/unshelve' for more information. Minor new functionality in 2009.2 #220795 ** 'p4 dbschema' (first introduced in 2009.1) is now a fully supported command that reports database schema information. See 'p4 help dbschema' for more information. #216422 ** The variable %changeroot% is now available to change-commit triggers, its value being the root path of submitted files. #215113 (Bug #34319) ** The access time updates on users and domains/clients are now tunable. #214910 (Bug #35399) * A password specified on the command line might be visible in a list of processes (ps). To reduce this possibility, add logic to obscure memory. #214697 (Bug #35363) ** Deleting a user with 'p4 user -d' now checks for open files in a separate transaction. This approach improves concurrency by reducing lock duration for the other tables. #213147 (Bug #35353, #35354) ** 'p4 filelog' has two new flags. The '-s' flag returns a shortened form of output. The '-c changelist#' flag restricts output to files submitted at the given changelist. See 'p4 help filelog' for details. #209861 * P4PORT=rsh: can now handle quoting of spaces on UNIX. Use double quotes. For example, the P4CONFIG file can contain: P4PORT=rsh:p4d -r "root directory" and "root directory" is recognized as a single argument (without the quotes). A " can be specified by using "". Note that, on Windows, the whole string (after the rsh:) is passed to cmd.exe for handling, and must obey cmd.exe's quoting rules. #205590 (Bug #33826) ** 'p4 edit' and 'p4 move' now accept a '-k' flag, which updates the server so that it appears that a client workspace already has the file(s) requested. Using this flag prevents files from being synced to the client workspace. #205204 ** 'p4 change' now permits the owner of a pending changelist to modify the User field of a pending changelist, if the changelist is empty. #203942 (Bug #32494) ** The client/server network connection handling has been adjusted to prevent it from hanging. The server logic has been changed so that it complements TCP's send/receive buffers with buffers of its own and uses polling to buffer what TCP won't. With this change, the server's "himark limit" can be set arbitrarily high. #203415 (Bug #34227) ** Modify the fstat filter option to support wildcard comparisons for text fields. #201671 ** Two database tables, db.boddate and db.ixdate, have been combined into two other tables, db.bodtext and db.ixtext, to improve access times for jobs. #199579 ** New data type for jobspec fields: bulk. 'bulk' is like 'text' but the field contents are not indexed for searching by 'p4 jobs -e'. #199599 ** Updates of the last access time for a client/label/user now happens only when those tables are free to be updated. If no update has happened for over an hour, the update is forced (the command waits for the lock). Bugs fixed in 2009.2 #301893 (Bug #44375) ** Changes to the locking algorithm for SOLARIS10 could result in a server hang when multiple p4d processes were chasing the same file locks. #273251 (Bug #41819) ** 'p4 describe' could spend a long time scanning the 'db.integed' table before giving up with the error 'Can't find successor rev'. This was due to bug #37058 which is also fixed in this release. #272600 (Bug #37058, #34494) ** A 'copy' resolve will no longer override an earlier 'moved' and change it to an 'ignored'. This should prevent a subsequent 'describe' of that change from producing a 'can't find successor rev!' error. #260664 (Bug #40045) ** 'p4 describe -s' was taking an unnecessary shared lock out on the db.integed table. #258916 (Bug #40089) ** The p4d server on SOLARIS10 suffers from poor concurrency due to changes in the way that the file locking system call fcntl() has been changed. Unlike other platforms, SOLARIS does not allow shared access to files if an exclusive lock is waiting. This change fixes the problem by using region level locks for each reader and should provide improved concurrency. #255952 (Bug #39742) ** A performance change has been made to reduce the number of times that the db.monitor table is read when monitoring is in effect. #249870 (Bug #36927) ** Submission of a changelist in which one or more modified files failed to be transferred to the server could improperly complete (rather than being aborted) if an unchanged file in the same changelist was reverted or excluded due to the use of the revertunchanged or leaveunchanged client submitoptions. #247496 (Bug #39061) ** 'p4 unshelve' could fail to unshelve moved files if the files were mapped differently on the user's client workspace than the shelver's client workspace. This has been fixed. #245854 (Bug #038771) ** In rare cases traversing a large db.archmap table may cause a stack overflow. This problem has been corrected. #244299 (Bug #038062) ** The Server's Smart Heap memory manager retained free memory in an internal heap free list. Capped the level of free list memory retention to 4 Gbytes. (Windows x64, Linux 2.6) #244254 (Bug #37717 ) ** 'p4 change -f -s' would fail to allow a super user to change the user of an empty pending change if there were opened files in the client's default change. This has been fixed. #241894 (Bug #38580) ** A jobview filter that specified date-field > date-value would incorrectly return jobs where the date-field was exactly equal to the date-value (that is, the > was processed as >=). This has been fixed. #240512 (Bug #19844) ** This change delays a reverse DNS lookup for the trigger variable 'clienthost' until its actually needed. #237368 (Bug #37964) ** Several password and security bugs that required manipulating the protocol stream have been fixed. #237994 (Bug #37073) ** Under certain conditions a user with admin privilege could set a weak password for another user on a system with level 2 security. This has been fixed. #236925 (Bug #37956) ** The server could crash when a table containing an invalid permission was being parsed to create a spec. Fixed. #235183 (Bug #37752) * Users could still erroneously submit unicode type files to a non-unicode enabled server by locking the files (via 'p4 lock') prior to submitting them. Now this scenario will cause the submit to fail as it should. #232016 (Bug #37534) * Changes to the client/server network connection handling did not check for certain error conditions on windows. An application could fail with the message 'WSAEWOULDBLOCK'. #231847 (Bug #37464) * Allowing the P4CONFIG file to contain tunable values caused a regression on case insensitive clients (windows). Any variables in configuration files that did not exactly match the case as documented would be ignored. #231272 (Bug #37395) ** 'p4 diff -du' would diff files that had been deleted from a client workspace even if they were not opened. #230553 (Bug #37173) * 'p4 replicate' when run against a Unicode mode server would translate journal records into the P4CHARSET specified character set which should not happen because those records are expected to be in UTF 8 when loaded into a replica server. 'p4 replicate' will now not translate those journal records when in Unicode mode. #230416 (Bug #37377) ** Users were removed from groups during upgrade to 2009.2 if the group db records were in 2007.2 db record format. This has been fixed. #229997 (Bug #37318) * ** p4 export and p4 replicate did not properly handle journal file positions > 2Gbytes. Fixed. #229380 (Bug #37147) * Significant delays occur on Windows 64 bit platforms when using PowerShell with a current directory of a remote mount point. Fixed. #229048 (Bug #37229) ** 'p4 shelve' could get confused if during its operation a concurrent revert of the same data is executed. Now the the shelve command issues a warning message and terminates. #228752 (Bug #37144) ** 'p4 filelog -c' would incorrectly display all revision history rather than starting with the revision created by the changelist for each file submitted. #227737 (Bug #37083) ** 'p4 export -r' would not properly return large trait journal records. Extra newlines were added which would prevent journal recover from working. 'p4 replicate' was affected by this also. Fixed. #227563 (Bug #36959) ** 'p4 diff -du' in some cases, where files from the workspace were deleted through the OS, would segmentation fault.. #225273 (Bug #36644) ** 'p4 job' would allow saving a job with a required field of type 'line' even if the field had not been set. This has been fixed to fail to save the job in this situation. #223167 (Bug #32018, #33885) ** 'p4 integ' could produce non-optimal results when processing a branch view and a protection table that have many embeded wildcards. Typically this manifests itself by ignoring previous integration history and files that are synced on the client. This condition is now correctly detected and an error message output to the user. #222817 (Bug #32962) ** Some complex client views, when combined with other internally generated views create a map with more than 10 wild card combinations. These may crash the server, or fail to match filepaths when they should. This change detects the overflow and returns an error. #222762 (Bug #36460) ** Commands logged by a unicode mode server into the log file with long argument lists would elude the argument list, but that did not understand multi-byte characters and would corrupt characters around the eluded bytes. Fixed. #222207 (Bug #36364) ** Editing of a job would fail if the job contains a read-only timestamp within the repeated hour of the Fall time change. #222099 (Bug #35887) ** p4d could crash if an archive rcs file was missing a final '@'. Fixed. #221032 (Bug #34579) * p4 set command would not always find configuration files if the P4CHARSET is set to shiftjis and certain characters are in the current directory path. #219888 (Bug #28251) ** Utf16 files submitted by clients older than 2007.2 could be wrongly stored on the server. These old clients are no longer permitted to submit utf16 files. #219031 (Bug #34607) * On Windows platforms, files with unicode characters in their names are not created with their correct names if the P4CHARSET is set to a unicode charset other than utf8. Fixed. #218555 (Bug #19487) ** The server consistency checker 'p4d -xx' would report missing spec and remote depot entries during the 'db.have vs db.rev' check. This fix ignores db.have entries that originate from spec or remote depots. #217700 (Bug #24167) ** 'p4 obliterate' of a spec depot file would not remove the archive file content. Fixed. #217455 (Bug #35714) ** 'p4 submit' of a ktext file through a proxy when the ktext file was integrated from another file which is not in the proxy's cache would cause the refresh of submitted keyword expanded files to fail with an Illegal operation error. The submit would succeed but a subsequent sync would be needed to update keyword expanded files. Fixed. #217426 (Bug #13033) ** On a non-unicode enabled server, the 'unicode' file type is not supported. As from 2009.2, users can no longer submit 'unicode' files. Therefore the file type must be changed to 'text' before submission. (Prior to this change unicode files were treated the same as text when the server was non-unicode anyway). #213786 (Bug #35361) ** The 'p4 changes' command now completes if the number of changes is greater than the setting for maxscanrows. The maxscanrows check has been disabled for the db.change table on this command when no filepath is specified. Excessive scanning of other tables is still enforced, however. #213783 (Bug #35349) * ** *** Too many flag arguments to a command can no longer cause a server or client crash. Now limited to 20 flag arguments. #207848 (Bug #34239) ** The 'p4 group/change/depot/license' commands no longer crash the server if a custom field has been added to the top of a spec definition (using the undocumented "p4 spec" command). #202956 (Bug #308, #14219, #14859, #18403) ** The 'p4 diff' command flag '-du' (unified diff output) now produces diff files that are compatible with patch. This fix changes the diff output to be compatible with patch; adds correct handling of lines that don't with a newline; and improves handling of added and deleted files. Note: patch generally lacks features to create or delete files, so this fix only empties files, it does not delete them. #199648 (Bug #33644) The 'p4 fstat' flag '-mN' is now compatible with the "-F " flag, and no longer returns too few results. #199356 (Bug #23215, #28804, #32354, #33268) ** 'p4 group' now allows a member name to be used for more than one type in a group. Previously, the same member name could only be specified as either a subgroup, owner, or user. Also, an owner was also automatically made a user member of the group. Now the same name can be used in any combination of user, owner and/or subgroup. Also, a group owner must be explicitly made a member by adding the name to the Users field. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality in 2009.1 #177023 * ** The new 'p4 move' command allows for better support for renaming files. A file must be already opened for 'edit' or 'add' in order to be moved. Moved files can be synced, resolved and diffed against the repository just like files opened for 'edit'. See 'p4 help move' for more info. Minor new functionality in 2009.1 #205042 (Bug #25229) ** Password strength checking was not done for unicode mode servers. With 2009.1 this checking is performed. Passwords will still need a roman letter in addition to unicode characters, that is they can not be purely non-roman letters. #205034 (Bug #31826) ** Most metadata tables will now have 50% more pages cached by default. #195179 (Bug #1141, #13396, #17288) ** Support for external archive access with new 'archive' trigger and new +X filetype modifier. For files with the +X storage modifier, the server will now run a command defined with the 'p4 triggers' command to access the file's content in the server archive. Note that this new functionality partially addresses the above mentioned bugs but not completely. The Perforce proxy does not cache +X type files: they are always delivered from the server. #194895 ** Multiple fix, form, or auth triggers with the same name will now all be run. Previously, only the first would be run. That was consistent with change triggers, but an unneeded restriction. #193862 (Bug #25041) ** Change p4 delete to allow 'virtual delete' -- deletion of files in the depot without first syncing them into the client workspace. Implemented with a new flag, -v. #191989 (Bug #27021) ** The new 'p4 logtail' command returns error log data to the client with an offset value for getting updates. See 'p4 help logtail' for more information. #191795 (Bug #18774, #27387) ** The limit on RCS files of 1.5GB has been lifted, and p4d now supports arbitrarily large RCS files on server platforms that support 64 bit file sizes (most all nowadays). Further, the limitation of 50M lines on any single revision has also been lifted. RCS files are used by p4d to store text files revisions. It is still a better idea to treat very large text files as type 'ctype' (so that they are stored as compressed text files on the server), but the regular text type may now be used for any size file -- it may just be slower than ctext to access a large RCS archive. #191373 ** p4d journal commands such as 'p4d -jr' will now honor the -q flag to suppress messages. #190670 ** Commands with no revision specifier (head revision only) will see an improvement in the compute phase time. By reducing the amount of internal record copying lock times of certain commands have been reduced as much as 10%. #190515 ** 'p4 submit' now batches database updates during the transfer phase. This change improves concurrency by reducing the number of lock requests. #190322 ** 'p4 edit', 'p4 integ' and 'p4 revert' updates to database tables have been improved by dynamically changing the batch size. Previously the number of rows updated was fixed at 100. In this release the update batch size is adaptively increased when the database tables are busy. #189833 ** The performance of 'p4 edit' has been improved by batching its updates to benefit from the internal cache and a reduction in lock requests. #189522 (Bug #32565) ** Modify fstat to report adds by other users when two users have the same depot path open for add at the same time. Prior to this change only 'p4 opened' reports this. Now fstat generates a similar message. #183505 (Bug #6603) ** A new flag '-u user' for 'p4 opened' restricts the output to files opened by the specified user. #175099 (Bug #21832) ** A new option '-z' for 'p4 verify' allows the user to choose to skip verifying any duplicate archive files for that command. Note that the output may report a lazy copy revision if it happens to be the first revision in the sort order to access a common archive file. That may be confusing, but it's correct behavior. #166067 (Bug #30784) ** A new flag '-T fields' for 'p4 fstat' allows the user to choose which fields are included in the fstat output. See 'p4 help fstat' for more info. #174443 (Bug #31190) ** A new flag '-t' for 'p4 labels' allows the user to choose to output the date and time of the label instead of just the date. Bugs fixed in 2009.1 #247476 (Bugs #34562,#36123) ** Recovering from a journal which was truncated, or which was unreadable due to I/O errors, could result in a crash instead of an error message describing the journal file problem. Fixed. #216895 (Bug #35295) ** 'p4 revert' of a moved file could sometimes leave the client with the 'move/delete' half of the rename. Fixed. #212299 ** A 'change-commit' trigger could be erroneously fired during submit even though the target file had been reverted. This would only happen if the files were submitted with the option 'revertUnchanged'. (Bug #34819). #208500 (Bug #34730) ** The Perforce Server on Linux (32-bit) would fail to start or log errors if a database file exceeded 2 Gbytes. This platform has been fixed to correctly support large files. #205435 (Bug #32494) ** On certain platforms (Linux, Solaris), the client/server connection could hang due to deadlock. This change lowers the 'himark' (buffer value) to prevent this. #205388 (Bug #34466) ** 'p4 filelog -m -i' was inconsistent in its output, this has been fixed. Previous versions would define 'maxRevs' on revisions of files output rather than the files specified on the file[rev] argument. Users requiring the old behaviour for scripts or applications can set the protocol variable 'api' to a pre 2009.1 value for example -Zapi=64. #205051 (Bug #32792) ** p4 resolve would report incorrect keyword differences if either the base or theirs files were ktext files which were branched from text files which had expanded keyword fields as their original text forms. Fixed by explictly removing keyword expantion from ktext base and theirs files during resolve. #200645 (Bug #33896) * Tagged output (or other than C++ apis) from 'p4 jobs' against a unicode server with user defined fields which are not translateable into the P4CHARSET could crash the p4 command line or other p4 api programs. #200638 (Bug #33983) * p4 set would not allow the P4CHARSET variable to be cleared on Windows platforms. It could be set to 'none' however. Fixed. #199805 (Bug #32202) ** The fstat filter flag '-F' operators '<' and '<=' were reversed in their operation behavior, this has been fixed. #199277 (Bug #33645) ** The fstat flag '-r' (reverse order) would not reverse output when used with the '-Sr' (sort by revision). This has been fixed. #192904 (Bug #32200) ** 'p4 obliterate' was not providing accurate journal information for non-key record data. Although this doesn't break journal replay, it has been fixed for improved accuracy and diagnostic benefits. #192695 (Bug #14789) ** 'p4 info' now reports the server IP address from the license file if it is available. #188592 (Bug #28540) * ** 'p4 add' upon detecting a text file assigns the filetype 'text'. This is not optimal for large files. The default will change to 'ctext' if the added file is greater than 10MB. #188212 (Bug #28268) * Undocumented 'p4d -jds' crash fixed. This operation is still not meant for regular production use. #168530 (Bug #31344) * 'p4 revert' would fail to revert a file if the type changed from symlink to text (or visa versa) and the contents remained unchanged. #186041 (Bug #32335) * 'p4 -R' would crash when reading strings with lengths in the ranges: 128-255, 32768-65535. This has been fixed. #182939 (Bug #31755) * The 'p4' command would search for a P4CONFIG file from the real current directory prior to the directory specified with the '-d' option which could cause automounter problems. Fixed. #176992 (Bug #31375) ** 'p4 obliterate -y' would fail to purge a revision immediately prior to a deleted revision as a result of a bug introduced in 2008.1. This has been fixed. #172617 (Bug #31503) ** The server could crash if the db.trigger table was locked when accessed. This could happen if, for instance, the files were opened by anti-virus programs examining them. Fixed. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality in 2008.2 Support for Zeroconf (service registration and discovery) * ** *** Perforce servers can now register their service using multicast DNS. The service type for the server and proxy is '_p4._tcp'. By registering a human-readable name as a service it is possible to browse for perforce servers using standard DNS service discovery utilities. example register % p4d -0 -In "artists store" -p 4211 -r /usr/dep/art example browse (using bonjour dns-sd utility) % dns-sd -B _p4._tcp Timestamp A/R Flags if Domain Service Type Instance Name 15:00:03.330 Add 3 4 local. _p4._tcp. graphics-dev 15:00:03.330 Add 3 4 local. _p4._tcp. code-dev The perforce command line also has a built-in browse command 'p4 browse'. To establish a connection to the server using the human readable name, simply use it where you would usually specify P4PORT. example connect % p4 -p "artists store" info Although this works seamlessly on Mac OSX most platforms will require some software installation or configuration to make use of this new feature. Note on linux and freebsd perforce dynmically loads the avahi implementation for zeroconf services rather than apple's bonjour implementation. Registration is available also with p4p, p4ftp and p4web. Note: Authentication will not succeed through any process that sits between the client and the server. This restriction is required to prevent unauthorized server access. (consequently registering p4p is generally of little use). This restriction is also true when trying to connect to old 2007.3 servers, since they do not have the extra security protocol support. Minor new functionality in 2008.2 #165397 (Bug #30393) * ** 'p4 -z tag', which produces 'tagged' output like 'p4 fstat' is now supported. It has long been present but undocumented. #163750 (Bug #29931) ** 'p4 admin' has new command options to report the sizes of the db tables, journal and log files. 'p4 admin dbstat -s' reports the sizes of the db tables. 'p4 admin logstat' reports the sizes of the journal, error log (if it exists), and audit log (if it exists). #163087 (Bug #8941) ** 'p4 changes @change,@change' and 'p4 changes @datetime,@datetime' have been sped up by using the db.change table directly. Apart from generally being much faster, commands with this syntax will also report changes that have no files attached due to obliteration. #161413 (Bug #29930) ** 'p4 sizes' has a new flag (-z) which will ignore lazy copies when summing up the file sizes for a path. #159758 (Bug #26621) ** A new flag '-F filter' for 'p4 fstat' allows the user to limit the output to files satisfying the expression given as 'filter'. See 'p4 help fstat' for more info. #156356 ** 'p4 sync' locking has been changed to improve concurrency during very long compute cycles. The new algorithm allows for early release of locks on the db.have table. The combination of this change and #155509 should result in less demand for the lock on the db.have table. #155509 ** 'p4 sync' updates to the db.have table have been improved by dynamically changing the batch size. Previously the number of rows updated was fixed at 100. In this release the update batch size is adaptively increased when the db.have table is busy. Bugs fixed in 2008.2 #189734 (Bug #32494) ** The new tcp buffer calculation could cause a deadlock in client/server communications. This problem was only detected on configurations involving Solaris or Linux. Due to the complications of platform specific tcp implementations the algorithm has been reworked to make allowances for certain eccentricities. #188676 (Bug #32384) * 'p4 resolve' using the automatic option could crash the client application when running on windows. This would only happen if the 'theirs' file had been locked by another windows application e.g. microsoft word. #188603 (Bug #31933) ** A user with a complicated view map could crash the server by creating a spec using '-i' or editing a spec to use a name which contains '%%'. This has been fixed. #187408 (Bug #32247) ** 'p4 opened -C' with a non existent client spec causes the server instance to terminate abnormally. Fixed. #185697 (Bug #32178) * 'p4 browse' could return an invalid error message when no Perforce services were available. #185416 (Bug #32266) * Setting P4CHARSET via 'p4 set' on Windows platforms to an invalid value could not be reset to a correct value. Fixed and P4CHARSET setting restricted to legal values. #185329 (Bug #32255) ** Submitting a keyword expanded file (+k) which was integrated to and resolved with an ignore (-ay) might falsely trigger the tamper check reporting and fail to submit. Fixed. #185198 (Bug #32138) * 'p4 login', and 'p4 passwd' did not work on AS/400 and MVS due to problems in ASCII/EBCDIC conversion. This problem has been corrected. #187080 (Bug #31946, #32428) * ** 'p4 admin dbstat -s' and 'p4 admin logstat' could report negative file size when the file size exceeds 2GB. This has been fixed. #184476 (Bug #31737) ** Excessive wildcard use in client views could crash the ntx64/p4d server under circumstances that would be handled correctly by the ntx86/p4d server. It was discovered that the 64-bit version of the windows server requires more stack space to perform commands involving excessive wildcard usage in client mappings. This has been resolved so that the ntx6/p4d process behaves similarly to the ntx86/p4d. #181214 (Bug #31771) ** 'p4 fstat -F' with a filter that contains a not (^) crashes the Perforce server. This has been fixed. #183252 (Bug #31952) ** A failure to open a temporary file during submit of a compressed file could lead to a server crash. This problem could occur on a windows server only. Fixed. #168149 (Bug #30403) ** 'p4 admin updatespecdepot' had a memory leak. This has been fixed. #167560 (Bug #30910) * ** 'p4 resolve' run interactively with 'accept theirs' after a 'p4 integrate -t' which will change the target file type from symlink into something else did not record the new file type properly such that a following 'p4 integrate -f -t' followed by 'p4 resolve' would produce an error. Fixed. If an old client is used with a new server in this case, the resolved file will be left read-write when it should be read-only, using a new client prevents this. #166870 (Bug #30750) ** 'p4 annotate -i' using a revision range erroneously applied that range to the source as well as the target. Now the range is correctly only applied to the target, and the data originating from the source will now be credited from all of its revisions. #165299 (Bug #18774) ** The 1.5GB maximum size for an RCS checkin has now been imposed on non memory-mapped I/O available systems. Some 64-bit platforms could exceed the maximum which would make file archives incompatible. #165270 (Bug #30647) * 'p4 sync -f' would fail to update the db.have table correctly if a previous refreshed file had encountered an error. This has been fixed. #165134 (Bug #30569) ** 'p4 submit -t' would still submit a changelist even though one of the files had been tampered with and reported to the user. This has been fixed. #164667 (Bug #26025) * 'p4 tickets' would report garbage characters if p4v was used to login via a ticket and the server is in unicode mode with a P4CHARSET not utf8. This fix causes the user name in the ticket file to always be stored in utf8 and translated as needed to P4CHARSET. Ticket entries from old clients may no longer be compatible as they may have been stored with other character encodings than utf8. When a character in the ticket file can not be translated it will now appear as '?'. #164511 (Bug #30640) ** 'p4 diff -sb' could sometimes return a confusing error: "Can't find in depot map", this has been fixed. #164280 (Bug #29205) ** Multiple integrations and resolves where an earlier resolve required an edit and the later resolve(s) were 'accept yours' could falsely trigger a tamper check error. Fixed. #164153 (Bug #30136) ** 'p4 edit -t ' was not changing the mode of the file immediately as it had in 2007.2 and earlier. Fixed. #163731 (Bug #29609) ** 'p4 annotate' using a revision range scanned the db.rev table beyond the file being annotated. This has been fixed. #163482 (Bug #15660) ** The Spec depot now handles spec names with characters in them that are illegal characters in the spec depot filesystem. For example ':' is a legal character for a client workspace name but is an illegal character on a windows filesystem. #163028 (Bug #29993) ** Tagged output for 'p4 counter' did not report the value of the counter being set. This has been fixed. #162617 (Bug #30352) ** Tagged output for 'p4 groups -v' caused a memory leak. This has been fixed. #162324 (Bug #30404) ** 'p4 admin lockstat' caused a small memory leak. This has been fixed. #161719 (Bug #30247) * 'p4 login user' against a unicode enabled server would overwrite the originating users ticket rather than generating a new ticket for the supplied user. This has been fixed. #161285 (Bug #30304) ** The metadata btrees may lose track of a free page when a row delete causes several levels of btree nodes to be freed. This is very rare and does not damage the data stored in the btree file. Fixed. #159549 (Bug #29916) ** 'p4 info' using tagged protocol now reports the client's current working directory. #158730 (Bug #29951) * 'p4 login' could create multiple ticket entries in the Perforce ticket file for the same user. This would happen when executing multiple logins (mixed case username) against a case insensitive server (windows). Fixed. #157167 (Bug #10490) ** 'p4 labelsync' and 'p4 tag' now only require 'list' permission. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality in 2008.1 Performance improvements - #135973, #149641, #148921 ** 1) Server Lock acquisition The algorithm to lock database tables has been changed to prevent wedging. Some commands, for example 'p4 client -d' need to writelock a large group of tables. Previous server versions acquired locks in a blocking fashion. This new algorithm will release previously acquired locks if another command is holding onto a lock which would cause it to block. After a third attempt to acquire the necessary locks in this fashion fails, the command will fallback to a blocking mode. 2) Connection protocol * *** TCP connections between Perforce processes; clients, proxies and servers, now discover network buffering levels and make better use of that buffer space. Performance should be improved especially for long proxy to server connections. 3) Proxy compression (Bug #16398, #28490) *** Uncompress of binary files can be done on the client instead of the server when the proxy is in use. Both the server and new proxy are required. Command improvements - #138839, #145664, #144624, #149074 (Bug #9314, #28223, #26563, #27706, #28452) ** 1) 'p4 fstat' 'p4 fstat' has been optimized to reduce memory allocation and improve performance. The result of this optimization is a 40% decrease in memory usage and a 30% speedup of the compute phase. 2) 'p4 changes' 'p4 changes -m max ' optimization has been improved for this release. Performance of this command is now less dependent on filepath depth or number of changes specified. The new algorithm makes use of a field in the db.change table, which is calculated on submit or (for existing changes) by a 2008.1 upgrade. 3) 'p4 integrate' 'p4 integrate' has been sped up (again), markedly in cases where there is much integration history between the source and the target. 4) 'p4 obliterate' 'p4 obliterate' has been sped up, sometimes significantly, when obliterating many files in a repository with a large db.archmap table. (Tested with db.archmap with >100,000 entries.) New admin command - #137848 ** New command 'p4 admin lockstat' reports the read or write lock status for each database table. Minor new functionality in 2008.1 #152278 ** 'p4 protect' now allows specification of permission 'rights'. Previously, 'p4 protect' only allowed using permission levels which include the specified access (ie 'read') and also all of its lesser permissions (ie 'read' = 'read' + 'list'). Permission rights make it possible to deny individual rights without having to re-grant lesser rights. The new permission rights are '=read', '=branch', '=open', and '=write'. This functionality was previously undocumented, and is now fully supported for 2008.1. #151491 (Bug #2362, #18057, #19935) ** 'p4 group' fields MaxScanRows, MaxResults, MaxLockTime, and Timeout now use the value 'unlimited' to specify no limit for a parameter regardless of the limits imposed by a user's other groups. The value of 'unset' is used to specify no limit, but this will be trumped by any other limit for that parameter imposed by a user's other groups. Old group specs with this server will have the values of 'unlimited' replaced with 'unset', and members of all groups should have the same behavior as before. Similarly, Timeout of '0' will be replaced with 'unset', and also '0' Timeout will no longer be allowed for this field (use 'unset'). #150806 (Bug #6554) ** A new flag '-e nameFilter' for 'p4 labels/clients/branches' allows the user to limit the query using wildcards. This is very useful for sites that have a large collection of these domains. e.g. p4 labels -e "*sep*2000*" //depot/main/releases/... #146787 (Bug #26473) ** 'p4 triggers' can now make triggers on 'p4 triggers'. Previously, triggers were specifically excluded to avoid trouble. If a broken trigger is installed that prevents the 'p4 triggers' command from working, the only recourse is to rename or remove the db.triggers file from the server root directory. #146678 (Bug #9471) ** 'p4 jobspec' can now specify the default status for fixes created by 'p4 fix' and 'p4 change'. (It had been hardwired to "closed".) This default status is given in the jobspec's Presets value for the Status field, as an optional 2nd value preceded by the string "fix/", e.g. "Status open,fix/fixed" makes the default value for job status "open" but fix status "fixed". The fix status replaces the job status when the associated change is submitted. The new special fix status "same" leaves the existing job status in place. #146676 ** 'p4 fix' and 'p4 fixes' now report the job status associated with the fix in all cases. Previously the status was suppressed if it was the status "closed". #141168 (Bug #1340) ** 'p4 info' now reports the uptime of the Perforce Server. #140525 (Bug #27198) ** The performance of 'p4 revert' has been improved by batching its updates to benefit from the internal cache and a reduction in lock requests. #140369 (Bug #27287) ** Change-commit triggers now use a new script variable, oldchangelist, to report the pre-commit changelist number. #138643 (Bug #6096) ** Counters managed by 'p4 counter' can now be any string, not just a number. #137438 ** After a submit has completed, ktext files need to have their digest and size recalculated. Previously updates of the db.rev and db.revhx tables happened individually for each file. These updates are now batched. This change results in fewer lock requests, potentially improving the total elapsed time for submit. #139128 (Bug #26301) ** 'p4 fstat' has two new flags. The '-S' flag is used to request a different sort order for output. The '-r' flag will reverse the output order. See 'p4 help fstat' for details. #134117 ** New server identification startup flags: p4d -In Specify a unique identifiable name for your server. This name is visible with 'p4 -ztag info' output. p4d -Id Specify an identifiable comment for your server. This description is visible with 'p4 -ztag info' output. Bugs fixed in 2008.1 #179182 (Bug #31775) ** 'p4 sync -p' via the proxy did not transfer files which were not in the proxy's cache. Fixed. #175236 (Bug #31596) ** When using the proxy, 'p4 print' of binary files without the '-o' flag would be output as compressed and possibly output twice in a row. Fixed. #174121 (Bug #31547) ** 'p4 monitor' with the options '-a' or '-ae' could crash the Perforce server (on windows only). This has been fixed. #171553 (Bug #29148) ** 'p4 integrate' has been modified so that changes which have been copied out of and back into the same branch will now be candidates for re-integration into other branches. This should make synchronizing branches after forced integrations easier, at the cost of scheduling extra integrations in some cases. #168144 (Bug #30753) * Shell wildcard expansion on Windows can once again be disabled by double quoting arguments. #164029 (Bug #30616) ** Using 'p4 -x' with many thousands of files would take longer due to an optimization that was made for the more general use of Perforce. This optimization became a penalty for single file operations. Fixed. #161164 (Bug #30289) ** 'p4 admin lockstat' had a protocol error which caused p4v (and possibly other client applications) to generate incorrect results if used jointly with another command using tagged output. This has been fixed. #160022 (Bug #29974) ** The new tcp buffer calculation could be too aggressive on some platforms (causing a deadlock in client/server communications). The algorithm has been tweaked to prevent this from happening. #158746 (Bug #29943) ** Change #153657 introduced a regression that could cause 'p4 integ' to scan the db.integed table excessively. This has been corrected. #156864 (Bug #29811) ** 'p4 integrate' of temporary files followed by 'p4 resolve -at' done multiple times with the same target file before a submit would not submit the final resolve but instead the first resolved file. Fixed. #156771 (Bug #12510) ** Commas are no longer allowed as part of branch, client, depot, or label names. Existing entities containing commas in their names can still be accessed, but no new clients, branches, depots or labels can be created with commas in their names. #154569 (Bug #29250) ** 'p4 user -f' or 'p4 user -f -i' would allow creation of new users with all-numeric user names. This has been fixed to work as intended, which is to disallow all-numeric user names. #153657 (Bug #20413, #29176) ** 'p4 integrate' has been adjusted to detect when a revision has been integrated out and then back into the same file, and to suppress integrating the later revision into another file if the original revision has already been. #152854 (Bug #28635) ** The proxy was storing revisions which were lazy copied between different local depots in multiple locations. Fixed. #149573 (Bug #25380, #28412) ** 'p4 change -u' no longer requires both the username and workspace of the user to match those of the owner of the submitted change. Now only the username needs to match. #149297 (Bug #22108) * 'p4 set' will now report on the P4POPTIONS variable. #149109 (Bug #28605) ** Editing a client spec form with 'p4 client' can reset 'LineEnd' or 'SubmitOptions' to their default values. This problem only occurred if the 'Options' field was processed after either of the other two (usually through the api). #147069 (Bug #25357) ** 'p4 obliterate' now purges archive files in numerical order rather than alphanumeric. Removing RCS revisions in the correct ascending order is much faster. #146485 (Bug #13892) ** p4d will now report a non-zero exit status and a summary error message of journal files skipped due to recovering those files out of sequence. #146472 (Bug #26042) * 'p4 set' on the Windows platform did not always find the right P4CONFIG file when the P4CHARSET is set to shiftjis. Fixed. #144699 (Bug #27493) ** 'p4 sync' to a deleted revision using tagged protocol no longer reports a bogus file size in its summary data. #142417 (Bug #452, #2061, #6339, #10563, #20914) ** 'p4 integrate' and 'p4 diff2' could produce misleading error messages when trying to explain why there was no output. The most common message was 'No target files in both client and branch view.' Now this message has been augmented with a number of more specific error messages, and the correct argument (source file or target file) is displayed with the error message. #142061 ** A user with only an unmapping access line in 'p4 protect' (e.g. 'list user * * -//...') could still cause a license to be consumed. Now such a user gets the same response ("Access for user 'xxx' has not been enabled by 'p4 protect'.") as with no access at all. #141985 (Bug #26279, #23447, #22998, #18164, #16797, #13491, #26793) ** 'p4 help' for diff, diff2, describe, annotate, and resolve have been updated to clarify the usage and behavior of -d and -s diff options. The server's usage messages have also been updated. #141042 (Bug #3539, #5899) ** Users may now revert their own files so long as they have at least "list" permission on the files to be reverted. Previously 'p4 revert' required at least "open" permission to revert files. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality in 2007.3 Ability to specify group owners - (Bug #1591, #9600) ** 'p4 group' has a new 'Owner' field which is used to specify users allowed to modify the group spec without SUPER permission. Owners may change or even delete a group via the new 'p4 group -a' command. Owners are members of their owned group, but with enhanced privilege to also administer the group. Performance improvements - #122007, #124181, #124726, #128272 ** 'p4 integrate' locking changes. To improve concurrency during very long complicated integrate compute cycles, database queries have been modified. The new algorithm allows for early release of locks on the db.working, db.have, db.locks and db.resolve tables. Besides a significant reduction in the time that "update" commands have to wait, the overall elapsed time for a branch has been reduced by as much as 25%. 'p4 submit' locking changes. A rewrite of the commit phase for 'p4 submit' in a previous version improved concurrency for a number of commands. This has now been extended to commands that make use of the db.counters table. For example 'p4 change' can run concurrently during the first (and longest) commit phase of a large branch submit. 'p4 sync' locking changes. Sync has been modified so that during its compute phase it is less likely to block commands that need access to the db.resolve table. This allows commands like 'p4 revert' to operate during this time. Also initial syncs or 'p4 sync -p' operations will no longer read lock the db.have table, thus allowing concurrent syncs update access to this table. 'p4 labels' locking changes. When used with a file argument 'p4 labels' attempts to cache all of the file db.rev data so that the lock on that table can be released early. Sites that have a very large number of labels and run 'p4 labels ' will no longer wedge the server, only 'p4 labelsync' commands will have to wait. Cache management change. Caching of disk pages has changed. Pages are written earlier to avoid writing too many pages together when table locks are released. This also reduces memory and cpu usage by the metadata cache system. TCP buffering change. Perforce clients, servers, and proxies will attempt to increase TCP send and receive buffers to 32Kbytes if those buffers are less than that amount. This can improve network performance on high latency networks. Minor new functionality in 2007.3 #132766 (Bug #6964) ** 'p4 sync' and 'p4 integ' with large data sets and large protections tables now consume less CPU than before. #132360 ** Protections have been tidied up in a few odd cases: 'p4 dirs -H', 'p4 have', 'p4 labelsync', and 'p4 opened' now require having 'list' access. #130733 (Bug #25273) ** 'p4 groups -v [group]' provides summary data for the named group, much like 'p4 users [user]'. #130372 (Bug #7546) ** Trigger standard output is now passed to the client on success as well as failure. As previously, on trigger failure an error is sent to the client with the standard output embedded. Now, on trigger success a message is sent to the client with the standard output, unadorned. Previously the output was discarded on trigger success. Users can force the old behavior by setting the "api" protocol level to 61 or less with 'p4 -Zapi=61 '. #129728 ** 'p4d -jc' and 'p4d -jj' now only hold read locks on the database files, allowing read operations in the server to continue. The db.counters file is still locked, as it is updated. #129045 (Bug #10866) ** *** Proxy will now cache files as they are submitted through the proxy. A new cache validation system based on MD5 signatures is being used. If a new proxy is working with an old server, the old timestamp validation is used. Recommend running "p4 verify" to assure that the p4d server has MD5 signatures computed as the proxy will not validate its cache for revisions which the p4d server does not have an MD5 signature. #127926 (Bug #24825) ** 'p4 filelog' now sports a '-h' option. This option allows the user to follow 'branch from' and 'copy from' integration history. For more details see 'p4 help filelog'. #125001 (Bug #21537, #24909) ** Journal rotation with 'p4d -jc' or 'p4d -jj' is now an instantaneous rename (rather than a copy) on UNIX. The the -z flag (compress checkpoint/journal) still copies. #124026 (Bug #3372) ** 'p4 protect' entries may now use CIDR syntax for IP address specification. For example "172.16.0.0/16" would match all IPv4 addresses which start with 172.16. You cannot combine wildcards with CIDR notation except at the start to allow proxy or no proxy matching. #129897 (Bug #25366) ** 'p4 change' now allows the user to modify the client of a pending changelist, provided there are no open files. Bugs fixed in 2007.3 #152382 (Bug #29016) ** Sometimes 'p4 integrate' would find a distant base when cherry picking revisions to integrate. Now 'p4 integrate' insists that the base be the revision before the first revision being integrated when cherry picking revisions. #152296 (Bug #28853) ** 'p4 submit' could report "No files to submit" if the combination of client mapped files and protections table exceeded an internal limit. This limit was incorrectly reached on case-insensitive Servers (Windows) by repeated values in a generated map. This has been fixed. #149704 (Bug #28659) ** 'p4 integrate' could skip integrations in the face of large branch views coupled with large protection tables. This has been corrected. #149541 (Bug #28422) ** 'p4 integrate' could report "no permission on file(s)" if the protections managed by 'p4 protect' had excessive wildcards (too many ...'s in too many entries). Now 'p4 integrate' should be no more sensitive than other commands to the number of wildcards in protections, and in any event should fail with a more appropriate message ("too many wildcards"). #145613 (Bug #27892) ** Change #130372 caused a server with a form-out spec trigger that generates standard output upon success to crash when a user issued 'p4 spec' or 'p4 jobspec'. Form-out trigger standard output upon success also caused command-line options to be ignored during execution of 'p4 change', 'p4 group', or 'p4 submit' commands that fire the trigger. This has been fixed. #143891 (Bug #27919) ** 'p4 change' would take out unnecessary write locks on certain tables. This has been fixed. #143551 (Bug #27922) ** Change #142077 could cause a truncation error bug, if the journal file supplied with the -J option was in a different file system. This has been fixed. #142077 (Bug #27607) ** Some Unix platforms (Solaris, HPUX, AIX) would fail trying to rotate the journal file. This has been fixed. #141953 (Bug 27585) * Change #127617 caused P4EDITOR, P4DIFF, and P4MERGE settings with spaces to no longer be broken apart into distinct arguments on non-Windows platforms. This has been fixed. Windows clients continue to treat all parts of the command before the first +, -, or / as an executable path. #141402 (Bug #27504) ** 'p4 client/label/branch -d' would request write locks of database tables that were not required for its operation. This has been fixed. #139650 (Bug #26763) ** Rpc inbound and outbound sizes in bytes were sometimes incorrectly reported as negative when server tracking had been enabled. This has been fixed. #139099 (Bug #25684, #24578) ** Rpc inbound size in bytes was incorrectly reported to be zero when server tracking had been enabled. This has been fixed. #138968 (Bug #27061) ** Change #119708 introduced a regression causing 'p4 revert -k' to fail to report results of a successful revert when using tagged protocol. This has been fixed. #137032 ** Upgrading to 2007.3 will rebuild db.archmap and db.view (haveMap entries). This upgrade will fix bad data which was introduced by bug #24943 and previously patched on-the-fly by change #136742. #136601 (Bug #26468) ** Failure to connect to a remote depot resulted in a garbled error message. This has been fixed. #133838 (Bug #25794) ** 'p4 help protects' clarifies the behavior of the '-m' flag by noting that it does not report exclusionary mappings. #133764 (Bug #26005) * 'p4 set -S ' will now print $P4AUDIT if it is set. #133327 (Bug #25771) ** 'p4 submit' would let you update the changelist form with files not currently open for add/edit. Although these files would be ignored, the error would not be reported. This has been fixed. #133189 (Bug #26009) ** The change #117342 introduced a regression that would prevent the use of 'p4 login' against a server that failed to find a reverse DNS entry. This has been fixed. #132920 (Bug #25968) ** Very small journal files concatenated together might fail to replay with 'p4d -jr'. This has been corrected. #130369 (Bug #25408) ** Issuing a 'p4 unlock' of a file which someone else was submitting might not always be detected. This has been fixed. #130219 (Bug #12532) ** 'db.monitor' entries are not journalled but are incorrectly checkpointed. This has been fixed. #130201 (Bug #25326) ** Fixed memory leak on 'p4 sizes' in summary mode. #129956 (Bug #25373) ** Fixed tiny memory leak when a query string is missing the right-hand side of a relational operation. #129950 (Bug #25347, #25371) ** Corrected processing of search queries which contain mixed case and wildcards. Searching is case insensitive. #129925 (Bug @25349) ** Update the spec depot and index remaining content of jobs when a field contains a word which is extremely long. Note that these words will not be indexed. #129820 (Bug #25340) ** 'p4 change -d' would make an unnecessary scan of the 'db.working' table. This could take a long time on large sites with many open files. Fixed. #129045 (Bug #25274) ** 'p4 sync -p' run through the proxy would update the have list when the proxy needs to bring over a revision from the server. Fixed. #129045 (Bug #23408) ** *** The proxy can effectively cache files with a zero modtime. #129045 (Bug #22802) *** 'p4 -Zproxyverbose print' will now report if the proxy cache was used to satisfy the command. #128995 (Bug #11155) ** 'p4 protect' now describes the 'admin' mode in the comments section. #128595 (Bug #25245, #18873, #21511) ** Corrected underlying issue which caused the server to fail with 'integbatch: too many handles!' or 'syncbatch: too many handles!' errors. #128356 (Bug #24800) ** A perforce server will shutdown with the message "License expired" even when a new license with a valid expire date is put in place (either manually or with the 'p4 license' command). This only happened if the license that the server was originally started with became out of date. #128087 (Bug #17988) ** Failed authentication attempts are now recorded in the server error log. #127651 (Bug #10125) ** 'p4 submit' of files imported from a remote depot could fail with the following error: Operation: dm-SubmitChange Operation 'dm-SubmitChange' failed. is missing from the rev table. This has been fixed. #127617 (Bug #690, #5297, #24174) * Spaces in P4EDITOR, P4DIFF, and P4MERGE are now handled differently on Windows and UNIX. On UNIX, as before, separate words are treated as the command name and initial arguments. On Windows, separate words are treated as the command name (with embedded spaces), until a word begins with +, -, or /, which is assumed to introduce initial arguments. #127480 (Bug #20986) ** 'p4 diff2 -u' incorrectly included binary files, which could result in unreadable binary diffs. This has been changed. Now binary files are only force diffed when the '-t' option is used. #127031 (Bug #23377) ** Server audit output '-A auditlog' could also end up in the errorlog file '-L logfile'. This was most likely to happen when tracking '-vtrack=1' was enabled. #124983 (Bug #12956, #21593) ** 'p4 monitor show' will no longer show stale processes. Those processes that never exited correctly will have their status records automatically removed from the db.monitor table. #124936 (Bug #19911, #21506) ** %clienthost% in triggers will be replaced with the IP address of the client if no reverse DNS entry is found. #124875 (Bug #16726, #18049) * 'p4 sync' (and other commands) could loop if the underlying filesystem had certain permission combinations, such as the ability to create but not chmod a file (usually on network filesystems such as samba or NFS). This has been corrected. #124344 (Bug #24961) ** Submitting a new revision to an RCS ,v file could result in losing previous revisions if the file access mode had been manually modified to remove the read permissions. This is now prevented. #123740 (Bug #24900) ** 'p4 edit' of a file synced back to a point where it had a different filetype than the head revision's filetype would treat the file as if it were the head revision type instead of the sync'ed to revision. This typically caused problems with symlinks either by not changing file modes or changing the file mode of the target of the symlink. #121849 (Bug #24538) * Negative numbers, or numbers which overflow into negative numbers, are no longer allowed as changelist arguments to p4 commands. For instance 'p4 review -c 111111111111' against a windows server would cause the changelist argument to overflow into a negative value, resulting in the server consuming excessive cpu and hanging the machine. Now this no longer happens. #121382 (Bug #24558) * Pending revision entries in db.revpx, created when content triggers are used, now correctly report the file's size (instead of reporting size as -1). #131532 ** Client commands originating through proxy servers are now logged in the server and audit log files with the proxy host/client host format. The format for the 'p4 monitor show -e' now reports the client host, rather than the proxy host for these same commands. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality in 2007.2 New file type 'utf16' - #119109 * ** *** A new filetype utf16 has been added which is a textual file type which stores UTF16 client files. These files must be valid UTF16 translatable into UTF8. When the content of these files is used in command output such as 'p4 diff' that content will be in UTF8. Only full file representations will be in UTF16. This filetype works with the server in non-unicode mode as well as unicode mode. If these files are sync'ed with pre-2007.2 clients, they will be transfered as UTF8. If the server is in unicode mode, command output with contents from UTF16 files will be converted according to the P4CHARSET selected. BOMs are needed to automatically detect utf16 with the 'p4 add' command. Without a BOM, a file is assumed to be in client byte order. When a file is written such as via 'p4 sync', it will be written with a BOM and in client byte order. File type modifier '+S' enhanced - #115478 (Bug #1880) ** The filetype modifier '+S' has now been extended to include an optional numeric value that informs the server of the number of file revisions to keep. e.g. p4 add -t binary+S7 foo.exe In the above example as the eighth revision is submitted, the first revision will be purged. The numeric values supported are 1 through 10, 16, 32, 64, 128, 256, 512. Note that files with this filetype are never lazy copied. This means that although space is saved when purging old revisions, multiple branching of a file will result in more space used. See 'p4 help filetypes' for more information. New 'p4 sync' option bypasses db.have updates - #111247 (Bug #22857) ** 'p4 sync' now sports a '-p' option. This allows the user to sync files without the server keeping track of it. This option is very useful when populating build clients or when publishing content when there is no requirement for saving the client workspace state. Performance improvements - #114771, #113299, #117618, #115072 (Bug #23907, #6837) ** 1) Submit of branched files Continuing on from the branch/submit improvements made in the previous release. The commit phase of 'p4 submit' has been rewritten to improve performance during large branch creation. Most commands are now blocked for only a fraction of the time when compared to previous releases. The overall time taken to create the branch has also been reduced as much as 30%. 2) Connection protocol * The Perforce connection establishment protocol and buffering have been adjusted to avoid the nominal 1/10th second delay that TCP can introduce on some operating systems. In some cases, this can drastically reduce the time needed for a series of short commands. 3) @label,@label speedup Specifying revisions using @label,@label could be really slow when there is little overlap between the filespec and the number of matching files in the label. 4) Lockmode changes on last access updates The server no longer takes write locks on db.user or db.domain to update access time unless the access time is actually updated. New admin commands - #108286, #118447 (Bug #19309) ** 'p4 admin dbstat' Dbstat scans the internal nodes pages of database file(s) then outputs some simple statistics. The operation will lock out write access to the database table during its scan, so therefore it should be used with care. 'p4 admin updatespecdepot' Updatespecdepot instructs the server to archive forms into the spec depot. This command can be very useful for installations that have just enabled the spec depot and want to pre-populate it with existing form data. See 'p4 help admin' for more information about these new commands. New triggers - #116132 ** 'fix-add' trigger will be executed prior to adding a fix with the 'p4 fix' command. 'fix-delete' trigger will be executed prior to deleting a fix with the 'p4 fix -d' command. 'form-commit' trigger is executed after a form has been committed to gain access to automatically generated fields. (This trigger which was introduced in 2006.2 but undocumented is now fully supported). See 'p4 help triggers' for more information. Minor new functionality in 2007.2 #119528 (Bug #14419) ** 'p4 protect' will not allow the user to delete its last 'super' entry. #119344 (Bug #23591) ** Content triggers can now access the timestamps on the files being submitted via the 'headModTime' field in the output of 'p4 fstat @='. Previously timestamp information was not available until after the files had been submitted. #118826 (Bug #1159) ** 'p4 change' has a new '-u' option to allow the owner of a submitted change to update its description and/or jobs fields. #116469 (Bug #202, #218, #7522, #8649, #13352, #15653, #16636, #16845, #16888, #20370, #22382, #23343) * ** Changes to integrate and resolve. 'p4 integrate' now performs compatibility checking and will disallow integration between incompatible types, unless the '-t' flag is used. (see chart below for type compatibility). When files have been integrated with '-t', 'p4 resolve' behaves as follows: 'accept theirs' changes the type of the file on the client. 'accept yours' reverts the type change so that the open file type will match the 'yours' file type. Note, this new behaviour is also true if the user issues a 'p4 reopen' and changes the file open type. T - Resolved as text B - Resolved as binary x - Incompatible types (requires 'integrate -t') Compatibility: text binary symlink resource unicode apptxt apple text T B x x T x x binary B B x x B x x symlink x x T x x x x resource x x x B x x x unicode T B x x T x x apptxt x x x x x T x apple x x x x x x B #119955 (Bug #23698, #24251, #24207, #23469, #24150) ** The 'p4 integrate' algorithms for suppressing reintegration and for picking the optimum base, which were reimplemented in 2006.1, have been tuned significantly for this release. The following new changes have been made: Integrating a single 'copy from' revision now gives credit for all earlier revisions, so that a subsequent 'p4 integrate' of any earlier revision will find no work to do. This can only come about by 'cherry picking' (providing to 'p4 integrate' specific revisions to integrate). Pending integration records (files opened with 'p4 integrate' but not yet submitted with 'p4 submit') are now considered when finding the most appropriate base. This makes integrating into a related file already opened for branch possible without the 'p4 integrate -i' flag. 'p4 integrate' follows indirect integrations through complicated combinations of merge/copy/ignore integration records better. This should result in fewer integrations being scheduled, and closer bases being picked, for integration between distant files. 'p4 integrate' could wrongly choose a base on the source file after the revisions needing to be integrated if the revisions needing to be integrated were before revisions already integrated. This normally only comes about in cases of 'cherry picking' (providing to 'p4 integrate' specific revisions to integrate). 'p4 integrate' in certain cases wouldn't find a base (or choose a poorer base) if the source file was branched and reopened for add, and then the original file was changed further and branched again. #115979 (Bug #11938) ** 'p4 monitor terminate [id]' can now be used successfully on commands that have moved beyond the compute phase of their processing. Note, that it may take up to 10 seconds before the process will actually terminate. Bugs fixed in 2007.2 #140379 (Bug #27216) ** When integrating between two branches separated by an intermediate branch, 'p4 integrate' would conclude there was nothing to integrate if the target file had merged from a revision of the intermediate file that itself was a copy of a revision in the source file. This merge/copy chain is now treated as a merge, not a full copy. #139758 (Bug #27240) ** The p4d server on SOLARIS could intermittently terminate a command due to incorrect detection of a client dropped connection. This has been fixed. #136754 (Bug #24800) ** A perforce server could shutdown with the message "License expired" even when a new license with a valid expire date was put in place (either manually or with the 'p4 license' command). This only happened if the license that the server was originally started with became out of date. #136742 (Bug #26682) ** 'p4 obliterate' under certain conditions could purge an archive file which still had lazy copies pointing to it. This change prevents that from happening. #136614 (Bug #24943, #26541) ** In certain cases inconsistent results depending on depot path could be observed for some commands. Typically when this happened an unrestricted 'p4 sync' would bring back correct behaviour. This problem only occurred when a file that had been previously synced was no longer mapped by the current client view and the client path name had a '.' in a significant position of its path. This has been fixed. #135827 (Bug #26464) ** The change (#120526) also introduced a regression that could cause 'p4 changes' to not work correctly with the '-u' or '-c' option when specifying '-m1 '. This has been fixed. #135235 (Bug #25662) ** Unintegrated revisions prior to a delete could cause undesirable file re-branching in subsequent integrations. This change brings back an older behavior, which is to not re-branch from revisions prior to a delete when the target is also deleted. #132978 (Bug #25981) ** In the rare case where the Perforce Server on Windows fails to create a thread, the reason is now logged in the server errorlog. Under these conditions the server will no longer try to run the command in the main parent thread, but will wait for resources to become available before executing any more commands. #132390 (Bug #25828) ** 'p4 changes -i', 'p4 fixes -i' and 'p4 jobs -i' under certain conditions could exclude changelists that were integrated into the specified files. This problem has been fixed. #131348 (Bug #25612) ** The Perforce Server on Windows could hang for some commands when the auditlog was enabled. This has been fixed. #131114 (Bug #25312) ** The change (#117342) also introduced a regression that would prevent the use of 'p4 login' (perforce tickets) against a central authentication server. This has been fixed. #128851 (Bug #24156) ** The server no longer exits after 10 consecutive attempts to accept an incoming connection. Usually the reason for this is that the computer is under configured and its simply a server resource problem. In some cases the problem can be on the client end. Because of this the server now sleeps, then continues to retry. #124999 (Bug #17409) ** When the 'p4 integrate' command syncs files it will now sync file deletes before adds so as to remove directories in case they are replaced with normal files. #124947 (Bug #25038) ** 'p4 submit' would wrongly prevent a check submission when a binary file is resolved due to simple version updating (i.e. p4 sync to head requiring p4 resolve) rather than due to 'p4 integrate'. The submit report report, "edit or revert" but the file is already open for edit. #123381 (Bug #24793) ** Adding a job with three strings of about 2700 characters in the description could possibly corrupt the jobs index btree. Fixed. #123248 (Bug #24711). ** 'p4 submit -d' would set the status field to "ignore" in all jobs matching the user's JobView. Now jobs matching a user's JobView are not modified when using "p4 submit -d". #122782 (Bug #24663) ** 'p4 submit' could fail when 'p4 integrate' mistakenly attempts to branch from a deleted revision if that source file was readded and that readded revision was ignored into the target file. Fixed. #122672 (Bug #24270) * .DS_Store files are now deleted when removing a directory. (seen mainly on the Macintosh). #122284 (Bug #24671) ** 'p4 submit' would not always honor the submit options if the change form had to be edited a second time. This has been fixed. #120969 (Bug #24454, #24205) ** It is now possible to configure the filetype for spec depot files by using 'p4 typemap'. e.g. TypeMap: text //spec/client/... Note, the default for spec files is ctext. By changing the creation filetype to text (like in the example above) the server will not require subdirectories which can be a problem with sites that have more clients than their filesystem can create directories for. When setting a filetype for spec depot files only the server storage type has any relevance, setting storage modifiers will have no affect. #120526 (Bug #17862) ** 'p4 changes -m1 ' optimization of using the db.revcx table does not always perform well. Now if the scan of the db.revcx table does not find any matching files after trying a pre-set number of rows it will give up and fall back to using db.rev directly. #120385 (Bug #24149) ** 'p4 integ' could change the HaveRev to 'none' of a synced file when used with a branch spec and fileset that creates an out-of-order integration list. This has been fixed. #119979 (Bug #24335) ** Under certain rare circumstances the error: 'Database open error on db.!' 'BTree is corrupt!' Could be incorrectly displayed. This could only happen on windows servers due to an initialization problem. This has been fixed. #119708 (Bug #21679) ** 'p4 revert -k ' was checking the client side file when it does not need to. Fixed. #119687 (Bug #24079) ** Running p4 diff2 with tagged output would leak a small amount of memory on each pair of files diffed. Fixed. #119631 (Bug #23077) ** Tagged output of p4 diff2 -q was including identical files. Changed so that with the -q flag identical files are not included in the tagged output. #119616 (Bug #23950) * 'p4 -d ' run in unicode mode would ignore the command line directory override. Fixed. #119597 (Bug #23999) * Exif format jpeg files were added as binary rather than cbinary (already compressed). Fixed. #119596 (Bug #24023) * p4 diff -sd would wrongly report a symlink as missing if that symlink's target was missing. Fixed. #119245 (Bug #24204) ** Triggers run on Unix platforms were inheriting some open file descriptors from the server. This should no longer occur. #119012 (Bug #19922, #13231, #18962) ** The error message and documentation have been improved for 'p4 change -f' to reflect which fields are read-only. #118635 (Bug #22297) ** 'p4 submit' could submit a branched file with a bad archive entry if the source revision of the branched file is purged before the submit is completed. This has been fixed. #118282 (Bug #24104) * Hostname lookups that succeed without returning an address will no longer cause the client to crash. #118102 (Bug #24116, #24081, #24447) ** Error-handling for the spec commands has been improved to not allow the mutually exclusive '-i', '-o', and/or '-d' flags to be used together in one spec command. Previously wrong errors may have been generated, and in some cases the command may have executed using any one of the flags. #118064 ** 'p4 obliterate' no longer reports delete revisions in the list of revisions being being "purged". The "purged" message is now reserved for the act of removing file contents from the archive. #118057 (Bug #23536). * ** 'p4 submit' with the 'revertunchanged' submit mode would fail to reset the client file permissions. This has been fixed #117730 (Bug #16296) ** p4 job -d will only delete jobs that have no associated pending or submitted fix records. #117342 (Bug #16707, #18349) * ** Different values of P4PORT for the same server instance e.g. (ip:port# vs host:port#) would result in multiple ticket entries in the Perforce ticket file. This has been fixed so that the same server instance will always produce a single ticket entry that either P4PORT value can use. #117090 (Bug #23953) ** 'p4 integrate' between two deleted files would give a bogus error message about permissions. Now it more properly says "all revision(s) already integrated." #116771 (Bug #23915) ** 'p4 obliterate file@change' of a file opened for add would remove the open record, while 'p4 obliterate file@change,change' would not. Now neither does: to remove an open-for-add record you must use 'p4 obliterate file' without a revision. #116451 ** Superusers can now delete protected counters using 'p4 counter -f -d'. Previously they could be set, but not deleted. #116428 (Bug #15562, #23777) ** Syncing between revisions where the revision on the client was binary+w (or other non-text types) and the new revision was binary would incorrectly fail with a "Can not clobber" message. Also, if a client had a writable file not controlled by Perforce and that file is then added by another client as a +w type Perforce would overwrite the file when syncing. #116173 (Bug #14880) ** Failed trigger of type 'change-content' would leave edited files on the client workspace in a read-only state. This has been fixed. #116113 (Bug #15520) * ** Providing the security level permits it, expired perforce tickets no longer override valid P4PASSWD settings. #115153 (Bug #23630) ** *** It is no longer possible to start more than one Perforce Server or Perforce Proxy Server on the same TCP port on a Windows platform. Now such attempts will correctly report that the address is in use. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality in 2006.2 Client file tamper checking - #101065, #101345, 101699 (Bug #17607, #15928, #15654, #20029, #20587) * ** 'p4 submit' will now check that files integrated and resolved with 'am', or 'ay' are not modifed after 'resolve' and before 'submit'. If such tampering is detected then an error will display the modified file and request that the file be re-edited or reverted in order to complete the submit. e.g. //client/main/foo tampered with after resolve - edit or revert. To check for tampered files before submitting, 'p4 diff -sb' will now report files which are open for integration and have been resolved but have been modified. These files can be reopened for edit with the command 'p4 diff -sb | p4 -x - edit'. Note that in order for tamper checking to work with files resolved with 'am', a 2006.2 client as well as the server is required. Tamper checking for branch/sync files and resolve 'at' files is not done at submit time, but 'p4 diff -sb' will report those files. Tamper checking is not done on files imported from a remote depot. New client option 'SubmitOptions' - #106812 ** The new 'p4 client' field 'SubmitOptions' allows the user to alter the behavior of submit. The six different values for this field affects what happens to unchanged files and if submitted files are reopened. For more details see 'p4 help client'. SubmitOptions unchanged submitted value files files ---------------------------------------------------- submitunchanged submitted submitunchanged+reopen submitted reopened revertunchanged reverted revertunchanged+reopen reverted reopened leaveunchanged left open leaveunchanged+reopen left open reopened In addition 'p4 submit' now sports a '-f option' flag. This allows the user to override the SubmitOption which is set in the client. e.g. p4 submit -f leaveunchanged Speedup of 'p4 submit' branched files - #101435, 107393 ** The time taken to update the metadata (locking db.* files) has been reduced by as much as 40% by a combination of the following changes. The biggest reduction is seen when submitting a large number of branched files. 1) db.archmap table replaces db.archive An earlier version of the server improved obliterate performance by introducing the db.archive table. A side effect of introducing this table was a performance penalty when submitting files that resulted in lazy copies. This table has now been replaced with the db.archmap (archive map) table that does not suffer the same performance problem. 2) buffered journal file Performance has generally been improved by optimizing the way that journal records are written. This change reduces the number of writes and the number of locks taken against the journal file. 'Automatic' labels - #107125 (Bug #20887) ** The new automatic label feature introduced in 2005.2 but undocumented is now fully supported. By adding a "Revision" field to the label specification you can now make that label appear as if 'p4 labelsync' had been done on the label using that revision. The only difference is that if the "Revision" specification is dynamic (e.g #head) the apparent contents of the automatic label will change, while a static label set with 'p4 labelsync' will not. Note that when executing the command 'p4 labels ' automatic labels will not be displayed. Improved management of remote depots - #106497, #100829, #108461 (Bug #19730, #18694, #14896, #22146) ** Several changes have been made that improve the management and interoperability of remote depot servers. 1) Better lock support The server no longer locks the db.rev (or db.revhx and db.revcx) tables when accessing only files in a remote depot. This means that using 'p4 dirs' on a remote depot (often by expanding a remote folder in p4v) will no longer hold local locks. 2) MaxScanRows/MaxResults support Remote depot operations are now subject to MaxScanRows and MaxResults limitation imposed by 'p4 group' on the remote user 'remote'. 3) Protocol to negotiate table version. By negotiating the highest level for table compatability several problems have been solved. Previously, files with some complex type modifiers (like text+Fk) could not sync from remote depots. The negotiation allows for new fields like the file size to be included in data transfer from the remote server ('p4 sizes' will work with remote depots). New MaxLockTime in 'p4 group' - #106371 (Bug #21206) ** 'p4 group' now has a 'MaxLockTime' field, which can be used to prevent queries from holding locks on database tables for too long. See 'p4 help maxLockTime'. Improved license file handling - #103739 (Bug #1948) ** The new 'p4 license' administrator command allows a user with 'super' access to add a new license file to Perforce without having to shutdown the server. See 'p4 help license' for additional information. Minor new functionality in 2006.2 #112275 (Bug #3582) ** Journal files now contain lines that demark rows written under a single database lock, to better support tools that parse it. #107394 ** 'p4 obliterate' has been changed for this release. Obliterate now makes use of the db.archmap (archive map) table to check for branched files (lazy copies). If lazy copies exist then the archive (file contents) will not be removed, consequently obliterating a file does not guarantee that the corresponding archive file is removed. See 'p4 help obliterate'. #107110 (Bug #21543, #22756) ** Files are now stored in the database archive keyed to the filename and (pending) change number, rather than filename and revision number. This information is normally only ever reported to users by the 'p4 obliterate' command, but administrators who examine the archive will notice the change as well. Note that old revisions in the archives will not be renumbered. #107943 (Bug #18440) ** Resolve conflict markers will now use whole paths to indicate file names and revisions. The ORIGINAL and THEIRS files will be in depot syntax while the YOURS file will be in client syntax. #107082 (Bug #3271) ** The new 'p4 sizes' command displays size information for files in the depot. It is functionally similar to the UNIX 'du' command. See 'p4 help sizes' for additional information. #106450 (Bug #258) ** 'p4 submit' now sports a '-d description' option. This allows the user to submit files without the need for a changelist dialog. See 'p4 help submit'. #105638 (Bug #10664, #19802) ** 'maxScanRows', which can be applied via 'p4 group' to prevent users from consuming too much server resources, has been extended to a number of additional commands and tables. Previously, it only applied to the db.rev, db.revhx, and db.revdx for all commands and the db.revcx table for 'p4 changes'. Now it applies to all tables for the p4 annotate, branches, change, changes, clients, describe, diff, diff2, filelog, files, fixes, fstat, have, integrate, integrated, jobs, labels, labelsync, lock, obliterate, open, opened, release, reopen, resolve, resolved, reviews, sync, and tag commands. maxScanRows applies separately to the number of rows read from each table, not the total from all tables. The most visible effect of this change is that 'maxScanRows' will limit access to the db.integed table for 'p4 integrated'. #102279 (Bug #6053) ** 'p4 branches/clients/labels' now sports a '-u user' option. This flag limits the command output to those owned by the specified user only. #101906 (Bug #10634, #21275) ** 'p4 changes -s pending' now allows a filepath where previously it didn't. #98791 (Bug #19375) ** The Perforce Server on Windows now uses native I/O routines for database access rather that using the POSIX layer. This fixes the problem of hitting the maximum number of open POSIX file handles. #121930 (Bug #24586) ** 'p4 verify -v' on Windows could leak file handles when encountering missing or corrupt revisions in RCS archive files. This has been fixed. #121180 (Bug #24532) ** Under very rare circumstances of data in a btree, which are more likely just after a checkpoint restore, a btree record insert could cause the server to loop forever. Fixed. #120458 (Bug #24389) ** 'p4 resolve' used interactively resolving a ktext file with 'ay' i.e. accept yours would incorrectly report the resolved file as being tampered with at submit time or with 'p4 diff -sb'. Fixed. #119263 (Bug #24236) ** 'p4 obliterate' could leave database files in an inconsistent state. This could only happen if the user hit ^C or the command 'p4 monitor terminate ' was used during the processing of the obliterate. This has been fixed. #116847 (Bug #23776) ** p4 submit would fail for files reopened by a previous p4 submit with a reopen option if those files were branched by the earlier submit. Fixed. #114374 (Bug #23004) * When p4d is in unicode mode, and the p4 command line has P4CHARSET set to a wide character set (i.e. utf16) and P4COMMANDCHARSET set to a character set other than utf8, p4 commands to edit specifications would interpret those specs as utf8 instead of the P4COMMANDCHARSET. Fixed. #113270 (Bug #23258) ** Files changed from type ktext to text would be stored at the server with the keywords unexpanded even if the files had been submitted with the keywords expanded. This behavior, present only in release 2006.1, has been fixed. #112219 (Bug #23211) ** 'p4 describe -s' would fail if the change contained a file in which the file's previous revision had been obliterated. This behavior has been fixed. #112011 (Bug #22578) ** 'p4 change -o' with tagged output would not see any modifications made by a form-out trigger. This has been fixed. Bugs fixed in 2006.2 #111144 (Bug #22987) ** 'p4 describe' on a change where an affected file's previous revision has been deleted could report incorrect differences. This case is now correctly handled by displaying an error message instead. #110722 (Bug #22731) ** 'p4 protects' command now displays an error message if the protections table is empty. #110294 (Bug #22537) ** 'p4 login ' which requires 'super' privilege can change the impersonated user's current session timeout. This has been fixed. #109913 (Bug #18387) * The cygwin 'p4' client program had trouble creating a directory if there was an executable by the same name in the parent directory. This was due to the way cygwin makes "foo" and "foo.exe" look the same. Now the 'p4' client program handles this case. #109855 (Bug #18182, #10561, #19916) ** Excessive wildcards (... and *) in client views, in branch views, in the protection table, and on the command line could cause the server to consume a lot of memory and time trying to work out all the possibilities. An efficient algorithm has been put in place that simplifies this work, and so such use of wildcards should not cause nearly as much problem for the server. This problem was previously addressed in 2006.1 by enforcing an internal limit on wildcard handling, but that was too restrictive and the limit was removed as a patch. A less restrictive internal limit is back in 2006.2, and that limit is very unlikely to be hit with the new algorithm. #108679 (Bug #22113) ** 'p4 filelog' can make unnecessary scans of the rev table under certain conditions. Typically this problem is triggered when the file following the argument filelist is excluded by a protection mapping. Fixed. #108376 (Bug #22332) ** 'p4 fstat -Rn' would not filter files correctly as described in the documentation. This has been fixed. #108292 (Bug #13476) ** On some platforms, p4d would not start or log errors if the error log file exceeded 2 Gbytes. Fixed, now log files should not have problems exceeding 2 Gbytes if the platform supports such large files as database files. #108230 (Bug #22296) ** Corrected example trigger type in "p4 triggers" comments #108021 (Bug #21864) ** 'p4 integrate -f' of a deleted file more than once would leave the target file in an unusable state, where 'p4 submit' would say "Merges still pending" and 'p4 resolve' would say "file - has been deleted - revert and sync". Now the subsequent 'p4 integrate -f' has essentially no effect. #107629 (Bug #15878) ** Errors from a remote depot (most likely lack of permission for the 'remote' user) were going unreported by the local server. This has been fixed. #107321 (Bug #14726) ** Creating a new user with 'p4 user -f' with server security 2+ would result in "Bad parameters passed to mangler!" errors. This no longer happens, and the user should now only get the expected password error messages instead. #107305 (Bug #9814, #17099) * ** Logic regarding file clobbering and symlinks has changed substantially. Syncing a symlink onto a writable file should now honor the clobber client option. If a file type changes from symlink to text, the sync will no longer report a clobber error if the previous symlink points to a writable file. The P4 API also changed, see the p4apinotes.txt for details. #106098 (Bug #21942) ** Adding a View entry to any spec form with a leading '$' will result in an error and the form will not be saved. Previously this would not result in an error, and the spec would be saved without the entry, and also result in a bogus db.view value with map state of 3 corresponding to this invisible view. In the case of a branch spec, this would cause subsequent attempts to integrate using the spec to fail. #105408 (Bug #19573) * ** Temporary file handling has changed to not fail if a conflicting temporary filename already exists. Temporary files are also now named using a random sequence. #105334 (Bug #20829) ** Fields in spec forms (branch, client, label, etc) that have a # in the value are now quoted when output, so that the # is not stripped as a comment when the form is read back in. #105272 (Bug #21901) ** Date fields in jobs which are set by the server will be updated once after validating the job contents and again upon commit so that the value will reflect the time of commit. #105043 (Bug #21822) * ** Unknown field types or unknown field options in a spec definition no longer cause the server to abort on windows. #104828 (Bug #20584) ** 'p4 resolve -at' after a 'p4 integ' between files where only one of the files has keyword expansion as part of its type caused problems because keyword expansion would be done based on the source file's type, but after submit, sync would expand keywords based on the target file's type leading to differences which would be reported with 'p4 diff -se'. With this fix, in this case, 'p4 resolve -at' will expand keywords based on the target file's type. The proxy was also cacheing the wrong keyword expansion which could appear in other clients later sync operations. #104340 (Bug #19220) ** Server lock errors "Locking failure: 'table1' locked after 'table2'!", and "Locking failure: no upgrading 'table's' lock!" no longer cause the server to abort. Now the error is logged and will be tracked if server tracking is enabled, and the server will not exit. #102859 (Bug #7130, #18896, #17100, #2540) * ** A multiple resolves into the same target file revision where a subsequent resolve resulted in an 'at/accept theirs' i.e. a copy would cause earlier resolves to be converted into 'ignore'. Now, if you have new clients and this new server these earlier resolves may be converted into 'merge' if the merge system can resonably determine that no work is lost. #100946 (Bug #12339, #13329) ** 'p4 integrate' will now integrate into files already opened for add/branch/import. The action (add/branch/import) doesn't change, but a merge for 'p4 resolve' gets scheduled. This is the same behavior that has been available with files opened for edit/integrate. #100886 (Bug #20653) ** 'p4 integ -b' failure caused by invalid view mappings is reported more accurately. If the failure is caused by invalid havemap entries, the error will not be erroneously reported as invalid overlay mappings. #100847 (Bug #21172) ** The # (comment) character in specs is now treated more consistenly: it never introduces a comment in text blocks, and always introduces a comment in non-text block values. #100814 (Bug #2146) ** 'p4 client -d -f ' will now delete pending changelists created by the named client and also delete any fix records associated with it. The -f flag is now always required when deleting a client that has a numbered pending changelist associated with it. #100613 (Bug 5422, 7152, 12904, 21751) ** / is no longer allowed in client or depot names. Because of the way Perforce manages views, having a / in the name can cause data inconsistencies. Now / is simply disallowed. Most other entities (branches, labels, jobs, etc) can still have a / in them. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality in 2006.1 User file access tracking - #99426 ** The server can now log individual file access to an audit logfile. When auditing is enabled the server logs every time file content gets transfered to the client. Consequently this file will get large very quickly and there may be a small performance impact. To enable this feature: % p4d -r /usr/perforce -A auditlog Example output: 2006/05/09 09:52:45 karl@nail 127.0.0.1 diff //depot/src/x.c#1 2006/05/09 09:54:13 jim@ston 127.0.0.1 sync //depot/inc/foo.h#1 This was undocumented functionality in the 2005.2 release, but is now fully supported. 'p4 integrate' improvements - #96464 (Bug #413, #17318, #17577, #17751, #18293, #20006) ** 'p4 integrate' has been rewritten to improve three areas, mostly with respect to indirect integration (when there is no direct relationship between source and target): 1) Better performance, especially when faced with rich branch history and many out-of-date files; 2) Better recognition of previous integrations, resulting in fewer merges; 3) Better base selection, using a "closest ancestor" approach, resulting in simpler merges. The previous logic almost invariably stuck to the source file when selecting the base. Now any revision of the source, target, or indirectly related files is a candidate, with the revision that shares the most changes with both the target and source being selected. As before, 'p4 integrate -o' and 'p4 resolve -o' report the selected base. Minor new functionality in 2006.1 #99037 (Bug #20692) ** 'p4 integrated -b branch' now uses the branch view more efficiently to limit the number of integration records that have to be scanned. #96538 ** Minor 'p4 integrate' fixes with respect to deleted revisions: 'p4 integrate -Di' now attempts to integrate all outstanding revisions of a file that has been deleted and readded, rather than only those revisions since the last add. Previously '-Di' would find a base prior to the add but would only give credit for the revision after the add. 'p4 integrate -d' now implies 'p4 integrate -Di', as 'p4 help integrate' seems to have suggested. #95979 ** The merge algorithm has been rewritten. It now produces fewer conflicts to resolve, making automatic merging ('p4 resolve -am') more likely to succeed. Also, it is now better able to recognize identical changes that have been made in 'theirs' and 'yours' files. This should reduce the chances of getting duplicate inserts and generally improve merge output. #95535 (Bug #19994) * Clients operating in unicode mode with utf8 as their character set will now validate that data going to the server is valid utf8 and will error if it is not. New P4CHARSET options allow unvalidated operation. #93413 (Bug #20097, #18869, #17246) ** The 'monitor' counter now reflects the level of monitoring that the server provides. '0' and '1' are unchanged from from their current behavior of no monitoring or monitor running commands respectively. '2' also reports on idle processes that have run at least one command. Changes to the monitor counter requires a restart of p4d. #91389 ** 'p4 submit' has been modified to improve concurrency through better database locking. #90477 ** The following 'p4' commands now sport a '-m max' option: 'branches', 'clients', 'diff', 'fixes', 'fstat', 'groups', 'labels', 'opened' and 'users'. When this option is specified it limits output to 'max' number of entries. #88933 (Bug #7335) ** 'p4 groups' now has a -i flag to include subgroups when listing to which groups a user or group belongs. #89305 (Bug #2102) ** The new 'p4 protects' command shows the lines from the protections table that affect the given user/path. Bugs fixed in 2006.1 #114840 (Bug #23592) ** CPU usage has been reduced for 'p4 integrate' when it is handling indirect integrations through a large number of branches (hundreds or more). #113964 (Bug #19865) ** Concurrent 'p4 submit -c' and 'p4 change -i' of the same changelist could (under rare circumstances) leave a pending change record. Since the pending change record and the submitted change record share the same description, deleting the pending change would result in removing the committed change description. This has been fixed. #113941 (Bug #23440) ** Unable to edit existing jobs which contain a TEXT field of type always or once and were set using a preset. This has been fixed. #113687 (Bug #10201) ** 'p4 revert -a' could delete a local (modified) file, if the head revision was deleted and the client had been subsequently synced. This has been fixed. #113339 (Bug #23307) ** 'p4 opened -a //...' was being adversely affected by the optimization in change #109212. It is now back to its previous performance. #113270 (Bug #23258) ** Files changed from type ktext to text would be stored at the server with the keywords unexpanded even if the files had been submitted with the keywords expanded. This behavior, present only in release 2006.1, has been fixed. #112408 (Bug #23191) ** 'p4 depot' will not abort when it encounters a UNC path in the Map field so long as the path also ends in '...'. UNC path handling in the depot form was broken by change 93286, but it has now been fixed. #109659 (Bug #22438) * Apple file types (apple, resource, etc...) stored from a PPC or classic Mac and later synced onto an Intel Mac or vis versa would have their Finder information swapped. Fixed. However, such apple files submitted from Intel macs may need to be synced with an old client and resubmitted with a new client to fix bad Finder information. #109240 (Bug #22460) ** The internal buffer on labels for 'p4 labels filespec' has been raised from 10,000 to 1,000,000. The command works regardless of the number of labels being examined, but if under the limit the command releases an important lock (on db.domain) early, allowing other commands to run. #109212 (Bug #22288) ** 'p4 opened -a filename' has been sped up considerably for sites with a large number of client workspaces. Previously, its performance was related to the total number of client workspaces on the server, but now it is only affected by the client workspaces that have the named file(s) opened. #108308 (Bug #21706) ** Change 89167 introduced in r06.1 restricted the use of '...' wildcards in client, branch and protections maps in order to prevent excessive use of cpu and server crashes. The limit imposed by that change was determined to be too restrictive, so the limit was lifted. #108264 (Bug #22306) ** 'p4 fstat -W ' performance could be very slow if a large number of files are opened. This has been fixed. #107809 (Bug #22198) ** 'p4 integrate' would sometimes skip integrations when the integration history involved a copy away from the target. This has been corrected. #105845 (Bug #21946) ** Using 'p4 diff2' with a content trigger against a pending revision could incorrectly identify files as identical when they are different. This has been fixed. #105715 (Bug #21893) ** Submitting a new version of a file with a pre-2003.2 client would result in the wrong digest value being set. This has been fixed. #104421 (Bug #21735) ** Classic Mac OS clients could cause the 2006.1 p4d server to exit with an error about translate paths for OS 'current'. Now the server will not exit. #104154 (Bug #21741, #21742) ** Memory leaks fixed. Server leaked a small amount of memory for each table opened which was modified. #104130 (Bug #21624) ** p4 integrate of files with many branches and a complex integration history could cause the server to run out of memory. Fixed to limit the extent and depth of history searching. #104074 (Bug #21595) ** The new merge code was choosing an edit over a conflict even though the "theirs" edit effectively stomped on the "yours" delete. In most cases since both "yours" and "theirs" are removing lines this is probably a safe thing to do, however for safe merging this case will now be marked as a conflict like it was in the previous release. #104039 (Bug #21693) ** Integrating a ktext file to a text file resulted in bad checksums when running 'p4 verify' using the initial 2006.1 server. Fixed. #103879 (Bug #21587) ** 'p4 changes -i' under certain conditions could exclude changelists that were integrated into the specified files. Fixed. #103651 (Bug #21613) ** When a job is updated without specifying the '-f' flag, the server will reject changing the value of any 'always' or 'once' field to a new non-null value. If these fields are either omitted or have an empty value, then the server will set the 'always' fields as specified in the presets or restore the current values for the 'once' fields. By using this method of updating jobs, an application loses the ability to have the server detect potential job clobbering and will instead have to implement its own method for preventing overwriting of valid data. #103316 (Bug #21578) ** Using an older proxy (i.e. prior to 2006.1) with a 2006.1 server could cause binary files to be treated like text files and subject to newline translations. Other cases where filetypes get changed to text also occur. Fixed. #103097 (Bug #21451, #21589) * ** The new merge code was not recognizing certain cases which were borderline conflicts. This change applies a more conservative approach, now choosing to throw those edge cases into conflict blocks. #102793 (Bug #21513) * p4 integrate with a 'cherry picked' source range might choose a bad base when a 'dirty merge' from the target to the source files is present. Fixed. Similar to bug #15656. #102186 (Bug 21467) ** 'p4 revert -a' could incorrectly report "no file(s) opened for edit". This was introduced by change #94600 which prevents file type changes from being reverted with the '-a' flag. This has been fixed. #100015 (Bug #21070) ** 'p4 login' with a very high value for timeout would always create a new server ticket, rather than extending it. This would mean that logging in from one machine would effectively log you out of another. This has been fixed. #99861 (Bug #21033) ** 'p4 integrate' no longer needlessly locks the db.revsx table (the revision table for spec depot entries), so that long running 'integrate' commands don't block spec updates. #99829 (Bug #20599) ** Shell expansion of 'p4' command line arguments no longer occurs when the command invokes a trigger. #95339 (Bug #19759) ** p4 print without the -o option can constructively use the proxy's cache now. For this to work both the server and the proxy must be upgraded. #94979 (Bug #4169) ** The error "Client 'client' can only be used from host 'host.com'" would also be generated if the hostname was case mismatched. This check has now been made case-insensitive. #94951 (Bug #1138) ** 'p4 revert' has been changed to prevent a user from reverting a file opened by different user. #94600 (Bug #11390) ** 'p4 revert -a' default behaviour has been changed so that it no longer reverts files that have been opened with a different type. #94008 (Bug #20002, #9869) ** Starting 'p4d', or performing checkpoint, journal, or recovery options on a depot with upgrade counter = 0 will generate the informational message "Perforce db files in 'P4ROOT' will be created if missing...". #93944 (Bug #14864) ** 'p4 diff -sl [ file[rev]... ]' displays unopened files with the status of 'same', 'diff', or 'missing' as each file is compared to its revision in the depot. When used in conjunction with '-f', this command may show this diff summary for all files in the file argument, including opened files. #93514 (Bug #18555) ** The Spec depot now handles concurrency correctly. Multiple changes to a spec occurring at the same time should no longer result in missing revisions. #93503 (Bug #20111) * ** The file types "text+C" and "text+F" are now treated by 'p4 diff2', 'p4 resolve' using merge, and 'p4 describe' as text files. Now files of these types can be compared and merged. #93286 (Bug #18580, #19128) ** 'p4 depot' will not save a depot spec unless the Map entry contains a trailing set of ellipses. The trailing ellipses is the only wildcard allowed. #90843 (Bug #14813) ** jobspec fields which are specified as 'always' will have the read-only nature of the field enforced by the server unless the -f flag is used. Since the server will populate these fields upon commit, any user data will be lost. This behavior can be used to prevent most job clobbering situations by including an always field of type date (e.g., a field for LastModifiedDate). #90571 (Bug #19566) ** 'p4 labels file[revrange]' can block other Perforce commands that need to update the db.domain table. This problem has been fixed by early release of this table lock. #90261 (Bug #19649) * p4 print -o would fail when the result file specified is a device such as /dev/null or /dev/fd/1. #89366 (Bug #11188) ** Wildcards (..., *, or %%x) are no longer allowed to be right next to each other in file arguments or views. Putting them together serves no useful purpose and consumes CPU as the server tries to deal with the combinations. #89167 (Bug #18182) ** Excessive use of ... wildcards in client or branch mappings (more than a few mapping lines with more than one ... in them) could cause the server to consume a lot of memory and time trying to work out all the possibilities. Generally this was not the intent of the user. Now the server has an internal limit and returns an error rather than wasting time when the ... wildcard handling gets excessive. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality in 2005.2 PERFORMANCE IMPROVEMENTS A number of changes have been made in the 2005.2 server that should result in better performance at most sites. Optimization of head revision operations - #79472 ** This release adds a new table db.revdx which when combined with the other head revision table db.revhx (2005.1) gives faster access to the top revision required by some commands e.g. 'p4 sync'. This improvement will reduce the compute phase (where locks are taken) especially where files have many revisions. Speedup for the 'integ' command - #77216 ** The performance of 'p4 integ' has been improved by batching its updates to benefit from the internal cache and a reduction in lock requests. Depending on usage, performance can be as much as 3 times faster than previous server versions. Early release of db.working/db.resolve during sync - #84071, #85678 (Bug #14146) ** Long running 'p4 sync' commands (compute phase) will no longer block 'p4 add/delete/edit' or 'p4 revert' in most cases. Server Performance Tracking - #86623 ** The p4d server now produces diagnostic output to help identify performance problems. The new support is on by default but can be turned off or adjusted with the '-vtrack=x' flag to the server. Any user commands that exceed certain thresholds for resource usage (CPU, lapse time, database I/O, network I/O, among other things) automatically get logged into the server error log P4LOG. The levels that can be set with -vtrack=x are: 0 turn off tracking 1 track all commands 2 track excess usage for a server < 10 users 3 track excess usage for a server < 100 users 4 track excess usage for a server < 1000 users 5 track excess usage for a server > 1000 users If -vtrack is not provided on the server command line or set with P4DEBUG, the tracking level is computed from the number of users listed in the server license file. The exact format of the tracking output is not documented, and subject to change. Spec depot interferes less with other commands - #86495 (Bug #18939) ** Revision entries for a 'spec' depot are now kept in a separate database file db.revsx, so that long running reporting commands don't block updates to user/client/branch/etc forms. Special handling for @changelist - #85130 (Bug #18689) ** The syntax '//path/file@change1,@somethingelse' now performs better in many common cases. Previously, the server would search based on changelist number or file path according to hard-coded rules. This worked poorly in a few common cases: both '//singlefile@1,@date' and '//...@5000,5001' started with the wrong search. This left users trying odd syntax to second guess the server. Now the server adaptively tries searching by change number, but if that appears to be too inefficient (more than 80% of the revisions not matching the path), it switches to searching by path. Speedup for clients with many opened files - #80624 (Bug #8348, #8929, #8930, #8931, #13439, #14006, #14500, #16985) ** 2002.1 and 2005.1 special optimizations were made to avoid scans when accessing the db.have table with a depot file argument (the db.have table is keyed on the client file). This optimization has now been extended to the db.working table (also keyed on the client file), and largely eliminates the need for large scans when referring to a small set of files. Further, this optimization no longer depends on the client view and db.have table being "in sync", often referred to as "mapState 1". Now the client view is augmented upon upgrade to 2005.2 and every time the client view is changed, and so mapState has been retired. EXTERNAL AUTHENTICATION TRIGGERS - #83081 (Bug #2398, #6730, #15417) ** External authentication support is built upon the 2004.2 support for ticket based authentication. When the user issues a 'p4 login' request the first trigger of type auth-check is executed, with the user's typed password on the trigger command's standard input. If the trigger successfully authenticates then a Perforce ticket is issued. Similarly, when the user issues a 'p4 passwd' request the first trigger of type auth-set is executed to set the new password (after the old one has been verified with any auth-check trigger). The user name is available as %user% to be passed on the trigger command line. UTF-16 SUPPORT - #85454 (Bug #1536) * When the server is in unicode mode, clients can support UTF-16 as a P4CHARSET settting. Details in i18nnotes.txt. -------------------------------------------------------------------------- Minor new functionality in 2005.2 #86443 (Bug #11924) ** When using overlay mappings, adding a file on the overlay when a deleted file is present on the non-overlay mapping would give a file name changed error. Fixed. #86149 (Bug #18030) ** Jobs saved in the special 'spec' type depot are now updated automatically if their contents are changed with 'p4 fix', 'p4 change', or 'p4 submit'. The most likely automatic changes are those to the 'Status:' and 'Date:' fields. Previously the 'spec' depot was only updated by direct edits with 'p4 job'. #85670 (Bug #15369) * Character set translation failures during file transfers now report a line number near the first failure. Also, we now inspect the first 8192 bytes of a file to determine if it is a likely unicode vs text or binary file. #83894 ** Job fields marked as being 'always' updated are now updated when a fix is added or deleting to the job using the 'p4 fix' or 'p4 changelist' commands, or when a changelist affecting the job is submitted with 'p4 submit'. This is in addition to being updated when the job is updated directly with 'p4 job'. Previously (but never clearly documented) the 'always' fields were updated only upon the change of status due to 'p4 fix' (with a committed changelist) or 'p4 submit'. #83599 ** The trigger names in 'p4 triggers' have been renamed so as to clarify their purpose. The old trigger names 'submit', 'content', 'commit', 'in', 'out', 'save', and 'delete' are still recognized but the new names 'change-submit', 'change-content', 'change-commit', 'form-in', 'form-out', 'form-save', and 'form-delete' are preferred. #82165 (Bug #15773) ** 'p4 monitor show -e' and server log output will display a version string appended to the program name. If a client's version string is not available to the server (as set via 2005.2+ ClientApi::SetVersion()), the version string defaults to the protocolClient value. #80660 (Bug #16132) ** 'p4 opened -a file' and 'p4 opened -c change' have both been optimized to avoid a wholescale scan of the db.working table. #80493 (Bug #15451) ** The new 'p4 annotate -i' flag follow branches, just as 'p4 filelog -i' does. #78928 (Bug #17244) * ** Unicode type files could be submitted to a depot with a leading Byte-Order-Mark (BOM) which is not translatable into any character set other than UTF-8. Now, such files will sync into other character sets ignoring leading Byte-Order-Marks. This may cause discrepancies with p4 diff -se or -sa for such files. #77727 (Bug #8946) ** The new option 'p4 add/edit/delete -n' just displays the files that would be opened without actually opening them. #76458 ** 'p4 sync' now sports a '-k' option. This (keep) files option updates the server so that it appears that a client workspace already has the file(s) requested. Using this flag prevents files from being moved to the client workspace. #76292 (Bug #16275) ** 'p4 revert' now sports a '-k' option. This (keep) files option clears the open file action maintained by the server but does not change files in the client workspace. #75760 (Bug #8996) * Three Russian/Cyrillic character sets added. They are 'koi8-r', 'cp1251' (Windows Code Page 1251), and 'iso8859-5'. #73787 (Bug #16286) ** 'p4 annotate' now sports the -db and -dw flags from 'p4 diff' et al: ignore whitespace changes, and ignore whitespace altogether. Bugs fixed in 2005.2 #101271 (Bug 21127) ** Memory leak fixed. A server running with spec depot enabled or additional local depots would leak memory. Typically this would be 20 bytes for each additional depot multiplied by the number of file arguments. #99156 (Bug #20905) ** Servers built with the SmartHeap memory manager (linux, windows), could require input from the user when the server was unable to obtain more memory. On linux this could happen when the server was holding locks, which (eventually) brings the server to a halt. The default behaviour has been changed so that the server does not prompt when out of memory. #94339 (Bug #20192) ** 'p4 changes @changelist' could be slower in 2005.2 than it was in 2005.1 due to an optimization intended to speed up changelist ranges (@changelist,changelist). The optimization has been tuned to be no slower than 2005.1. #92200 (Bug #19757) *** The proxy would not properly expand the Date and DateTime keywords for file submitted with modtimes during daylight savings times while the submit actually happened not during daylight savings or vis versa. Fixed. #91541 (Bug #19576) * Temporary files were sometimes left in client workspaces by MacOS X clients. Fixed. #90419 (Bug #19600) * ** 'p4 -G jobs' lost the 'specdef' field when tagged output for forms was implemented in 2005.2. Now this field has been restored. #90017 (Bug #16559, #18645) ** 'p4 submit' using files with invalid or missing file modification dates will no longer cause file corruption. Instead, an error will be generated and the submission will fail. #89981 (Bug #19465) * ** Add new environment variables P4DIFFUNICODE and P4MERGEUNICODE which are like P4DIFF and P4MERGE for invoking external tools from the command line except that when the file is of type unicode and the server is in unicode mode, the character set is passed as an argument to the commands those variables point to. This can allow p4merge to be invoked from the p4 command line tool on UTF-16 files successfully. #89793 (Bug #19529) * Arguments to commands defined in P4MERGE or P4DIFF will no longer cause the commands to fail to execute. This behavior was due to a short-lived bug only in the beta release, and has now been fixed. #89471 (Bug #19463) ** 'p4 edit/delete/add' of a file in a spec depot should not be allowed, this has been fixed. #89406 (Bug #19455) ** Deleting a form when a spec depot has been enabled will result in a server crash, this has been fixed. #88299 (Bug #19044) ** The server was not updating the filesize or digest for spec depot files. This has been fixed, older files can be updated by using the 'p4 verify -u' command. #86806 (Bug #17563) ** 'p4 label' or 'p4 client' could cause the server to crash if the label or client name contained the "%%" wildcard character sequence. Now this character sequence is not allowed in the name of any new labels, clients, branches or depots. Any entity which already has this illegal character sequence in its name is still accessible. #86505 (Bug #15937, #17684, #18435) ** p4 submit -r would leave branched files read-only while also open for edit. Now such files are made read-write. p4 submit -r should now leave open all submitted files which remain on the client after a submit. #86189 (Bug #18844) * ** p4 resolve would wrongly duplicate a common insert in some cases. Fixed. #85995 (Bug #18780) * 'p4 -x ' would report unknown client in the server log file for argument processing after the first 128 arguments which are run in second and subsequent commands. Fixed. #85795 (Bug #17823) ** Importing from a remote depot could result in an unusable db.rev archive file. This would require a certain combination of multiple integrations where the last is an ignored local depot file. Subsequent access to the newly submitted revision would result in the error "Can't map //remotedepot/filename to archive!". This has been fixed. #85674 (Bug #18652) ** An integrate command may miss that a delete needs to be integrated when there are multiple levels of indirection between the source and target. Fixed. #85630 (Bug #18819) ** A narrow performance problem involving labels, the "*" wildcard, and directories with lots of subdirectories has been fixed. #85445 (Bug #18053, #18433) ** 'p4 -R' now works with marshalled input from Ruby 1.8.x #84221 (Bug #13451) ** A revision specification of @change,change against a remote depot works again. For a long time using a change number in the revision syntax for remote depot files would use the local change index against the remote files. Now it filters remote files using their own change numbers. #84221 (Bug #18441) ** A revision specification of pattern@1,@date now uses a lot less memory, related to the number of files matching 'pattern' rather than all files since change 1. #81300 (Bug #17199) ** Really long arguments (>2048 bytes) to 'p4 dirs' could crash the server. This has been fixed. #80547 (Bug #17798) ** 'p4 logout -a' now removes the ticket stored on the client as well as the ticket stored on the server. #80127 (Bug #17727) ** 'p4 logout' can now be executed if the user has a valid ticket but it has expired. Previously the user would have to run 'p4 login' first. #76684 (Bug #16957) ** 'p4 fstat' now accepts multiple -O and -R flags. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality in 2005.1 PERFORMANCE IMPROVEMENTS A number of changes have been made in the 2005.1 server that should result in better performance at most sites. Speedup for the 'dirs' command - #69248 (Bug #7068) ** The performance of the 'dirs' command is now no longer affected by the number of files deleted at their head revision. Since the 'dirs' command is used by GUIs such as P4V and P4Win, browsing through portions of the repository with files deleted at their head revision will now be faster. This speedup uses the new db.revhx table. Speedup for the 'obliterate' command - #72594 (Bug #15047) ** A number of changes have been made to reduce the fixed overhead of 'p4 obliterate'. Now the overhead is more or less relative to the number of clients and labels, rather than the size of the clients and labels. Also improved is the handling of lazy copies in that obliterating a revision that is the source of many lazy copies no longer creates many revisions in the versioned files tree. This speedup uses the new db.archive table and leverages the MapState simplification (see below). Btree passive reorganization - #68043 ** As updates are made to the db.* tables, the server now reorganizes portions of the table as necessary to maintain sorted order across contiguous leaf pages. These passive reorganizations will result in better performance when scanning portions of the table since physical movements of the disk heads will be reduced and readahead will be more effective. This feature should reduce the need to periodically recreate the db.* tables from a checkpoint to improve performance, but may increase the size of some of the db.* tables due to the allocation of new contiguous pages. MapState simplification - #72631 ** Using depot syntax for a number of commands ('p4 sync', 'p4 have', 'p4 fstat') has been sped up considerably in certain cases. Previously, such commands were fast only if the client workspace was 'in sync' with its current client view. This limitation no longer applies. Now the results of the first scan after changing the client view are used to avoid further costly scans, whether the client is in sync or not. SPEC DEPOT - #69793 (Bug #250) ** A new depot of type 'spec' archives all edited forms (branch, change, client, depot, group, job, jobspec, protect, triggers, typemap, and user) into special, read-only files in that depot. The files are named //specdepot/type/name[suffix]; suffix is optionally given as the 'Suffix:' field on the depot form. The archived forms can be accessed as any other file, but there is no special provision for using the forms, other than using the form-specific command's -i flag (e.g. p4 client -i). Automatic updates to a form, such as access times, opened files (for changes), status (for jobs), etc, do not change the saved forms: only those made through the regular form editing commands. The spec depot was introduced as undocumented functionality in the 2003.2 release, but is now fully supported. PARTIAL FILETYPES - #68575 (Bug #594, #4003, #6562, #6742) ** The filetype given to 'p4 add', 'p4 edit', 'p4 reopen', and 'p4 typemap' can now be just a partial filetype, with the '+modifiers' only. A partial filetype modifies rather than replaces the default one. For example, if a text and binary file are added to a location in the repository covered by a typemap entry specifying a partial filetype of '+l', the text file is added with a filetype of 'text+l' and the binary file is added with a filetype of 'binary+l'. See 'p4 help filetypes' for additional information. DELETE TRIGGERS - #68258 (Bug #15235) ** Complementing the spec triggers introduced in the 2004.2 release is a new spec trigger type of 'delete'. This trigger will run prior to deleting the spec. A delete trigger can be used to limit when a spec is deleted. For example, a delete trigger can be used to prevent unauthorized users from deleting jobs. -------------------------------------------------------------------------- Minor new functionality in 2005.1 #72238 ** 'p4 verify' has a new flag '-m maxRevs' which limits the number of revisions which can be verified. Using this option may require several iterations before each revision has been processed. As of change #70719 newly submitted files will have the length maintained by the server. Previous revisions will have their length computed when running verify with either the '-u' or '-v' option. It is recommended for a large repository where this update could take a long time to use the '-m' option when updating the metadata for the first time after upgrade. #71026 (Bug #15880) ** 'p4 filelog' has a new flag '-L'. This option produces long output with a 250 character truncated changelist description. #70950 (Bug #15791) ** 'p4 changes' has a new flag '-L'. This option produces long output with a 250 character truncated changelist description. #70906 (Bug #14912) * Allow the ticket file location to be configurable. The user can now define the location of the file used by 'p4 login' and subsequent connection attempts by setting the environment variable P4TICKETS. This variable, like other Perforce variables can be set at the command prompt or set in a P4CONFIG file or as an NT registry variable through 'p4 set'. e.g setenv P4TICKETS /secure/myname/ticketfile (UNIX csh) p4 set P4TICKETS=c:\secure\myname\ticketfile.txt (NT) #70719 (Bug #15844) ** The server now maintains the filesize in the metadata, this makes the 'p4 fstat' option '-Ol' much faster. #70543 ** Remote depot access for 98.2 and 99.1 servers has been dropped. #70419 (Bug #15810) ** 'p4 fstat' has a new flag '-Of'. When this option is selected all revisions for the given file(s) are displayed. #70345 ** Some commands have now been given synonyms: synonymn command -------- ------- changelist change changelists changes workspace client workspaces clients Either name will be accepted, however errors and form fields will continue to refer to the original command name irrespective of what name the command was executed with. #69880 (Bug #15693) ** 'p4 fstat' adds 'desc' (change description) to its list of output fields. This field will only be displayed when the option to display files affected by a given changelist number '-e changelist#' is specified. #69803 (Bug #15676) ** 'p4 opened' has a new flag '-C client' which limits output to files opened by the specified client. #69639 (Bug #15599) ** 'p4 fstat' adds 'otherChange#' to its list of output fields. This field will only be displayed if the file is opened. #68917 (Bug #15484) ** 'p4 fstat' adds 'digest' to its list of fields that are output. This field will only be displayed when the '-Ol' option is used. Bugs fixed in 2005.1 #89300 (Bug #19381) ** A Perforce server running with monitor enabled could encounter problems with a multi-threaded client issuing overlapping requests on the same server connection. Under certain conditions this could lead to a server crash. This has been fixed. #86943 (Bug #18960) ** Under rare circumstances a btree passive reorganization may fail with an 'insert failure'. Fixed. #86558 (Bug #18951) ** Using mmap (memory mapped) file access for the server platform AIX 5.3 has been disabled due to a problem with that O.S. implementation. #82815 (Bug #17328) ** Servers running on some versions of Linux prior to 2.6.11 could be prone to seeing sporadic zombie processes. Although this is a Linux kernel bug this change provides a workaround for those customers who cannot obtain a later release of the fixed kernel. #82100 (Bug #18091) ** Failure to archive forms to the 'spec' depot were not being reported to the client application, this has been fixed. #81216 (Bug #17960) ** Bug fix #80169 (update db files) could be executed for each database access instead of once. Although this update should not pose any problems it could slightly affect performance. This has been fixed. #81207 (Bug #17909) ** 'p4 verify -q' would not detect a missing archive file if the digest had already been computed and saved. This has been fixed. #80631 (Bug #17752) * ** p4 resolve or merge tools when 'accept theirs' is chosen could leave a file which did not match the server's version of the theirs file. Bad auto merges are also possible. Fixed. #80628 (Bug #17822) ** Upgrading to 2005.1 from a release older than the previous 2004.2 release could result in an incorrect value for a files size being reported (p4v, p4ftp). This has been fixed. #80169 (Bug #17732) ** Upgrading to 2005.1 (this release) when the server's db files were created originally by a p4d version prior to 2001.1 and which a checkpoint has never been recovered by a server version 2001.1 or later will have database update problems. Fixed. Once this fixed server is run, you can not run older 2005.1 servers without a checkpoint recovery. #79941 (Bug #17691) ** p4 filelog -i would show details of files for which the user has no permissions if those files were branched to files the user has access to. Now, filelog -i will silently not visit ancestor files which the user does not have permission to inspect. #79498 (Bug #14978) ** Application-licensed servers cannot be accessed remotely. This has been fixed. #79322 (Bug #16613) ** For certain client views 'p4 labelsync' could repeatedly delete and add the same file each time its executed. #78873 (Bug #13509) ** On some platforms (linux) with 'monitor' enabled the command 'p4 admin stop' could hang the server. This has been fixed. #77879 (Bug #17233) ** Indirect Integrations involving recently branched files which are then deleted via integration might stop propagating the delete via indirect integrations. #75719 (Bug #16806) ** Under certain circumstances and on particular server platforms (Solaris) the 'Options' field of a Perforce client could get corrupted when being displayed. This has been fixed. #75711 (Bug #16482) ** 'p4 -Rc -e #changelist' could take a long time if the client view prevented any of the files in the changelist from being mapped. This has been fixed. #74983 (Bug #16300) ** 'p4 job Job' against an NT server would override the same storage used by 'p4 jobspec'. #74847 (Bug #14524) ** 'p4 tag' would create labels with uninitialized access and modification times. This has been fixed. #74432 (Bug #16478) ** Indirect integration credit was missed in certain combinations of a copy from and a branch from a common ancestor. #74228 (Bug #16031) ** 'p4 fstat -W' has been speeded up by removing the redundant db.have client file scan. #73742 (Bug #16342) ** 'p4 fstat -e #changelist -W' on some platforms would fail to return the files opened in that changelist. This has been fixed. #73518 (Bug #16238) ** The filetype option 'apple+k' would fail in previous versions with the error "AppleSingle/Double corrupted". This failure was due to an incompatability between the apple resource fork code and the RCS keyword substitution code. This combination is prohibited and is now rejected when trying to set it rather than after submit. #72937 (Bug #15917) ** Indirect integrations might schedule deletes without the -Ds or -d flags when such flags would be needed. Fixed. #72512 (Bug #15583) ** Revisions for a 'group' stored in the spec depot did not contain all the users added to that group only the last ones added in the last update. This has been fixed. #72406 (Bug #15933) * On Windows clients operating with character set UTF8 use Unicode Windows APIs to get user related environment variables and allow Perforce variables to supply these enviroment values. #71608 (Bug #15942) ** Indirect Integration credit was not given for all paths when more than one credit path shares intermediate credit paths indirectly resulting in some unnecessary integrates being scheduled or base files for merging which are older than needed. Fixed. #71169 (Bug #15712) ** The 'Timeout' field which can be set by 'p4 group' was not allowing a value of 0 (no timeout). This has been fixed. #70975 (Bug #11839) ** Starting p4d as a service on NT would fail if upper case was used for the executable name. Fixed. #70890 (Bug #15719) ** 'p4 integ' would schedule integrations which are not needed when the source was a copy integration from a third file which was edited into the target. #69841 (Bug #15602) ** A trigger on 'p4 change' wouldn't fire on 'p4 change -s', which is used by p4win. Now it does. #68886 (Bug #15469) ** 'p4 login' IP based tickets would not work against a central authentication server. This has been fixed. #67888 (Bug #15265) ** If a post-submit trigger fails then the server can incorrectly issue the message "Submit validation failed -- fix problems then use 'p4 submit -c '". If no ktext files are refreshed during the submit then no error message is seen at all. This change fixes both these problems. #67042 (Bug #15175) ** p4 sync #none no longer changes permissions on symlink target files (Mac OS X and Darwin only). -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality in 2004.2 SECURITY LEVEL (Authorization and security levels) The new security features introduced in 2003.2 but undocumented are now fully supported. Most of the changes are built upon the existing system which when used correctly provide adequate protection for most development environments. However, this system did not provide for password enforcement, password strength enforcement and allowed unsafe practices to be established. 2004.2 introduces the concept of a perforce server security level, basically the higher the level the greater level of enforcement. In some cases enforcing a greater security level will make the usage too restrictive for some sites where it simply isn't necessary. The new security features do not offer native data encryption. As in previous versions, Perforce recommends SSH or VPN as a means of access over insecure networks. Setting a security level: To provide backwards compatability the default setting for security allows similar authorization as previous versions. To set a security level in the server a super-user must set the new 'security' counter into the system: e.g. p4 counter -f security 1 (server must be stopped/restarted) The following is a list of the values and their action. security feature/function 0 (unset) * 'p4 login' support. 1 * 2003.2+ clients enforce passwords * 2003.2+ clients require strong passwords 2 * cannot modify password through 'p4 user' * cannot modify password through 'p4 passwd -O -P' * pre-2003.2 clients cannot set password * pre-2003.2 clients cannot use login * unverified strength passwords must be changed * passwords no longer stored/retrieved from registry (NT) 3 * 'p4 login' tickets are the only way to connect to a server, passwords are no longer accepted. NEW LOGIN/LOGOUT COMMANDS PROVIDE PERFORCE ACCESS THROUGH TICKETS The new 'p4 login' command allows a user to establish an authorized connection to the Perforce server by a ticket granting mechanism. A session can be terminated by issuing a 'p4 logout' command. See 'p4 help login/logout' for usage. New field 'Timeout' in 'p4 group' 'p4 group' now has a 'Timeout' field, which can be used to change the default (12 hours) login timeout value for a group of users. This value represents the number of seconds that an issued ticket from the server will be valid for. NEW TRIGGER SUPPORT (mid-submit, post-submit and forms) (Bug #796, #1651, #9738, #10536) 'p4 triggers' now supports mid- and post-submit triggers in addition to the existing pre-submit ones. mid-submit triggers happen after file transfer and use a limited set of commands to access the file content via the special revision specification @=change, where change is the pending changelist number. post-submit triggers happen after the commit and therefore cannot stop the operation. (Bug #1651, #1929, #11861) Also, 'p4 triggers' supports triggers on all forms (like 'p4 branch' and 'p4 user'). There are three triggers available: 'out', 'in', and 'save'. An 'out' trigger is run when the form is generated; an 'in' trigger is run when the form is being saved, but before the server parses it. Both 'out' and 'in' can modify the form. A 'save' trigger is run after the form is parsed and validated by the server. A 'save' trigger cannot modify the form. NEW INDIRECT INTEGRATION DEFAULT 'p4 integrate' now always considers indirect integrations through intermediate branchs when determining that files are related and what changes need to be integrated. The direct/indirect option in branch specifications has been removed as all integrations will be considered indirect. Related is that 'p4 integrate' may select a base for merge resolution from a common ancestor which is neither the source nor the target file. NEW SMART RESOLVE LOGIC Conflict resolution with 'p4 resolve' has been changed. The new logic reduces conflicting regions with more complex detection of commonality of changes. FILEPATHS THAT CONTAIN CHARACTERS @#%* CAN NOW BE ADDED TO DEPOT (Bug #1339, #13270) Previously the special characters "@#%*" could not be included in a file submitted to the repository, instead an error would be generated. As of this release the Perforce command 'p4 add -f' will allow these special characters to be included as part of a filepath. Without the '-f' option an error message will be generated for files containing wildcards. Once added these files can only be referred to in their formatted syntax. For example 'p4 add foo#bar' will result in a file being submitted under the formatted name 'foo%23bar', notice that the '#' gets translated to its ascii hexadecimal represented value '%23'. The syntax to edit the file once it has been submitted would therefore be 'p4 edit foo%23bar'. Perforce commands like 'p4 have' and 'p4 fstat' will show both formatted and local (filesystem) names. These filenames will of course be expanded back to their original submitted name when synced down onto client machines. Note that due to this change, the wildcard %d used in reordering filepaths in viewspecs has now changed to %%d. NEW TAG COMMAND PROVIDES EASY WAY TO ASSIGN A LABEL TO A FILELIST (Bug #9903) Similar in syntax to the more advanced 'p4 labelsync' command 'p4 tag' allows the user to tag files with a label without requiring a client spec. See 'p4 help tag' for further details. -------------------------------------------------------------------------- Minor new functionality in 2004.2 #58026 (Bug #13343) ** 'p4 fstat' has two new flags. The '-O' flag used to request extra information that is usually suppressed and the '-R' flag that is used to restrict output depending on certain criteria. A number of old fstat flags have been folded into these new options. See 'p4 help fstat' for details. #56674 (Bug #11929) ** 'p4 integrate -Di' allows the integrate command to find a base for file merge prior to the latest add of the source file. That is if a source file was deleted and recreated (via add or a branch) those revisions prior to the add could provide a base for integration. This is intended to support cases where files are deleted and readded but still maintain content continuity across the delete. #56035 (Bug #13380) ** 'p4 submit -r' now supports reopening of files that have been branched. #56034 (Bug #413) ** The 'p4 integrate' command can now determine if a base for merge resolution lies on any ancestor version even if that version is a file which is neither the source nor the target. The base file and version is reported by a change in the output of 'p4 integrate', 'p4 resolve', and 'p4 resolved' if a '-o' option is given with those commands. #55851 (Bug #3757, #9034, #10740, #11631) ** The new 'p4 integrate' default of considering indirect integration history allows the command to refuse baseless merges while considering indirect integrations when the -i and -I flags are not supplied. Changes to help descriptions and spec descriptions and problems regarding integrate and branch are corrected. #53703 (Bug #13258) ** 'p4 fstat' has a new flag '-e #changelist'. When this option is selected only files that are affected by this changelist are displayed. #53137 (Bug #13259) ** 'p4 fstat' adds 'type' to its list of output fields, this field will only be displayed if the file is opened. #52894 (Bug #13184) ** 'p4 labelsync' is now atomic in its update of the label table. Previously if a user issued a 'p4 sync //...@labelname' command during a labelsync operation (of the same label) it could be possible to get an inconsistent sync. #52329 * ** Files stored as compressed binary (most binary files) are now left compressed over the wire and uncompressed only when they reach the client. (Previously, they were uncompressed on the server and sent to the client that way.) This new behavior is not optional, and is unaffected by the client's "compress" option, which continues to compress all data between the client and server. #51751 (Bug #12737) ** 'p4 monitor' now sports a '-e' flag to allow superusers to see more about a users environment. The '-e' flag adds the client program name (if known), client name and host address to the list of fields displayed. #50570 * P4CHARSET now supports iso8859-15 which is essentially latin-1 with the Euro currency symbol. #50459 ** Overlay (+) mappings are now supported in client views. This allows a client to overlay a sparse tree from the depot on top of a denser on already mapped on the client. Overlay mappings are specifically prohibited in branch views, and have no special effect in label or other views. Bugs fixed in 2004.2 #81443 (Bug #17890) * ** During change resolution via p4 resolve an 'accept theirs' could leave a file on the client which does not match the server's original 'theirs' file. #80025 (Bug #17695) * ** Problem with resolve/merge duplicating code when the base file has extra lines at the end that the source and target file do not has been fixed. #79733 (Bug #17654) ** Triggers were inheriting too many handles from the server process on Windows and could exhaust a system wide handle resource limit. Critical handles no longer inherited. #79315 (Bug #17399) * P4 clients on MacOS X which change files not owned by the user who runs the p4 client may encounter crashs and many temporary files left after the crash. Error messages will now be produced. #76944 (Bug #17078) ** Prevent server from exiting prematurely on encountering a lock upgrade problem. #76880 (Bug #16991) * ** Resolve logic to expand common change regions could cause crashes or bad merges. Changed to only rarely expand common changes when changes align at start. #76510 (Bug #16959) ** 'p4 fix' of a job against a nonexistent changelist could result in a server crash. This has been fixed. #74828 (Bug #16596) ** Resolve might cause a server crash or repeat the whole file contents as a conflict in rare cases. Fixed. #73359 (Bug #16118, #16425, #16248) ** Bug fix #72493 introduced another possible crash. Revised that fix to avoid the crash. Diffs may report slightly differently with this revised fix. #73084 (Bug #16205) ** With maxResults or maxScanRows set with 'p4 group', changing your client view to map files to a different location could result in being unable to refer to existing files in the client workspace using depot syntax (//depot/name). This has been corrected. #72935 (Bug #15831) ** Trying to sync a compressed binary file from a pre-2004.2 remote server would result in the error: "Operation 'rmt-FileFetch' failed. Unsupported librarian file type 7!" This has been fixed. #72642 (Bug #16141) ** Integrate might miss files which need integration when there is a mix of cherry picked integrations and those which are not in intermediate integrations when searching for indirect integration credits. Fixed. #72638 (Bug #16142) * ** Resolve might not detect conflicts when the two files have a change which starts as a duplicate, becomes a conflict, then one file has a change. Fixed. #72493 (Bug #16118) * ** Resolve might cause the server to crash. Crash was due to reading past the end of the yours file. Fixed. #71759 (Bug #15968) * ** The new resolve logic might cause the server to crash. Would happen on very complex merges with overlapping changes and similar regions. Fixed. #71497 (Bug #15930) * ** The new resolve logic might loop consuming all CPU in the server or merge tool when the two files being merged are substantially the same but with many small fragments in common with the base. Fixed, but more cases may be reported as conflicts than before this fix. #71324 (Bug #15597) ** The variable '%change%' for submit triggers is no longer available. This change corrects this omission. #70948 (Bug #15867) * ** The new resolve logic might loop consuming all CPU in the server or merge tool when blocks of lines are shuffled with few actual new lines or lines really removed. Fixed. #70343 (Bug #15751) * ** The new resolve logic might drop a line in the following situation: * There is a change common to the 'theirs' and 'yours' files. * Just after that change a line in all files matches a line at the end of a change in one but not both of the 'theirs' and 'yours' files. When this problem happens that common line is lost at end of the insert block which is not common. Servers with versions between 69424 and this fix actually reported a conflict in this case and the conflicting base case would report lines already merged. Fixed. #70281 (Bug #15756) ** 'p4 obliterate' cannot distinguish between an already deleted archive file and failure to undo a lazy copy due to lack of disk space, this can lead to archive data loss. This has been fixed by backing out change #45574. #69739 (Bug #15657) ** 'p4 monitor show' could crash the server on SGI due to large pid value. This has been fixed. #69731 (Bug #15606) ** Client server would deadlock with the server on a Linux machine. Reverted change 55835 so that we once again look at the OS TCP send buffer size rather than the receive buffer and we reduced the maximum expected amount of returned data to 16000 bytes. (himark limit) #69727 (Bug #15656) ** Integrations with source revisions ranges specified (so called cherry picked integrations) might choose the base on the target file instead of the source file. Fixed. #69643 (Bug #15640) ** The handling of 'p4 sync @=changelist' accidentally changed to cause files not in the changelist to be removed from the client. This syntax is used by p4win to speed up syncing a single change. Now 'p4 sync @=changelist' again means the same as 'p4 sync @changelist,changelist' as it should, and only affects the files in the given changelist. #69424 (Bug #15425) * ** The new resolve logic could report conflicting regions as too small and those lines would appear to not be conflicting. If that happened, sometimes lines would also be omitted from the end of the file. #69124 (Bug #15538) * Due to an inconsistent implementation of a specific system call on LINUX, it was possible for p4 clients such as p4v to consume lots of CPU and appear to hang. This has been fixed. #69080 (Bug #15502) * ** The new resolve logic could duplicate lines in the result if accept theirs were selected interactively from a client. Fixed, however there may be minor differences in the report of fragment counts regarding differences during result and differences in reported common lines. Standalone GUI merge clients are affected. #65225 (Bug #13257) ** The Perforce Windows Service now shuts down normally during a system reboot. Before it was terminated by the Service Control Manager. #62199 (Bug #11561) ** 'p4 -G job -o' and 'p4 -R job -o' failed if the jobspec contained required fields that deliberately defaulted to invalid values. This has been fixed. #61038 (Bug #14462) ** Saving a client spec with view arguments to depots which the user has no access (i.e. no 'list' access or better as granted by 'p4 protect') could cause the server to crash. #60787 (Bug #14431) ** Some passwords greater than 16 characters would not be recognized after being set by the user. This has been fixed. #60299 (Bug #14461) ** The server will now recognize a license file called "license.txt" as well as the default one "license". This will make installation easier on Windows platforms where often the file has to be renamed before the server can be started correctly. #59047 (Bug #13954) ** Archive files with redundant versions of revision text and ancestral revisions of such a revision can be read properly. #58393 (Bug #7096, #11534) ** Mac OS X now uses Unix permissions instead of HFS locking to prevent edits to a file. If it detects a file has the HFS lock set, it will convert it to the new system. HFS locks will never be set by Perforce. #58391 (Bug #13639, #13640) ** Syncing or opening links for edit will no longer change the flags on the files pointed to by the link, but will affect the link itself. Mac OS X only. #58964 (Bug #14229) ** Archive files with missing revision contents but revision listed in archive header will no longer crash the server. #57966 (Bug #14141) ** Jobs with empty names can no longer be created (but they can be deleted). #57268 (Bug #13931) ** 'p4 login' tickets would not work against a proxy server, this has been fixed. #57034 (Bug #13096) ** After 'p4 verify -u' had been used against the revisions in a spec depot, all new revisions would be reported as 'BAD' by 'p4 verify'. This was caused by the server incorrectly reusing the checksum of the previous revision. This fault has now been fixed. #57029 (Bug #4796) * Client connections would fail if P4PORT specified a hostname starting with a digit. This has been fixed. #56972 (Bug #13803) ** 'p4 dirs' is no longer limited by the number of directories it can report. #55835 (Bug #13364) ** Client server would deadlock if the server's operating system reported more TCP buffer space available than was really available typically happens if a server has been configured with very large TCP buffers. p4d is now more conservative and tries to keep less than 30000 bytes expected in its receive buffer. Also, measure the OS TCP receive buffer rather than the send buffer for this setting (himark limit). #55389 (Bug #13628) ** Under certain conditions where old tempobjs and new tempobjs were being submitted together it was possible that some of the new tempobj archive files would not be deleted. This has been fixed. #54731 (Bug #13279, #4104) ** During a 'p4 submit' operation it was possible for another Perforce client (same P4USER, same P4CLIENT) to interfere with the operation by (for example) reverting files currently being submitted. Checks have now been put in place that make sure that this cannot happen. Should such a change be detected 'p4 submit' will issue the error message "Files newly opened or reverted during submission" and abort. #54050 (Bug #13346) ** Missing '%' character in a 'p4 triggers' command string could cause a server crash during a submit. This has been fixed. #53436 (Bug #13228) * ** Text file diffs would rarely produce non-optimal diffs on small files with short lines. #51219 (Bug #12789) ** Merely adding or removing a "-" to the mapping of a trigger table line of 'p4 triggers' would fail to be recognized as a change to the table. This has been fixed. #50451 (Bug #1445) ** By remapping a file opened for edit to another depot file, and then syncing that depot file using depot syntax, it was possible to forget that the file was opened. This has been fixed. #50435 (Bug #2127) * ** 'p4 diff2' now always displays '' to indicate "no file". Previously '< none >' was used on the left side. Users requiring the old behaviour for scripts or applications can set the protocol variable "api" to a pre 2004.2 value for example -Zapi=56. #50078 (Bug #13730) ** 'p4 client' and similar commands that edit specs could cause a server crash if a view argument was preceeded by a double-quote with no matching end quote. This has been fixed. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality in 2003.2 Performance Improvements 2003.2 incorporates a number of changes addressed at the performance of large installations. While these changes were tested against a server of 1M files they should, of course, benefit all servers to some degree. Optimization for frequent syncs - #47694 ** A narrow optimization was made for large client workspaces that do frequent 'p4 sync' commands, typically automated build or test client workspaces. The syntax 'p4 sync @changelist,#head' now makes use of a database index to make its speed related to the number of files affected since the named changelist, rather than the number of files already in the client workspace. To take advantage of this, scripted build or test clients must remember a recent changelist number and sync to changes since that changelist. The provided changelist can be earlier than that previously synced, but the closer it is the faster. This optimization is targeted towards automated client workspaces, because they are in a position to track a recent changelist number. Further, interactive users typically don't sync all of a large client workspace at once. Label use speedups - #47813, #47771 (Bug #11540, #7225) ** Specifying revisions using file@label,label, where the label doesn't contain the named file, no longer causes quadratic behavior. Specifying revisions using @label, where the label doesn't contain revisions from a remote depot, will no longer access the remote depot. Locking and memory use improvements - #47939, #47402, #46797 (Bug #9893) ** Concurrency and memory use on 'p4 sync' and 'p4 integrate' have been improved by freeing up temporary resources earlier. Subtle database locking improvements have been made. Previously, any command that could expect a revision specification locked tables (such as db.have and db.label) in anticipation of needing them. Now they are only locked if the command actually makes use of them by including a @client or @label revision. 'p4 sync' now batches its updates to benefit from the internal cache and reduce lock contention. Speedups for large client views and protections tables - #48061 ** Large client views or protection tables should no longer slow 'p4 sync' or 'p4 integrate' quite so severely. Indirect integration much faster - #47038 (Bug #10587) ** Performance of 'p4 integrate -I', which looks at intermediate integations when determining a base, has been significantly improved. Its performance should now be similar to the normal direct integration only case. Minor new functionality in 2003.2 #50484 ** 'p4 annotate' now sports a -c flag: output change numbers instead of revision numbers with each line of the file. #48532 (Bug #11969) ** Depots to which the user has no access (i.e. no 'list' access or better as granted by 'p4 protect') no longer show up in the output of 'p4 depots'. Nor do they appear in the default branch, client, and label views. #47719 (Bug #2696) * ** The MD5 digest (fingerprint) of files are now computed and stored during submit. For best performance, use both a new 2003.2 client as well as server, as the new 2003.2 client programs offload the MD5 computation from the server. #47373 (Bug #11639) * 'p4 diff -db|-dw' now ignores line-ending differences as well as whitespace. This is very useful when used in a mixed platform environment. #46947 (Bug #4654) * 'p4 diff' can now ignore line-ending differences when used with the flag "-dl". This is very useful when used in a mixed platform environment. #46649 ** 'p4 integ' has an additional option -D, which allows the user to specify whether source or target deleted revisions are okay to integrate around. See 'p4 help integ' for further details. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality in 2003.1 2003.1 includes a number of as yet undocumented internal changes required for versioning and configuring of p4 specs. NEW MONITOR COMMAND DISPLAYS STATUS OF RUNNING P4 PROCESSES - #41063 (Bug #2931, #9889) ** The new 'p4 monitor' command displays the status of current running p4 processes. It is functionally similar to the UNIX 'ps' command. A perforce administrator can also use monitor to terminate long running processes. See 'p4 help monitor' for usage. Minor new functionality in 2003.1 #43840 (Bug #5547) * ** 'p4 resolve -a' of a binary file where either "yours" or "theirs" has changed from the base now does an automatic "accept theirs/yours", a conflict will still require manual selection. Interactive resolve will now suggest "at/ay" as appropriate. #39123 (Bug #9887) ** The new option 'p4d -c command' runs the command while the database tables are locked. #38864 (Bug #3224) ** 'p4 changes' has an additional option "-t" when specified will display the time as well as the date. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality in 2002.2 INTEGRATE ACROSS DISTANT BRANCHES - #35537 (Bug #413, #9323) ** 'p4 integrate' now fully handles merging changes between branches that don't have a direct parent/child relationship. This occurs often when, say, both a release line and a development line are branched from a main line and changes must be merged directly from the development line to the release line. Previously, users had to rely on instructions in technical note #9 to ensure that the Perforce server chose the right base revision for merging. Now an updated option to 'p4 integrate' does the work. The '-I' option looks for "indirect" integration history through intermediate files when determining the base for merging. This makes it able to handle files distantly related by branching, not just those with a direct parent/child relationship. The new branch option 'indirect' implies 'p4 integrate -I' for the branch, so that it need not be passed on the command line. While it is harmless to use the '-I' flag for directly related branches, it is slower. See 'p4 help integrate' and 'p4 help resolve' for updated descriptions of their operation. NEW ANNOTATE COMMAND SHOWS HISTORY OF LINES IN A FILE - #35149 (Bug #574) ** The new 'p4 annotate' command displays the lines of a file along with the number of the revision that introduced each line. It is functionally similar to the CVS annotate command, except that it has the option to show deleted lines and note both the revision of introduction and deletion. See 'p4 help annotate' for usage. SHARING CLIENTS USING MULTIPLE CLIENT ROOTS - #34879 (Bug #4471, #6200, #6243, #6275, #6521, #7268) ** Client workspaces that are shared across multiple platforms can now be better accomodated by the ability to specify multiple client roots. If the same workspace is accessed from different hosts, the same set of client workspace files can appear with a different root directory. Previously, only one root could be given in the client spec, and the user had to change it manually as he moved among platforms. Now 'p4 client' supports up to three (3) client roots, one main (named "Root") and two alternates (named "AltRoots" ). The client's current working directory is tried against all three, and the first one that matches is used. If none match, the main is used anyhow. 'p4 info' reports the applicable root. This support allows for client roots shared via multiple UNIX paths with symlinks, shared via NFS or Windows shares, or even between MacOS Classic and MacOS X. When used with the 'p4 client' LineEnd 'share' option, client workspaces can be effectively shared between UNIX and Windows. See 'p4 help client' for details on using multiple client roots. SPRUCING UP DIFFS The various commands that diff files have seen some enhancements to make them more compatible with the GNU diff and patch programs. Ignoring whitespace - #31144, #31078 (Bug #879, #1671, #1932) * ** 'p4 diff', 'p4 diff2', 'p4 describe', and 'p4 resolve' now can ignore whitespace changes, as the GNU diff does. The -db flag ignores changes in horizontal whitespace, and the -dw flag ignores horizontal whitespace altogether. 'p4 resolve' also passes the flags to the diff option in resolve dialog. Note that 'p4 resolve' will use text from the client (aka "yours") file where the files differ only in whitespace. 'p4 diff' requires a p4 client upgrade; 'p4 diff2' and 'p4 describe' require a p4d server upgrade. 'p4 resolve' rquires both. Patch-friendly output - #35143 (Bug #380) ** 'p4 diff2 -u', which produces more patch-friendly output, is now supported. It has long been present but undocumented. TEMPOBJ FILETYPE REDUX - #36061 (Bug #1025, #2642, #3888, #7775) ** The 'tempobj' filetype, which stores only the head revision of the file (to conserve space), has been reimplemented to remove some of the serious problems associated with using this filetype. It is now safe to use. Previously, the server knew there were multiple revisions but they all shared the same text. This created problems with 'p4 submit' (aborted submits would update the text anyhow), 'p4 verify' (the revision fingerprint would change), 'p4 sync' (syncing a non-head rev would still give the head rev's text), and 'p4 obliterate' (obliterating the non head rev would remove the head rev's text). Now the server associates text with each revision (just as with non-tempobj files) and goes through the extra step of purging the previous revision during 'p4 submit'. 'p4 filelog' will display non-head revisions as 'purged' and they are treated like a deleted revision: 'p4 sync' will remove the file on the client and 'p4 verify' will ignore them. With this change, the filetype modifier "+S" changes from a storage type (uncompressed binary with only the head rev stored) to a storage modifier (purge non-head revs). Any type of file (text, binary, compressed) may now take on the "+S" modifier. The filetype modifier "+M", which previously indicated compressed binary with only the head rev stored, has been supplanted by +S's new meaning. This table might make it clearer: keyword pre-2002.2 2002.2 -------- ---------- ----------- tempobj binary+Sw binary+FSw xtempobj binary+Swx binary+FSwx ctempobj binary+Mw binary+Sw +F = uncompressed +S = binary head-rev only (pre-2002.2) +S = purge non-head-revs (2002.2) +M = compressed binary head-rev only (pre-2002.2) +w = client file always writable (all tempobjs) +x = executable bit set on client The 2002.2 server will upgrade existing tempobj files to the new. This requires a database upgrade with 'p4d -xu'. NEW PROTECTION LEVEL FOR SEMI-SUPER USERS - #35832 (Bug #3037, #1306, #2842, #3520, #5004. This change only tangentially addresses some of these bugs.) ** A new 'p4 protect' level 'admin' has been introduced below 'super' to permit many administrative commands without granting total superuser access. The commands now requiring only 'admin' access are: p4 branch -f p4 change -f p4 client -f p4 job -f p4 jobspec p4 label -f p4 obliterate p4 typemap p4 unlock -f p4 verify The commands still requiring 'super' access are: p4 admin p4 counter -f p4 depot p4 group p4 jobs -R p4 passwd user p4 protect p4 triggers p4 user -f Minor new functionality in 2002.2 #36081 (Bug #6881) ** "p4 resolve" now writes its messages through the methods of the ClientUser class rather than directly to stdout to allow API users to capture and parse the output. This change is only relevant to API users. #35972 ** 'p4 resolve' now recognizes if the resulting file has been edited to match either 'yours', 'theirs', or the automatically merged result, and changes its default suggested action appropriately. In this way, if an external merge tool produces exactly 'theirs' then 'p4 resolve' can still arrange for a lazy copy in the server. #35391 (Bug #13, #4974) ** 'p4 describe' of a pending changelist now includes the affected files. This fixes our oldest open bug. #35390 ** The new option 'p4 revert -n' just displays which files would be reverted without actually reverting them. #35368 (Bug #409) ** Long running operations that have been cancelled by the client can now be detected and terminated in the server. This feature may not be available on all platforms. #35145 ** The new options 'p4 files -a' and 'p4 print -a' display all revisions in a revision range, rather than just the highest revision. #35114 (Bug #553) ** 'p4 filelog' has an additional option "-t" when specified will display the time as well as the date. #35063 * Adding support for Mac OS Roman character set in i18n mode. To use, set P4CHARSET to "macosroman". #34972 (Bug #9359) ** p4 info now displays the offset from UTC of the server timezone numerically and with a symbol if the symbol supplied from the OS is ASCII. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality in 2002.1 Internationalization (I18N) and Localization (L10N) Release 2002.1 incorporates the I18N and L10N changes that went into the 2001.2 release (made available only in Japan). As of 2001.2, the Perforce clients and server have an optional mode of operation where all metadata and some file content are stored in the server in the UTF8 Unicode character set and are translated into the local character set on the client. Additionally, in 2002.1 all error and informational messages returned from the server may be localized by the Perforce administrator. See the accompanying i18nnotes.txt for a full description of Unicode and localization support. Large Installation Performance Enhancements A number of changes have been targeted at large installations (typically those with more than a million files under Perforce control). Labels Command Speedup - #30690 (Bug #6531) ** The "p4 labels" command when supplied with a file argument would run very slowly and potentially lock the system out to all users due to the significant amount of scanning that was required per label. This command has now been optimized to position the rev table rather than scan when looking for a match. Pending Changes Speedup - #29365 ** Pending changes in the db.change table are now split into a db.changex table, to speed up the performance of p4win's frequent 'p4 changes -s pending' command invocation. This requires a database upgrade with 'p4d -xu'. Depot Syntax Speedup - #29329 (Bug #7069) ** To speed p4win's frequent invocations of 'p4 fstat' on files in the explorer tree, a special optimization has been introduced. Because p4win refers to files using depot syntax, normally the server must scan the client's entire list of files to find the named file. This optimization allows the server to find the file directly if and only if the client's view still reflects the files on the client. This is always the case if the client has done a full sync since last changing the view. Bottom line: if p4win's fstat calls are going slow, try syncing the entire client. Larger Database Pagesize - #27795 ** The server's default database page size has been increased from 4k bytes per page to 8k bytes per page. For large tables this results in more efficient packing with less wasted disk space and better performance. Existing databases continue to work unchanged, but to see the improvement a restore from a checkpoint is needed. New MaxScanRows in 'p4 group' - #27952 ** 'p4 group' now has a 'MaxScanRows' field, which can be used to limit the number of rows that can be retrieved from the rev table during an operation. Use MaxScanRows when MaxResults cannot help control lengthy operations (these operations could typically be speeded up by defining the depot filepath more precisely). By default, users have no limit on the size of scans 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', 'p4 help maxresults' and 'p4 help maxscanrows' for further information. Minor new functionality in 2002.1 #29455 (Bug #1066) ** 'p4 client -t' now copies client options as well as the view. Same for 'p4 label -t'. #28516 ** Server database journalling is now always on, unless explicitly turned off with P4JOURNAL=off. Previously, journalling was disabled if P4JOURNAL was unset and there was no 'journal' file in the server's root directory. The absence of the journal file no longer disables journalling. #28028 ** 'p4 integrate' by default now syncs the target files to the head revision before integrating. To integrate using the current revision had on the client, use the new 'p4 integrate -h' flag. #27808 (Bug #982, #1004, #1010, #5518) ** Jobs searching now allows for matching punctuation: in addition to indexing all alphanumeric strings, the job indexer now also indexes all whitespace separated words. So words with embedded punctuation can be matched. To match characters that are normally jobs search expression operators (=^&|()<>), escape them with a \ character. When searching for words with embedded punctuation in text fields, the wildcard (*) operator is useful, as English words often have trailing punctuation (commas, periods, etc). Existing jobs must be reindexed with the 'p4 jobs -R' command for words with punctuation to be found. Warning: this can take considerable time on a system with lots of jobs. It is harmless to interrupt this command or run it more than once. #27227 (Bug #449) ** "p4 submit" has a new option "-r", this causes files that have been opened for 'add' or 'edit' on the submitted changelist to remain open after the submit has completed. #26931 (Bug #2351, #5516) ** Labels can now contain deleted revisions. You must give an explicit revision specification in the file argument to 'p4 labelsync' for it to include deleted revisions, because normally 'p4 labelsync' includes only files on the client (and clients can't have deleted revisions). By being able to contain deleted revisions, labels can be better used to control the operation of 'p4 integrate' and 'p4 obliterate'. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality in 2001.2 INTERNATIONALIZATION (I18N) SUPPORT The Perforce clients and server have an optional mode of operation where all metadata and some file content are stored in the server in the UTF8 Unicode character set and are translated into the local character set on the client. When running in internationalized mode, all non-file data (identifiers, descriptions, and so on), as well as the content of all files of type "unicode" are translated between the character set specified by the P4CHARSET variable on the client and UTF8 in the server. See the accompanying i18nnotes.txt for a full description of Unicode support. Minor new functionality in 2001.2 #26052 ** "p4 unlock" now has a superuser option "-f", this allows a superuser to unlock any file, usually "unlock" is restricted to files locked by their owner. #25966 ** Performance of many small p4 commands issued rapidly together as might happen with scripts declined in 2001.1. Such performance should be back to pre-2001.1 levels. #24988 ** The p4d server now logs the IP address of its client when the connection is closed unexpectedly. #23682 ** 'p4 changes' now sports -u user and -c client options, to restrict the output to the named user and/or the client. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality in 2001.1 DEFECT TRACKING INTEGRATION SUPPORT In 2000.2 support was introduced for improved integration into external defect tracking systems. This functionality is now supported for general use. PYTHON I/O - #21918 * For ease of scripting the p4 command line client, it now supports a -G flag which formats output and expects input as marshaled Python dictionary objects. FIX STATUS - #21918 ** The jobs schema has been extended to include a 'fix' status, which is a status associated between a job and a change. When the change is submitted, the job takes on the fix's status. 'p4 change', 'p4 submit' and 'p4 fix' now take a -s flag to set a per-fix status, rather than using the default "closed" status. CHANGELIST/JOB UPDATE LOGGING - #21918 ** The new 'p4 logger' command tracks updates to jobs and changelists, enabling external scripting to export such changes. See 'p4 help logger' for more info. BY POPULAR REQUEST SELECTABLE LINE ENDING ON ALL PLATFORMS - #20967 (Bug #2207) ** * For users who share workspaces among platforms with different line ending conventions, the Perforce clients now support all common endings (cr/crlf/lf) on all platforms (Macintosh, Windows, UNIX). Specifically, the client option "crlf/nocrlf" has been removed and a new LineEnd field added with a more flexible set of options: mac, unix, win, local, and share. (The old "crlf" is now "local", and the old "nocrlf" is "unix"). mac, unix, and win force files to be read and written with platform-specific line endings (cr, lf, and crlf respectively). "local" reverts to the client's native format. "share" writes unix style (lf) but reads either unix (lf) or windows (crlf) style. EXCLUSIVE OPEN FILES - #20966 (Bug #233, #594, #1944) ** Certain files under Perforce control are best not changed concurrently: images, libraries, and other binary files that are difficult or impossible to merge. The Perforce server has a new filetype modifier that disallows multiple opens on the same file, serializing updates. This modifier (+l) can use be used directly on the command line (by 'p4 add', 'p4 edit', 'p4 reopen'), or can be used in the file mapping table managed by 'p4 filetype'. For example, this makes it possible to ensure that all .gif files added are treated as exclusive-open binary files. See 'p4 help filetypes'. OBLITERATING OLD REVISIONS ONLY - #20978 (Bug #929) ** 'p4 obliterate' now allows a revision range, so that you can obliterate specific revisions of files. This makes it easier to clear out old, unused revisions but keep the latest, active ones. LABEL REPORTING - #21687 (Bug #403) ** 'p4 labels' can now take a file[revRange] argument, to limit the list of labels to those with that particular file/revision. This makes it easy to see what labels are on a particular revision of a file. Minor new functionality in 2001.1 #22316 (Bug #5367) ** #0 is now a synonym for #none when specifying (no) revisions. #21725 ** 'p4 integrated' now reports a revision range on the target files, rather than just the last revision integrated. This can only occur for reverse integration records (the ones that reflect a target's contribution back to its source: branch into, merge into, etc), because normal "forward" integration records reflect the creation of the single, newly submitted revision of the target file. #21715 ** * A new 'p4 resolve' option has been introduced: 'ae' (for 'accept edit'). This is the suggested and default option when the user edits the file (with the 'e' option), either to remove conflicts or to make any edit. It is also the option used when merges with conflict markers in them are forcibly accepted. The old 'am' (for 'accept merge') now indicates a purely automated merge, without original user changes. Resolves completed with 'ae' will show up in 'p4 filelog' as 'edit from' records. This new distinction between 'merge from' and 'edit from' assists in determining whether the change should ever be integrated back: purely automated changes need not be, while original user edits should be. Now if a user makes original edits, whether by using the 'e' option in 'p4 resolve' or by re-opening the file for edit with 'p4 edit', they will be candidates for merging back to the source file. #21633 ** The db.have table has been split, with label entries moving out to the new db.label table. This eases database size constraints in two ways: first, just splitting the data means the individual tables will be smaller. Second, having a separate table for labels allows for a more compact storage format: the new format requires about 60% of the old space. This requires a database upgrade with 'p4d -xu'. #21574 ** One of the larger database tables, db.integ, has been split into db.integed and db.resolve. This requires a database upgrade with 'p4d -xu'. #21089 (Bug #1509) ** 'p4 resolve -a' of a binary file where both versions are identical now does an automatic "accept theirs." If they are not identical, a manual selection is still required. #21009 (Bug #1074, 1339) ** All identifiers (user names, file names, etc) may now contain characters previously considered unprintable, specifically those in the range 0x80-0xFF. Normal ASCII control characters (such as backspace, bell, etc), as well as #, @, %, *, and ... in filenames, are still disallowed. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality in 2000.2 2000.2 includes a number of as yet undocumented internal changes for use by the Perforce Defect Tracking Integration project. Otherwise, 2000.2 is a bugfix only release. Minor new functionality in 2000.2 #19047 (Bug #163) ** 'p4 integrate' now supports a new -t flag, which makes 'p4 integrate' propagate the source file's filetype to the target file instead of retaining the target file's previous filetype. #18875 (Bug #526) ** The default depot ("depot") no longer must be created before creating other depots. Previously, the default depot was only implicit if there were no other depots defined, and creating another depot would eclipse the default one. Now, the default depot "depot" is implicitly defined as a local depot with mapping 'depot/...' whenever it isn't explicitly defined by 'p4 depot'. #18796 ** The 'p4 jobspec' form has changed slightly: fields that allow only selected values are now listed under a single "Values" entry; fields with defaults are now listed under a single "Presets" entry. Previously, for each such field there was a special entry "Values-" or "Preset-", but that format made it hard to automate the generation of the jobspec. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality in 2000.1 FILE HANDLING OPTIONS Mapped filetype selection - #15936 (Bug #604, #3819) ** * Filetypes for 'p4 add' can now be selected based on the file's name. The new 'p4 typemap' command manages a file name-to-type mapping. If a file's name matches an entry in that table, it will be used in preference over the type sensed by the client program. Note that this change only requires an updated server to work, but old clients will wrongfully report that empty or missing files are being added as text, even when the typemap is used. New clients are required for warning messages that mention the correct type. More keyword expansion - #15900 (Bug #387) ** More keywords are now available with ktext files: in addition to $Id$ and $Header$, there is now: $Date$ - date of file submission $DateTime$ - date and time of file submission $Change$ - change of file submission $File$ - just the file name, sans revision $Revision$ - just the revision number, sans file name $Author$ - the user who submitted the file. Notably absent is $Log$ (filelog). It is still anticipated. For compatibility, previously existing ktext files are now named text+ko, which continues to expand just $Id$ and $Header$. In order to take advantage of the new keywords, files must have their type changed with 'p4 edit -t ktext' and resubmitted (presumably updated to include some new keywords). In order to produce valid values for $Change$ and $Date$ (at least), the client program now refreshes ktext files _after_ the changed is committed, rather than just before. If the refresh is interrupted, either by network failure or the user hitting ^C, files not refreshed will not be considered by Perforce to be on the client filesystem, and must be refreshed properly with a subsequent 'p4 sync'. File modification time preserved - #15891 (Bug #844, #1254, #2457) ** * File modification times can now be preserved. The client spec's 'modtime' option continues to cause 'p4 sync' to update a file's modtime, but now to the modtime of the file as of the 'p4 submit', rather than the time of the 'p4 submit' itself. Additionally, files with the new +m modifier always have their modtimes set on 'p4 sync', regardless of the client spec's modtime option. New client executables are required for the modtimes to be detected upon 'p4 submit'. Pre-2000.1 client programs will continue to use the time of the 'p4 submit' as the modtime. JOB SEARCHING Wildcards - #14534 (Bug #1190, #1414, #2262) ** 'p4 jobs -e expr' now allows the wildcard * in its expression, to allow for partial word matches. This also allows 'jobs' to check for the presence of a text field being set at all ('field=*'). It also makes it easier to search for all jobs except selected ones, as 'jobs -e' doesn't allow a lone "not" (^) operator. E.g. the expression 'job=* ^word' returns all jobs excluding those with 'word' in it, because 'job=*' matches all jobs. See 'p4 help jobview' for more details. Minor new functionality in 2000.1 #16617 ** The new option 'p4 print -o localFile' redirects the output to the named file on the client filesystem. The difference between this and redirecting stdout (via the command shell) is that this creates a file of the proper type (text, binary, symlink, apple, xtext, etc). #16298 (Bug #2923) ** 'p4 info' now reports the date, time, and timezone on the server machine. #14126 (Bug #14126) ** 'p4 labelsync' now supports a revision range on its file argument, just as 'p4 sync' does. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality in 99.2 MORE MACINTOSH FILE SUPPORT New 'apple' filetype - #13015 (Bug #858, #863, #2699) ** * There is now an alternative mechanism for storing the resource fork and type/creator information of files originating on the Macintosh. The new filetype 'apple' stores the following all under a single depot file name: the data fork, the resource fork, the Finder info (including the type/creator information), and the comment string. These files are encoded into AppleSingle format for storing on the server. The previous mechanism, which stores the data fork under the regular file name and the resource fork and type/creator information under a separate .file name with type 'resource', is still available. When 'apple' type files are synced onto non-Macintosh 99.2 clients, they are decoded into AppleDouble format, with the non-data portion written into a %file. Unlike the 'resource' type .file, the %file is manifested only on the client: the server only knows of the file by its normal name. If a pre-99.2 client syncs an 'apple' type file, it will be unaware of the encoding and get the raw binary contents, which is in AppleSingle format. Users of CWPerforce 99.1 may want to wait for CWPerforce 99.2 before starting to use the 'apple' file type. It is permissible to submit AppleDouble format files from 99.2 non-Macintosh clients or AppleSingle format files from pre-99.2 clients, but the 99.2 Macintosh AppleSingle implementation decodes only DATA, RESOURCE, COMMENT, and FINDERINFO entries. Support for Macintosh Internet Config - #11821 * Internet Config (part of the MacOS 8.x "Internet" control panel) is now used by 'p4 sync' on the Macintosh to map file extensions to Macintosh type/creator. This is overridden by type/creator information stored in 'apple' type files or in companion 'resource' .file's. BRANCHING AND INTEGRATION IMPROVEMENTS 'p4 filelog' follows branch history - #12482 (Bug #599, #634, #1690, #2192) ** 'p4 filelog' can now follow branch history. If a file was created by branching, 'p4 filelog -i' displays the revisions of the source file (but only revisions up to the branch point). It properly handles files that were branched from other files which themselves were branched from still other files. No more 2-way text merges - #12354 ** 'p4 integrate' now refuses to arrange a baseless merge unless passed the -i flag. A baseless merge arises when both the source and target files already exist but are not directly related by branching. Previously, 'p4 integrate' would schedule a baseless merge, which 'p4 resolve' would then present as a 2-way text merge. If 'p4 integrate' is forced to schedule a baseless merge, 'p4 resolve' now uses the first rev being merged as the base, rather than attempting a 2-way text merge. This eliminates 2-way text merges altogether. 'p4 integrate' resists mistaken branching - #13292 (Bug #2672) ** 'p4 integrate' now specifically disallows branching a file from a non-add revision. This means that it will no longer attempt to re-branch a source file on top of a deleted target file when the source file changes. It also won't delete the target file of an integration if it has changed since it was last integrated into the source. 'p4 integrate -d' overrides this, reverting to pre-99.2 behavior, where it was permitted to mix edits with a deleted file. Reverse integration records always created now - #10627 ** A reverse integration record (one that shows up in 'p4 filelog' as 'xxx into') is now created for each forward integration record (one that shows up in 'p4 filelog' as 'xxx from'). Previously, an "impure" integration -- a branch downgraded to add, or integrate downgraded to edit, or integrate from multiple sources, didn't generate a reverse integration record. This was meant to signal that the target file's changes still needed to be merged back into the source file, but the lack of integration record was confusing to users. Now special "add into" and "edit into" reverse integration records are created. This only affects reporting. ADMINISTRATION New 'p4 admin' command - #11701 ** The new 'p4 admin' command allows the superuser to stop or checkpoint the server. See 'p4 help admin' for command details. Subgroups - #12240 (Bug #2301) ** 'p4 group' now allows other groups, rather than just users, to be members of a user group. Journal format changes - #11722, #13174 ** Server journal files are now marked with a version line to prevent them from being used to update a database created from a different checkpoint. Journal files now distinguish between new records being written (with the @pv@ mark) from existing records being replaced (with the new @rv@ mark). Checkpoint naming changed - #11759 (Bug #1059) ** The argument to 'p4d -jc' is now a prefix for the name of the checkpoint and journal files, rather than just the name of the checkpoint file. ".ckp.N" and ".jnl.N" are appended to the prefix to generate the checkpoint and journal file names. The prefix path is relative to the server's root directory. NOTE: THIS IS A CHANGE FROM THE USE OF THIS FLAG IN 99.1 AND BEFORE. Journal only flag - #13176 ** 'p4d -jj' copies and truncates the journal, just as 'p4d -jc' does, but without making a checkpoint. This enables a checkpoint to be made offline by building a second database from a previous checkpoint and the newly saved journal (and checkpointing the resulting, second database). Server runs in background - #13167 (Bug #729) ** The new 'p4d -d' flag causes it to fork first before accepting connections, so as to act more like a typical UNIX daemon program. The exit status of the parent indicates whether it successfully started up. REMOTE DEPOT SUPPORT BETWEEN UNIX AND NT - #12114 (Bug #867) ** Remote depot interaction between UNIX and NT is now usable, but still not complete. In particular, browsing in the Windows GUI is not possible because 'p4 dirs' does not yet work correctly between UNIX and NT. LOCKING WORKSPACES TO A SPECIFIC HOST - #12409 (Bug #1242) * ** Client workspace access can now be restricted to a given host by setting the "Host" field in the 'p4 client' form. By default, new client workspaces are now created with the "Host" field set. Delete the field from the form to allow unrestricted access. This functionality requires a 99.2 client and server. The client will take the following as the host name, in order of preference: a name passed as 'p4 -H host' on the command line, the value of $P4HOST in the client's environment, the client host's "hostname" (which is generally platform specific). The restriction is not a security mechanism, as it can be circumvented with the 'p4 -H host' option. It is meant to prevent accidental misuse of a client workspace from the wrong machine. 'p4 info' displays the client host name as determined by the 'p4' command. Minor New Functionality in 99.2 #12805 (Bug #708) ** 'p4d -V' now uses $P4ROOT or the '-r root' option to find the license file, so that it can properly display the licensing information. The server root directory now defaults to the current directory if $P4ROOT is unset and '-r root' is not used. Previously, it was a fatal error not to provide a root directory. #12243 ** 'p4 branch' now rejects attempts to save the default view as the actual branch view. The default view is just a sample that won't work. #12103 (Bug #2661) * The BEOS p4 client now supports symlinks (as the UNIX p4 clients do). #12073 ** The new 'p4 jobs -r' flag sorts jobs in reverse order by name. Normally, they are sorted in ascending order. #11903 ** 'p4 diff' and 'p4 diff2' now take a -t flag to force a textual diff even for non-text (binary) files. The 'p4 resolve -b' flag has been renamed '-t' to match. #11889 (Bug #601) ** * The new client option 'rmdir' causes the p4 client program to attempt to delete the enclosing directory if all files therein have been removed by 'p4 sync', 'p4 integrate', or 'p4 revert'. This action is recursive, in that if removing the directory makes the parent directory empty, that parent directory will be removed as well. #11888 ** 'p4 filelog' now takes a '-m maxRev' flag to limit the number of revisions per file output. #11825 (Bug #1405) ** * 'p4 revert' now supports a -a flag, which reverts only unchanged files that are opened for edit or integrate, and that don't have any resolved integration records. 'p4 revert' now avoids refreshing client files which haven't changed. This requires a new p4 client executable. #11486 (Bug #2539) ** A branch view that mapped a file back onto itself could, in rare circumstances, cause 'p4 integrate' to attempt to merge the file with itself. Normally, 'p4 integrate' ignores these self-mappings. This confused the logic in 'p4 submit', which assumed a file couldn't be integrated from itself, and lead to bogus integration records and revision records with null fields being created. This has been corrected. #11289 ** 'p4 flush', a command that fakes a 'p4 sync' without moving files, is now part of the documented and supported command list. #11271 ** Branch specifications can now be locked, via an option on the branch specification, just as client and label specs can be locked. #11197 'p4 diff -sx file#rev' now implies -f, namely that it will do the checksum comparison even if the client has the file at the named rev. Normally, 'p4 diff' skips files if the client has the named rev, but -sx is generally used to verify that the client has the right text, so it makes sense to force the comparison. #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. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality 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 (Bug #1000) * ** 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). EDITABLE CHANGELISTS - #8744 (Bug #14) ** '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. '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 (Bug #333, #695, #940) ** * 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'. P4 DIFF2 OVERHAUL Summary Line - #9151 (Bug #1311) ** The header line has been changed to include a (one word) summary indicating content or type mismatches. Comparing binary files - #9127 (Bug #1607) ** Diff2 now compares binary files and prints out the line "(... files differ...)" if they are not identical. Quiet flag - #8494 (Bug #693, #550) ** 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. Using a branch view - #8306 (Bug #799) ** 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. BIG INSTALLATION ADMINISTRATION MaxResults avoids unwieldy operations - #8720 (Bug #1189) ** '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 inadvertent, 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. Access times for clients, branches, labels - #8276, #9648 (Bug #1236) ** 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). Archive validation - #8587 (Bug #861) ** '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. Compressed checkpoints/journals - #8558 (Bug #61) ** 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. 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 (Bug #1319, #1670) ** 'p4 jobspec' has been altered to handle read-only 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'. #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 inadvertent updates by other users, you can use the upgraded lock mechanism (see #7787). #8713 (Bug #812) ** The new 'p4 counter' command allows users with 'review' access to set and delete counters directly. #8557 (Bug #459) ** '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. #8556 (Bug #420, #429) ** 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. #7848 ** The logging done by setting P4DEBUG to "server=1" now puts all info for each operation on a single line. #7787 (Bug #850, #962, #1043, #1144) ** 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_. The client option 'allwrite', present since 98.2, has now been documented in 'p4 help client'. This option leaves all client files writable. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Major new functionality 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 (Bug #349, #773) * 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 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 (Bug #637) ** 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. 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 (Bug #819) ** $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'. $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 (Bug #833) ** '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. #5381 (Bug #709) ** 'p4 filelog' now includes the filetype at each rev. #5369 (Bug #694) ** 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. -------------------------------------------------------------------------- -------------------------------------------------------------------------- Upgrading from 97.3 and earlier. 1. NEW DATABASE FORMAT WITH FLEXNAMES. The 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 from pre-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. 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. 4. 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. 5. $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'.