Major Enhancements

#1414787 (Bug #1649) ** A 'p4 undo' command has been added to simplify the process of backing out submitted changes. See 'p4 help undo'.

#1379442 (Bugs #2103, #27421, #75239) ** The protections table now supports delegation of control for a specific path to a user or group. A new 'owner' permission has been added which gives users the ability edit a sub-protections table by running 'p4 protect' with the subpath: the path that is granted by the 'owner' protections entry. This will open a protect spec similar to the normal protections table, but will only allow permission levels up to 'admin' to be granted for paths within the scope of the subpath. The sub-protections table will not be shown in the main protections table: the entries in the sub-protections table will be inserted immediately after the 'owner' entry: as such only one 'owner' entry is permitted per subpath. Multiple owners for a sub-protections table can be achieved by with a group. Users with 'super' permission can edit any sub-protections table without needing to be an 'owner'.

Minor Enhancements

#1442162 (Bug #16821) * ** A new configurable 'filesys.checklinks' can be used to prevent files being added that have a symlink in their directory path. When this configurable is set to '1', trying to 'p4 add' a file that is symbolically linked below the client root will fail. Setting this configurable to '2' allows the user to bypass the check by using the '-f' (force) option.

#1426811 (Bug #88088) ** Reverse integration credits will no longer be downgraded by submit due to the presence of multiple 'merge from' records if the merges were from other revisions of the same file.

#1416336 (Bugs #76601, #79465) ** 'p4 ldapsync' has a new '-u' flag that allows users to be created, updated and/or deleted based on users found in LDAP servers. #1408304 ** 'p4 copy -f' and 'p4 populate -f' will no longer copy 'move/delete' source revisions into nonexistent targets as new 'delete' revisions.

#1401167 (Bug #86401) ** Setting the new 'server.locks.global' configurable to 1 makes 'p4 lock' from an Edge Server take global locks on the Commit Server.

#1389236 (Bug #81369) ** A new 'partitioned' client type has been added. Like the 'readonly' type clients of this type have their own db.have tables that aren't journalled; however, these clients do allow files to be opened and submitted. Existing 'readonly' clients can be convtered to 'partitioned' by updating the 'Type' field.

#1362620 ** 'p4 client' now sports a '--type' (-T) flag that allows the user to specify the type of the client to create. The type can be 'writeable', 'readonly', or 'partitioned'.

#1351238 *** When using 'proxy.monitor.level' and tracking is enabled in the proxy, the tracking metrics for the 'pdb.monitor' table are reported when they are above the thresholds defined for the tracking level specified.

Bug Fixes

#1455848 (Bug #88980) ** In replica chaining configurations, replicas which were not directly connected to the master server were not processing archive deletion operations arising from operations such as submission of a binary+S file, deletion of a shelf, obliteration, archive depot operations or retype +l commands.

#1454129 (Bug #81273) ** The diskspace command now supports long filenames on Windows.

#1449303 (Bug #85596) ** The 'logparse' command no longer attempts to open an erroneous file when the structured log's configurable includes a path.

#1445625 (Bug #88728) ** The configurables rpl.awaitjnl.count and rpl.awaitjnl.interval were inadvertently swapped; they are now corrected.

#1439865 (Bug #88350) ** If an error was encountered when opening an archive file for write on the commit server during an edge submit, the commit server might crash. The edge submit now reports the error encountered and fails gracefully.

#1432514 (Bug #85257) ** 'p4 server -c' prevented users from setting arbitrary configuration values which were not specific to the server's type. Now any valid configuration commands are supported.

#1432475 (Bug #88205) ** The 'rdb.lbr' tracking metrics are now aggregated to reflect larger operations. Since the aggregated metrics might now more readily exceed a tracking threshold, the 'rdb.lbr' tracking output might be more likely to be written to the server log when the 'rpl' configurable is set to a value of two or greater.

#1432037 (Bug #78055) ** A delete of a stream containing associated unloaded clients was not checking for these unloaded clients before completion. This operation should be blocked with unloaded clients.

#1431589 (Bug #88189) ** The 'rdb.lbr' tracking metrics are now correctly reported for the edge server's metadata pull thread when the 'rpl' configurable is set to a value of two or greater.

#1425966 (Bug #88072) ** 'p4 sync' was not scheduling resolves correctly when a file was open for move/add over an existing deleted file. Fixed.

