Major Enhancements

#877419 ** * DVCS workflow support has been added to Perforce. Use this new functionality to accomplish the following goals:

1) You can create a 'personal server' that you can use to manage versioned content all by yourself, without interacting with any other Perforce server unless you want to.

2) You can copy work between Perforce servers to implement various collaboration workflows.

3) You can rewrite and revise history to discard unwanted intermediate information.

Use the 'p4 init' command to create a new personal repository, or use the 'p4 clone' command to create one with files from an existing server. Use the 'p4 switch' command to create new streams, and to switch back and forth between existing streams.

Use the 'p4 fetch' and 'p4 push' commands to copy work back and forth between servers, either peer-to-peer or in a hub-and-spoke or hierarchical arrangement. Use the 'p4 remote' and 'p4 remotes' commands to manage connections to multiple partner repositories.

Use the 'p4 unsubmit' and 'p4 resubmit' commands to rewrite and revise history prior to pushing that work to other servers.

The new fetch, push, and unsubmit functionality is disabled by default, even after upgrading your server executable to 2015.1. To enable the new functionality, you must set the 'server.allowpush', 'server.allowfetch', and/or 'server.allowrewrite' configurables to enable the desired level of operation.

New trigger types and trigger variables are available.

See 'p4 help dvcs' for complete information.

#856900 ** Compression of db.have table. By encoding the depot path field with an offset into the client path field, db.have records have been reduced by up to 35%. Checkpoint and journal files will continue to have the expanded form. This space saving will happen over time as clients get resynced. Admins who regularly restore from a checkpoint will notice this the first time the table is restored.

Minor Enhancements

#1010616 (Bug #77331) ** The server spec has a new field, 'ExternalAddress', to specify the external address on an edge server that is used for connections from a commit server. Although it is an optional field, it must be set in the edge server spec in order for parallel submit commands to work in a federated environment.

#986989 (Bug #53185) * ** 'p4 submit' now accepts the '--parallel' flag, to specify that multiple files should be transferred in parallel, using independent network connections from automatically-invoked child processes. In order to run a parallel submit, the configurable net.parallel.max must be set to a value greater than 1.

#976359 (Bug #76507) ** The 'p4 unlock' command now includes the -r flag to allow unlocking files left locked by a failed 'p4 push' or 'p4 fetch' command.

#969791 (Bug #75172) ** Peek locking information now reported along with normal lock information

#968391 (Bug #74665) ** 'p4 rec' is a now a synonym for 'p4 reconcile'.

#967271 (Bug #75557) ** Now 'p4 status' displays files already opened in addition to files that need to be reconciled.

#966422 (Bug #75520) ** New command 'p4 admin setldapusers' allows a super user to update all non-super, standard users to use LDAP authentication in a single command.

#965070 (Bug #76237) ** Previously 'p4 servers' and 'p4 servers -J' could not be run by an operator. Now an operator can run the 'p4 servers [-J]' commands, which allow operators to monitor the replication status of a group of replicas.

#964882 ** 'fstat -Oh' is now lockless on db.rev and db.revtx at db.peeking=3.

#964603 (Bug #55582) ** Previously 'p4 journalcopy' and 'p4 pull' could be run only by a superuser. Now an operator can run 'p4 pull -l -j', 'p4 pull -l', and 'p4 journalcopy -l'. This allows operators to monitor the replication status of a replica.

#963443 (Bug #65298, #74627) ** The new 'mergeany' stream option allows flow rules for 'p4 merge' to be ignored for a particular stream. The default option of 'mergedown' preserves the previously existing flow rules. Streams created by 'p4 switch' on a personal server use 'mergeany'.

#963085 (Bug #75519) ** The LDAP automatic user creation feature enabled as part of setting 'auth.default.method' to 'ldap' has been moved to a new configurable 'auth.ldap.userautocreate'. In order to allow 'p4 login' to create user automatically after successful authentication against an LDAP server, the 'auth.default.method' configurable must be set to 'ldap' and the 'auth.ldap.userautocreate' must be set to 1.