#1425400 (Bug #88085) ** The number of fsync() calls for 'rdb.lbr' executed by the commit server for coordinating the file content fetched during a parallel submit though an edge server has been reduced. In some environments, this can improve the performance of parallel submit through an edge server.

#1423738 (Bug #87945) ** Correct Abort Retry Ignore message from 3rd party memory manager on the Linux platform.

#1424102 (Bug #84137) ** The 'serverlog.file.N' configurable no longer allows invalid filenames to be set.

#1422877 (Bug #85923) * ** 'p4 submit -f reopen' could leave files readonly even when they have been successfully submitted and reopened. This has been fixed.

#1422726 (Bug #87949) ** Fixed the rev range recorded when running "p4 populate" with a revision specifier.

#1422325 (Bug #87928) ** Fixed a special case where a deleted file produced an unnecesary conflict on merge.

#1418462 (Bug #84067) ** The number of fsync() calls for 'rdb.lbr' has been reduced for the most common replication behaviors, such as a replica's metadata and archive pull threads. In some environments, this can improve replication performance for some operations.

#1417585 (Bug #87802) ** The very first 'fetch -t' command issued against a server will auto-create the 'tangent' depot in that server. Subsequent commands issued by that same network session would get errors if they referred to the tangent depot.

#1414436 (Bug #87083) ** If the domain record for a client exists on a commit server but not on the edge server (probably due to a network problem), this change now makes it possible to delete or reuse the client namespace from the original edge server that first created it.

#1412767 (Bug #87638) * The 'p4 init' command would write a small number of journal records to the end of the file specified by P4JOURNAL, if set. The local server initialization is now performed with -J off.

#1411325 (Bug #81360) ** A 'p4 fetch' command which transferred both a text (RCS) file whose archive was already present in the destination server and a lazy copy of that file, would leave the lazy copy corrupt. 'p4 verify' would report 'MISSING!' and requests for the file's content would report 'RCS checkout failed!'.

#1410971 (Bug #87181) ** Correct the digest used to ensure that content is transferred correctly to commands within triggers (such as a 'change-content' trigger) when submitting a shelf. A shelf is implicitly submitted to the commit server when a submit is run on an edge server.

#1408027 (Bug #87115) ** Deleting a client from an edge server when the commit server is down would lead to inconsistencies between the servers.

#1407749 (Bug #87327) ** Deleting a pending change with an Identity, or deleting an empty committed change with an Identity, incorrectly failed to delete the database record in the db.changeidx table.

#1406560 (Bug #72500) ** 'p4 describe' will now correctly display the working revision, rather than the have revision, for shelved files.

#1406440 (Bug #71311) ** 'p4 revert' in a federated environment could leave orphaned locks after a filetype resolve that changed files from '+l' to filetypes without '+l'. This has been fixed.

#1406332 (Bug #81024) ** 'p4 unload -o' of a client that gets interrupted could cause a server crash.

#1404063 (Bug #78359) * Parallel submit used with the '-s' client flag now includes status output for all errors.

#1401397 (Bug #86837) * ** 'p4 submit -f revertunchanged' will now revert the timestamp along with the local file permissions if the modtime option is enabled. Caveat: this may not work when submitting via an edge server.

#1398598 (Bug #86401) ** 'p4 lock -g' no longer requires '-c <change>', and now allows file arguments.

#1397598 (Bug #86850) ** It is no longer legal to define a depot named "..".

#1397137 (Bug #86855) ** Multi-threaded applications using the same connection could disrupt the flow control of long running commands like submit. This change prevents the server from executing any more callbacks as soon as the problem is detected.

#1393673 (Bugs #83614, #84042) * The utf8 file type detection has changed. Now a file must have a utf8 byte order mark (BOM) to be detected as a utf8 file type even for unicode mode servers. Also, there are new undocumented client side configurations which can change utf8 file type behavior.

#1393599 (Bug #85393) ** 'p4 populate' ignored the defaultChangeType configuration setting. This has been fixed.

#1391406 (Bug #86555) ** 'p4 clean' was allowed on an edge server using a client not bound to that edge server. This has been fixed.

#1390168 (Bug #86435) ** 'p4 server -c' would populate the DistributedConfig field with optional settings when the command had run before and had set non-optional configuration values already. This has been fixed.

#1390030 (Bug #79678) ** If the 'StreamAtChange' field in the Client spec was specified before the 'Stream' field, it would be ignored. This has been fixed.