#962982 (Bug #75562) ** New simpler syntax for 'p4 merge' with streams. If no arguments are specified, the target defaults to the current stream, and the source defaults to the current stream's parent. A different source can be specified with '--from STREAMNAME', which is an alias for '-P'. The stream may be specified as a directory name relative to the current stream depot, e.g. '--from main' instead of '--from //Ace/main'.

#962680 (Bug #19474) ** New command 'p4 ldapsync -g' updates Perforce groups' users list to match the members of an LDAP group. This requires LDAP fields on the group specifications to be set for any group that is to be synchronized with an LDAP group.

#959007 (Bug #75748) ** The read-only LDAP search user's password is no longer stored in cleartext in the LDAP configuration spec files.

#952949 ** 'p4 sync' will now automatically resolve files where the previously synced version does not differ from the newer depot revision.

#946084 (Bug #64757) ** 'p4 revert' now supports a new flag '-C client'. This flag allows a user with admin privilege to revert files opened in another client.

#938958 (Bug #4063) *** ** * The Windows platform can now support filenames longer than 260 characters. The tunable must be set where ever this functionality is required, Client and Server.

#936955 (Bug #75207) ** 'p4 reconcile' will now detect files that are open for delete but are physically present on the client, and reopen them for edit.

#930083 (Bug #71699) ** 'p4 interchanges' now reports changes that consist solely of 'ignored' integrates if those changes have not yet been integrated into the target. #907436 ** The new '-r' flag for 'p4 sync' permits pending work to be carried over to a different file when the client view is changed. For example, pending work can be moved to a different stream by running 'p4 client -f -s' followed by 'p4 sync -r'.

#901864 * ** 'p4 status -s' previews files needing reconcile, but lists files to be opened for add in subdirectories rather than individually.

#900158 (Bug #68860) ** 'p4 add' now traverses the workspace when given a file argument containing '...', similar to 'p4 reconcile -a'.

#897834 (Bug #74382) * 'p4 -G' now accept marshalled inputs from Python version 3 or later.

#861918 (Bug #72999) ** An unnecessary update to the db.locks table has been removed from the file transfer phase of 'p4 submit'.

Bug Fixes

#1017756 (Bug #75344, #77391, #77392, #77395, #77421, #77577, #77578) ** In a distributed installation, fix records for jobs would not be global until submit. This could lead to inconsistent information depending on which edge server you were connected to. With this change, all fix record modifications made through 'p4 change' or 'p4 fix' are distributed to all participating servers.

#1012267 (Bug #77505) ** 'p4 sync --parallel' could issue malloc errors when a user enters a value for threads that overflows an integer. This has been fixed.

#1010386 (Bug #77471) ** The 'reload -p' command, used to migrate a workspace from one Edge Server to another, or between an Edge Server and the Commit Server, failed in certain specialized licensing scenarios.

#1008489 (Bug #77390) ** In a distributed installation, a pending change can be viewed on a server other than the server where the change was created. In such a situation, the pending change will not display a list of open files (the open files are shown only on the owning server). The 'change -d' command would incorrectly allow the pending change to be deleted if the command was issued on a server other than the owning server; this behavior is fixed and the command is now rejected with an appropriate error message.

#1004762 (Bug #77358) ** Fixed a crash that could occur when unshelving moved files to a different branch.

#1003603 (Bug #77229) ** The istat command run against a task stream target was not detecting delete actions in the parent stream, while the revisions in the task stream had not been promoted. Fixed.

#1003287 (Bug #77269) ** On a forwarding replica with server.depot.root set, a submit which added new files to a depot with a relative mapping would cache copies of those files in the default location under P4ROOT, instead of in the directory named by server.depot.root

#1002985 (Bug #76685) ** Stream 'import+' paths defined in streams whose parent type is virtual were not checking for the base (submittable) path of the target stream, causing a warning on 'p4 edit' and failure on 'p4 submit'. Fixed.

#1001669 (Bug #77231) * P4CLIENTPATH checking would not allow filenames with '..' as part of a path component. Fixed.

#999127 (Bug #77223) ** Replication threads (pull or journalcopy) using "long poll" (-i 0) could sometimes report a failure to open the wrong journal file. Fixed.

#998869 (Bug #73278) ** A replica with rpl.checksum.change set to 2 or higher might incorrectly report that a changelist checksum differed if the changelist was submitted by a workspace with SubmitOptions = revertunchanged and at least one unchanged file was reverted during the submission of that changelist.

#992976 (Bug #77084) ** 'p4 -Ztag resolve -ot' now correctly displays the base for forced text merges of binary files.

#992705 (Bug #77031) * Client progress indicators now work for values of 1 million and higher.

#984381 (Bug #76808) ** The Perforce Windows Service shutdown time has been been shortened from a maximum of 120 seconds to a maximum of 15 seconds. This is bit more friendly to "net stop".

#980686 (Bug #76686) ** Parallel sync could under some high concurrency scenarios scan too many rows from db.sendq. This has been fixed.

#979648 (Bug #76627) ** Authentication failure occurs attempting to use P4V or P4VS clients -> swarm integration in a DCS configuration.

#978994 (Bug #76443) ** 'p4 status' could produce corrupted filenames in its output on windows platforms when the command is called with '/' as part of the file argument. This has been fixed.

#978936 (Bug #76625) * Commands that do checksum verification of client files were always reporting symlink files on Windows clients as changed. Fixed.

#976632 (Bug #76190) * If a password was set via P4PASSWD or the -P option, ticket lookups would fail. These ticket lookups are needed to check for valid logins on remote servers while the local server is logged in via password. Fixed.

#976629 (Bug #54717) ** If there was an invalid ticket in the ticket file and a valid logged in ticket in P4PASSWD that valid ticket was not honored. Fixed.

#976189 (Bug #76546) ** Parallel sync's per-thread batch count could under some circumstances exceed what was specified in the 'batch' argument. This has been fixed.

#975020 (Bug #76277) * In some cases p4 set -S Perforce may not display the setting for P4PORT. This has been corrected.

#972184 (Bug #37989) ** 'p4 submit' now checks that if a text file would add new revisions to an existing RCS archive file, that that file exists. This check can be disabled by setting the new configurable 'lbr.rcs.existcheck' to 0.

#971892 (Bug #76371) ** 'p4 integrate' no longer exempts files from searches for renames based on the presence of direct credit in the reverse direction.

#969974 (Bug #76351) ** 'p4 submit' from an edge server could succeed even when files of type 'ctext' failed to transfer to the commit server. This has been fixed.

#968589 (Bug #67075) ** 'p4d -jr -f -s' was not rejournaling delete records when the record was not actually deleted. This causes problems when you want to align replicas with a master. Fixed.

#966093 (Bug #5617) * Form files with specifications edited are no longer removed in case of several errors. A new error reporting that the file was kept is reported. Related, the temporary files created for spec edits are now created with owner only permissions.

#965293 (Bug #61632) ** The pull and pull -u threads of replica servers no longer retain an open file handle to the journal file on the master server when they are otherwise idle.

#963201 (Bug #44559) ** Replica servers will now detect an accidental invocation of 'p4d -jc' or 'p4d -jj' issued directly to the replica, and will refuse that command. The correct way to checkpoint a replica is to run 'p4 admin checkpoint' on the replica, then rotate the journals on the master server.

#962556 (Bug #75947) ** Cluster members don't see failover if they are down at the time. Added a P4TARGET verification phase during server startup to assure that servers are updated with the latest failover changes if they occured when the server was down.

#961024 (Bug #76044) ** 'p4 submit' will no longer permit an 'edit' to be submitted to a file that is deleted at the head revision.

#960002 (Bug #73909) ** When a workspace on an Edge Server was used to merge new files into a task stream, the workspace's have records were not properly updated at the completion of the submit.

#958549 (Bug #75724) ** Erronious dbopen::get status 1 errors when file altered during submit errors are reported. Fixed.

#952713 (Bug #75810) ** 'p4d -jd' would issue an error message if db.ckphist was read-only.

#949563 (Bug #75718) ** On an Edge Server, 'p4 print -o' of a remote shelf mishandles the name of the output file.

#940873 ** A server started with 'p4d -i' no longer writes journal note 7 to its journal when it starts.

#937039 (Bug #75196) ** The post-user-info command trigger is now available for use.