#1388564 (Bug #86608) * A command-line alias may now use 'p4subst' to replace a pattern with the empty string ("").

#1387597 (Bug #86513) * Defining a command-line alias for a tagged-mode command fails with the error "command did not return a spec."

#1384469 (Bug #86476) ** Certain formats of structured integrity logs could cause a crash.

#1384202 (Bug #86041) ** Change handling of utf8 server type files when working with clients <= 2015.1. For these clients, the utf8 type files are treated as server type text, so as to avoid any additional line-ending. These files will not have associated BOMs (Byte order marks) when they are synced in this case. This has no bearing with clients >= 2015.2.

#1382996 (Bug #74886, #86396) ** 'p4 clean' would fail to sync files when needed when they are exclusively opened by another client. This has been fixed.

#1381955 (Bug #84426) ** 'p4 submit' from an edge server using 'revertunchanged' could leave orphaned exclusive locks if all files in the change were reverted and some were exclusively locked. This has been fixed.

#1380083 (Bug #86262) ** Improve performance around structured logs. Log writers will now only acquire a shared lock on the 'logrotate' server meta lock when there are actually writes to the structured logs.

#1380037 (Bug #85991) ** Report to stderr (except on Windows), and syslog or the event log (as supported by the platform), any errors encountered when writing to the server log or a structured log.

#1378294 (Bug #86222) ** Following a 'fetch -t' command, the 'resubmit' command must be used, with the '-R' flag to resume after any merge conflicts are resolved, to coordinate the resubmit of the tangented changes. The 'submit' command now checks for an accidental attempt to submit a change that should have been run as 'resubmit -R', and issues a message rather than allowing the submit.

#1376147 (Bug #86129) * Using a command-line alias for a 'p4 annotate' command displayed extra blank lines in the output.

#1369654 (Bug #85547) * ** Fixed a bug where a "resolve -am" resulting in a lazy copy would not set the modtime correctly on the workspace file.

#1368672 (Bug #85680) ** Improve concurrency around structured logs. Log writers will now acquire a shared lock instead of an exclusive lock on the 'logrotate' server meta lock to block log rotations.

#1367706 (Bug #85767) ** The push/fetch/zip commands no longer allow an execution which would export half of a move operation (a move/delete without the corresponding move/add, or vice versa). To export the affected changelist, either widen the DepotMap field in the remote spec to include both sides of the move, or narrow the map to exclude both sides of the move.

#1364433 (Bug #75866) ** Change 996993 is reverted, as the performance impact was large.

#1364284 (Bug #85659) ** When integrating into a renamed file, the rename is disregarded if it appears to lead outside of the target branch, based on the broader branch mapping that can be inferred from the source and target file.

#1355889 (Bug #85346) ** Fixed a memory leak in 'p4 verify'.

#1354073 (Bug #85278) ** A command running on a replica could fail to transfer an archive file from the master server, reporting that the file was corrupted, if the file was a compressed binary filetype and if the replica had chosen to transfer the file without uncompressing and recompressing it. This problem was introduced by #1020818.

#1352542 (Bug #85157) * The MacOSX command line client could fail to complete a parallel sync if two or more parallel transfers attempted to create the same directory in the filesystem at the same time; the failing file transfer would print: "mkdir: /path/to/dir: File exists".

#1341599 (Bug #85012) ** The error set by a failed post-command trigger might not have had the trigger name set properly.

#1341589 (Bug #84809) *** Using the 'proxy.monitor.level' configurable when starting the proxy could result in significant physical writes to the device on which the pdb.monitor file was located. These physical writes could degrade performance of the proxy. The physical writes for the pdb.monitor file when using the 'proxy.monitor.level' configurable have been significantly reduced.

#1341013 (Bug #84992) ** If an archive file for a local shelf on an Edge Server should become damaged or missing, deleting the shelf, or deleting or replacing that file in the shelf, will now cancel any pending file transfer for that file which was listed in 'pull -l'.

#1337988 (Bug #84848) ** * 'p4 -Zproxyverbose sync --parallel=...' now correctly displays the diagnostic information about which files were delivered from the proxy's cache.

#1335377 (Bug #84710) ** The fix for bug 70118 is generalized, and now applies to all server platforms.

#1334631 (Bug #84473) ** A replica server which has been configured to replicate archive files from its master will now correctly replicate the non-lazy-copy archive files in any task stream which contains files of type +S.