#936970 (Bug #74245) ** 'p4 stream -d name' should not complete when there are clients of the stream. This protection was failing when only versioned clients (containing both Stream and StreamAtChange fields) of the stream existed. This has been fixed.

#936970 (Bug #73130) ** Deleting a stream-client fails when the underlying stream has been deleted and no-longer exists. To delete this client, first unload the client using 'p4 unload -c <client>' followed by delete using 'p4 client -d <client>'.

#933680 * 'p4 reconcile -m' will now perform digest checks on files whose modtime is older (not just newer) than the modtime value stored on the server.

#933045 (Bug #73790) ** 'p4 revert -a' now will revert files opened for add that are missing from the workspace if they do not have pending integration records.

#930749 (Bug #41230) ** 'p4 duplicate' would sometimes fail reporting corruption of the db.integed table. Fixed.

#929671 (Bug #74935) ** 'p4 configure set' now obeys the filesys.P4ROOT.min and filesys.P4JOURNAL.min configurable values.

#928004 (Bug #74855) ** 'p4 interchanges' will now exclude changes that have been integrated individually between files that do not share a single common base.

#927254 (Bug #74842) ** 'p4 integrate' will no longer consider a file that has been re-branched over itself to contain new changes relative to its parent revision.

#926748 (Bug #74663) ** If 'p4 reload -c <client> -p <commit>' was used to migrate a workspace from the Commit Server to an Edge Server, the command would complete before all the database changes made to the Commit Server had been fully replicated to that Edge Server.

#909170 (Bug #74645) * ** Resolving a file and accepting 'theirs' with modtime enabled will now set the client file's timestamp to match the depot revision its contents were copied from. Previously the server-side timestamp was copied, but the client file would not be updated until the next sync.

#908151 (Bug #72457) ** Running out of space in the shared memory db.monitor table could cause server crashs. Fixed.

#905967 (Bugs #74263,#74425) ** Stream clients of task streams can no longer be modified to point to different streams while there are opened files in the client. For non-task stream clients, a warning is given when there are opened files - which the '-f' (force) flag can override. Those files opened will remain unsubmittable until the stream field is returned to the originating stream.

#904476 (Bug #73913) ** 'p4 reconcile' elapsed time performance has been improved when detecting non-textual files to open for edit.

#901775 (Bug #74331) ** A case involving integrating a delete between two renamed files has been improved to no longer provoke a conflict.

#900691 (Bug #73887) ** The 'p4 renameuser' command can now be used successfully in a P4AUTH configuration. In such a case, you'll need to rename the user in both servers, by issuing a separate 'p4 renameuser' command to each server, in either order.

#899057 (Bug #71623) ** 'p4 populate', when run with fromFile and toFile was not checking if the target (toFile) was within a stream and therefore not able to update the change field of that stream.

#899077 (Bugs #74233,#74234) ** Certain file transfer errors were not reliably detected by 'p4 shelve -p'.

#897653 (Bug #68823) ** 'p4 reconcile', when run through a client of a virtual stream was not checking for the base (submittable) path of the target stream, causing an unnecessary warning. This has been fixed.

#892210 ** 'p4 submit' will no longer submit files open for 'add' against a head revision of 'edit'. (See change #19923, which fixed this for the case where the head revision was an 'add'.)

#887499 ** 'p4 add' will no longer open files with 'add from' credit (see change #252485) when the head revision is a move/delete, since this creates a confusing state where one file has two active names. Move operations should be undone by using 'p4 move' to move the file back into place.

#871535 (Bug #72841) ** 'p4 passwd -O' now requires that -P also be specified.

#862767 (Bug #67527) ** The following commands no longer take the server.locks/meta/db lock: obliterate (without -y), archive -n, and restore -n.

#861031 (Bug #72996) ** The metadata pull thread in a replica server with db.peeking set to 2 or higher might hold clientEntity locks longer than necessary, reducing concurrency on the replica.

#860864 (Bug #72994) ** Certain 'p4 opened' commands could potentially return incorrect results on a server with db.peeking set to 2 or higher.

#860522 (Bug #73023) ** When a background pull thread in a replica receives an error message (e.g., an authentication failure) from the master server, the background pull thread will now use the -b backoff timer, rather than the -i interval timer, to schedule the retry.