Major Enhancements

#1211694 (Bug #77627) ** Stream specifications may now be opened and submitted, enabling them to be staged on a particular client and tested before being submitted atomically in a changelist along with a set of files. See 'p4 help streamcmds' for more information.

#1047057 ** Improve performance and reduce fragmentation in the 'db.have' table by partitioning 'build' clients away from interactive users. This change adds a new type of client 'readonly'. A client is configured readonly by setting the 'Type:' field in the client spec. Setting a client readonly must happen at client creation time, once set in cannot be modified. A 'readonly' client has its own personal 'db.have' database table that is not journaled and can be quickly removed. This type of client is ideal for the build automation cycle that creates a client, syncs, builds then deletes the client.

#998379 * ** UTF8 server file type added. Files detected to hold utf8 textual contents can be stored as a utf8 file. These files will have BOMs (Byte order marks) removed when stored on the server and added back when synced.

Minor Enhancements

#1237948 (Bug #75238) ** 'p4 opened -g' in a distributed environment reports files opened on the Commit Server. This can be run from any Edge Server in the distributed environment to show files that are globally locked.

#1233417 (Bug #12755) ** 'p4 annotate' now supports a new flag '-u'. This flag instructs annotate to display the user who modified the change and the date when the modification occurred.

#1230546 ** Added support through the server specification to surface a helix cluster administration server in the server spec metadata. The new Server Services Set Name is hxca-server and its server type is admin.

#1216733 (Bug #77058) ** Added support through the server specification to surface zookeeper servers and the clusterId in the server spec metadata. New Server Types: * identifier * admin New Server Service Set Names: * for type identifier: cluster * for type admin: zookeeper-server

#1212286 (Bug #76687) ** The warning messages issued when 'p4 copy' opens 'move/add' source files for 'branch' in the target (added in change #673961) have been disabled by popular request; users who are following recommended branching patterns do not generally need to worry about this situation, and so the warnings were causing more trouble than they were preventing. Admins that wish to re-enable these warnings for all their users may do so via the new undoc configurable 'dm.copy.movewarn'.

#1211671 (Bug #69771) ** 'p4 submit' from an Edge Server in a distributed environment now takes early locks on the files on the Commit Server. Now when concurrent submits occur from Edge Servers, the failures are reported earlier, resulting in less wasted time and work done on Edge Servers for failed submits.

#1210497 (Bug #79997) * p4 command line will try to discover a good character set to use if P4CHARSET is set to a wide character set like utf16. p4 set will now allow -C and -Q before the 'set' verb. Case insensitive platforms now check for setting 'p4charset' to problematic values.

#1209881 (Bug #75238) ** 'p4 lock -g -c <change>' can be used to lock files in a numbered change on the Commit Server from an Edge Server. This allows users in a distributed environment to take global locks.

#1206326 (Bug #1194) ** The label spec now allows a 'group' as the label owner. When a label is owned by a group, any user within the group may modify the label spec, and update which files are tagged by the label.

#1203354 (Bug #47288) ** 'p4 depot' now accepts a -t (type) argument to specify the type on new depot creation. Any depot type may be passed on the command with this argument, but the type will be ignored should the depot already exist.

#1171246 (Bug #77870) * ** 'p4 login' now accepts a remote name specified with the -r argument, causing the login to be forwarded to the server specified in the remote spec. If a RemoteUser is specified, the login is performed for that user.

#1130470, #1143127, #1225282, #1228379 (Bugs #79082, #80368, #80511) ** There is now a new tunable "server.global.client.views" that controls whether or not the view maps of a non-stream client on an edge or workspace server are made global when a client is modified. By default server.global.client.views=0 and so client view maps are never made global, matching the pre-2015.2 behavior.

If server.global.client.views=1 on an edge or workspace server, then client view maps will be made global when a client is modified on that edge or workspace server. If this tunable is 0 on the edge/workspace server then client view maps on that edge or workspace server are not made global when they are modified.

Note that the view maps of a client on a replica must be made global if that client is to be used as a template on another server.

This tunable can be set globally, in cluster scope, or individually for each server. Normally it would be set globally: p4 configure set server.global.client.views=1 and individual edge servers that don't need global client view maps may disable it individually: p4 configure set edge1#server.global.client.views=0 In a DCS cluster the master server and all workspace servers must have this tunable set to 1 because this is needed for client recovery in case a workspace server fails. Therefore P4CMGR sets server.global.client.views=1 at cluster scope when the cluster is created, and this setting should not be changed.

This change modifies the behavior of Bug #77790, which always made non-stream client view maps of an edge or workspace server be global when the client was modified; with this change, modifying a non-stream client makes its view maps global only when server.global.client.views=1 on the edge/workspace server. This allows client maps to be global on most edge servers while keeping them local on those edge servers that don't need or want them to be global.

Note that setting this tunable does not immediately make any client view maps be global; that happens only when a client is modified afterwards. Clearing this tunable does not delete the view maps of any clients, but will prevent subsequent changes to a client's view map from being propagated to other servers. If a client with global view maps is deleted then its view maps are also deleted globally regardless of the value of server.global.client.views; this is to prevent orphaned view maps.

#1129505 (Bug #29068) ** The commands that service users can run now includes: 'p4 logparse', 'p4 logschema', 'p4 logstat', 'p4 logtail', 'p4 servers'.

#1129944 (Bug #77291) * ** The 'p4 remote' spec now contains the new field "RemoteUser:". For DVCS scenarios where you wish to fetch and push to multiple remote servers and you need to use a different Perforce identity for a particular remote server, you can specify that identity in the RemoteUser field and it will be used by fetch/push commands against that remote server.

#1127420 (Bug #29068) ** The commands 'p4 logparse', 'p4 logstat', and 'p4 logtail' now indicate the log number for any structured logs being read. This is to assist applications that follow logs across rotations. Additionally these commands support referring to the running log files with their current log numbers. The log numbers begin at 0.

#1126846 (Bug #76036, #72755, #74831 ) ** New configurables net.parallel.* allow 'p4 sync' to automatically use parallel threads to transfer files. See 'p4 help sync' and 'p4 help configurables' for complete information.

#1100312 (Bug #79497) ** The 'p4 stream' and 'p4 stream -o' commands now default to the current client's stream if no stream name is specified.

#1099310 (Bug #75868) ** When unloading clients on an edge server, a new flag '-p' will promote any non-promoted shelves belonging to the specified client that is being unloaded.

#1099331 (Bug #73681) ** A replica with lbr.replication=cache now supports the use of the 'verify -t' command to schedule transfer of missing archive files. For this to work effectively, such a replica should have one or more 'pull -u' threads configured for it (see change 1051994), perhaps also using the '--batch=N' flag for those threads (see change 1053213).

#1073565 (Bug #76035) ** New configurables net.parallel.submit.* allow 'p4 submit' to automatically use parallel threads to transfer files. See 'p4 help submit' and 'p4 help configurables' for complete information.

#1070966 (Bugs #73912) ** New trigger types journal-rotate-lock and journal-rotate allow for maintenance routines to be run on servers after the journal has been rotated, either whilst the database tables are still locked or after the locks have been released. These triggers are intended to be used on replicas where journal rotation is triggered by journal records. The server must be running for these triggers to be invoked; running 'p4 admin journal/checkpoint' will invoke the triggers, but running 'p4d -jc' or 'p4d -jj' directly against a server will not.

#1068319 (Bug #78060) ** The behavior of cluster-only feature of workspace backup can be modified by setting a new "Backup" field in the client specification. Cluster users can set their client to opt out of the workspace backup feature by setting this field to the value "disable". By default, the value of the Backup field is assumed to be "enable" for all read/write clients. If this field is set to "disable" then that client workspace will neither be backed up nor be considdered for auto-unload. Setting this field has no impact for clients not hosted in a clustered workspace-server.

#1067861 (Bugs #40729,#79069) ** The server will now display the canonical filetype for a file, as introduced by change #7724, and will no longer display the shorthand alias, for all clients at API level 79 or above. So, for example, 'p4 opened' for a file of type 'binary+Sw' will now display: '//depot/foo#1 - add default change (binary+Sw)' rather than '//depot/foo#1 - add default change (ctempobj)'. If your application relies on receiving the shorthand aliases, either continue to use the 2015.1 (or older) client API, or get the old behavior by setting protocol variable "api" to 78 (2015.1). For the command line 'p4' executable, the output can be frozen to 2015.1 output by using -Zapi=78.

#1067301 (Bugs #78817,#78828) ** A server with rpl.checksum.change >= 1 will now write changelist checksum journal notes when performing the commands: populate, fetch, and (inbound) push.

#1066965 (Bugs #76882) ** 'p4d -xu' will no longer run automatically if there are fewer than 1000 changelists. Upgrades must be run manually unless the server is a DVCS personal server; in this case, any upgrades steps are run automatically.

#1065023 (Bug #79018) ** 'p4 changes -e changelist#' is now fully supported. This flag provides an alternative to 'filespec@change,#head' processing and can be much faster.

#1061282 ** 'p4 labels <filespec>' where the filespec is a single or wildcard revision with no range, now runs lockless.

#1056188 (Bugs #75648, #76195, #76632) ** In a distributed environment, unshelving of promoted shelves into open files and branches on a server that the shelf did not originate is now allowed.

#1053213 (Bug #78598) ** 'p4 pull -u' now accepts the '--batch=N' flag, provided that both replica and master are running at this release level or higher. The --batch=N flag is particularly intended for situations where large numbers of very small files are regularly retrieved by a replica separated from its master by a high-latency network.

#1052310, 1009333 (Bug #50432) ** Add the ability to root streams at a deeper level in the depot directory hierarchy. New stream depots contain the 'StreamDepth' field for defining the root level of a stream's path (the number of slashes found within the stream's Stream field) below the depot name. This field accepts a value between one and 10, while it defaults to one.

As new streams are created, the number of slashes of the stream's Stream field (beyond the depot name) must match the StreamDepth field of the depot. As the StreamDepth field is defined in the depot, all streams of the depot are bound by the same depth. For example - a stream depot Tango has the StreamDepth: 2 which allows for two slashes in the stream specification's Stream field beyond the depot name.

//Tango/core/Rel4.0

//Tango/docs/DevQ4

both these streams reflect the above depot StreamDepth field.

Note the performance implication; the total path to any file revision held within a stream are compounded with stream's Stream field.

See 'p4 help depot' and 'p4 help stream' for further details.

#1052216 * ** 'p4 reconcile -k' updates the have list to match workspace content. This can be used to reconcile a client's empty or incomplete have list with files on the workspace that have the same content as their mapped files in the depot.

#1051994 (Bug #78599) ** It is now legal to configure one or more 'pull -u' threads on a replica with lbr.replication=cache. If the replica is an edge-server or build-server, 'p4 sync' commands on that replica will now use any such 'pull -u' threads to service cache faults.

#1049517 (Bug #78600) ** A command which is run in a replica with lbr.replication=cache will now use a single connection to the master server to perform all its archive content fetches.

#1049398 (Bug #78553) ** On a replica with monitor > 0, the pull threads will now periodically update their status; the current pull thread state can be viewed via 'p4 monitor show -a -l -sB'.

#1049397 (Bug #78521) ** The command 'p4d -jd <dumpfile> db.<table>' now works for the tables db.sendq and db.revpx.

#1047403 (Bug #77798) ** New users that are created by authenticating against an LDAP server may now have their FullName and Email fields populated from their record in the LDAP server. This requires the relevant attributes to be named in the LDAP configuration.

#1044999 (Bugs #78470, #77790) ** Workspaces bound to an edge or workspace server may now be used as a template when creating a workspace on a different edge or workspace server. Before using a bound workspace as a template on another server you should ensure that its view map has been been made global by making a trivial change to the client (perhaps to the Description field) and saving it.

#1042495 (Bug #78035) ** The 'auth.csv' log can now be defined in order to log the results of 'p4 login' attempts. Any additional information provided by the authentication method is included in the log entries.

#1023845 (Bug #77790) ** The view maps of non-stream workspaces local to a edge or workspace server are now global and so are visible on all nodes in a distributed or cluster environment. Note that client view maps are made global only when they are saved (either created or modified); the view map of an existing non-stream client bound to a edge or workspace server is not made global until the client has been saved using a p4d that includes this change.

#1043956 ** The fetch/push/zip/unzip commands now include revision attributes as part of copying submitted changes from one server to another. Note that, once a particular revision has been copied to another server, using 'attribute -f' to change the attributes on that revision will only affect the revision on that server, not on any other server to which it may have been copied.

#1042179 ** The fetch/push/zip/unzip commands now include fix data as part of copying submitted changes from one server to another. Fix records are only added to the destination server if the corresponding job is already present on that server; jobs must be manually copied between servers. When fetch/push/unzip copies a fix record into the destination server, it runs any fix-add and form-commit (job) triggers that are defined for that server and also adds db.logger event records if the logger is enabled. The fix-add trigger is only run by the unzip command if the --enable-dvcs-triggers flag is set.

#1042005 ** * Windows long file name support now defaults to enabled. This is equivalent to this tunable setting, "filesys.windows.lfn=1".

#1041784 (Bug #75533) ** LDAP authentication using the SASL bind method can now optionally separate the realm from the username when the username is in either 'user@realm' or 'realm\user' formats.

#1039642 (Bug #77628) ** 'p4 switch' now supports switching to a point-in-time stream. By specifying 'p4 switch stream@change' the command will set the stream spec/view creation as of that change and sync any files also to the change specified.

#1038646 (Bug #76913) ** At 'db.peeking=3', 'p4 files <filespec>' will now access the rev table in lockless mode, even if not using a revision specifier or a revision range.

#1038593 (Bug #78363) ** 'p4 files <filespec>' when using a revision specifier other than #head (e.g. @label), or a revision range ending with a revision specifier other than #head, will now access the rev table in lockless mode. 'p4 files <filespec>@label' will now also access the label table in lockless mode. And 'p4 files <filespec>@change,@change' will now also access the revcx table in lockless mode.

#1038497 (Bug #77113) ** The usernames of members added to a Perforce group by 'p4 ldapsync' can now optionally be normalised into lowercase by setting the 'downcase' option in the LDAP spec.

#1037285 (Bug #78363) ** 'p4 sync <filespec>@label' will now access the label table in lockless mode. And at 'db.peeking=3', 'p4 fstat <filespec>@label' will now also access the label table in lockless mode.

#1035528 (Bug #71588) ** An admin may now run 'p4 -c <client> unlock -x -f [files...]' to forcibly unlock files of type +l which are not marked orphaned, but which can no longer be unlocked by the user who has them opened.

#1032823 (Bugs #65810, #65293, #59656) * P4IGNORE can now be set to a list of filenames and paths to files, using ';' as the separator on Windows and ':' or ';' on other platforms. Earlier items in the list are loaded before later ones. If the list item contains a slash character it is considered a path and is loaded once, otherwise the item is considered to be a filename and the directory tree will be scanned for files with that name.

#1032762 (Bug #2194) * When loading settings from a P4CONFIG file, if there are additional P4CONFIG files higher in the path with additional variables set, those additional variables are now loaded too.

#1032758 (Bug #65293) * The placeholder '$home' in any Perforce environment variable is expanded to the path of user's home directory when that variable is used. The user's home directory is taken to be the value of the 'HOME' environment variable or 'USERPROFILE' on Windows.

#1032190 (Bug #72108) ** 'p4 ldap' now stores LDAP configurations in the new db.ldap table. This table is journalled, so LDAP configurations are now included in checkpoints and are replicated.

#1029470 (Bugs #72671, #76543) ** Names of automatic labels can now be used as specifiers in import mappings on stream specs and in the 'ChangeView' on client specs.

#1023388 (Bug #76168) ** A replica may specify rpl.compress=4 to indicate that network data compression should be used for the journal pull or journalcopy connection between the replica and the master, but not for the 'pull -u' connections.

#1020818 (Bug #77708) ** A replica server with lbr.replication = readonly or cache now issues a clearer error message if an archive file is missing on the replica and also damaged on the master.

#1020055 (Bug #51182) * New client side command 'p4 ignores' reports the mappings computed from the rules defined in P4IGNORE files and allows paths to be tested against those P4IGNORE rules.

#1015978 (Bug #76105) ** The 'p4 change' spec now includes two additional fields: - ImportedBy: the user who issued the fetch, push, or unzip command which imported this change into this server. - Identity: the identity of this change. These fields are primarily useful for DVCS scenarios, in which changelists are copied from one server to another, and help you correlate the changelist's basic identity as it is so copied. In such configurations, we recommend using the submit.identity configurable to enable automatic generation of changelist identities by the submit command, unless you have an alternate algorithm which you prefer to use for generating universal changelist identity values.

#1012383 ** 'p4 fetch' now accepts the -t argument, specifying that conflicting work should be moved into a tangent in the tangent depot, automatically creating that depot if it doesn't yet exist. The tangented changes can then be resubmitted using 'p4 resubmit'. The new -t flag replaces the now obsolete -u flag.

#1009476 (Bug #77230) ** 'p4 diff2' now defaults to diffing the current stream (if any) vs its parent stream if no other branch view is specified.

#1003898 (Bug #79398) ** New trigger types push-submit, push-content, and push-commit allow for policy enforcement and tool integration for changes that are imported into a server via the push, fetch, or unzip commands. These new triggers are largely similar in behavior to the corresponding change-* triggers. The unzip command only runs these triggers if the --enable-dvcs-triggers flag is set.

#991320 (Bugs #56642, #59382, #59911, #67993, #70484, #71465, #71466) * Enhancements to the P4IGNORE rule syntax: - Unix path separators '/' are now handled on Windows as if they were Windows paths. Rules using Unix paths will now work on all platforms. - Rules with leading slashes apply to files and folders relative to the P4IGNORE file containing the rule. For example, '/*.c' will only cause C files in the same directory as the P4IGNORE file to be ignored. - Rules with trailing slashes only affect directories. - The '**' wildcard is expanded to the '...' wildcard.

Bug Fixes

#1245120 (Bug #81186) ** With 'peeking' enabled and a very high submit concurrency rate, the maxCommitChange counter may get updated in the wrong order by a DVCS fetch or push command. The bug might cause some transient inconsistency (most likely with aggressive automation that tracks submits).

#1244865 (Bug #77040) ** Large fech/push operations are now more concurrent. Specifically, the write lock on the db.counters table is held for a much shorter duration.

#1242773 (Bug #81040) ** The server.locks.archive configurable introduced by #898102 now also applies to the 'p4 restore' command.

#1239015 (Bug #80722) ** A file which was integrated from a streams depot to a local depot, or vice versa, would be placed into the wrong location in the proxy cache if it was accessed via the proxy by a command such as 'p4 sync' or 'p4 print'. Note that the symptom of this bug is in the proxy cache, but the fix is in the server.

#1236012 (Bug #80864) ** A mistake in the 'p4 remote' file mapping lines will no longer allow a 'p4 fetch', 'p4 push', or 'p4 zip' command to generate filenames with illegal depot syntax.

#1235448 (Bug #80818) ** If a fetch, push, or unzip command imported a move/delete revision which was created by a pre-2013.1 server, and the revision of that file immediately prior to the move/delete revision was an integration from a location which was not covered by the remote map used by the fetch/push/unzip command, the metadata for the move/delete revision could be damaged.

#1231617 (Bug #74532 ) ** A 'p4 client' command of a stream client which generates no views due to exceeding map.joinmax1 will now display an appropriate message.

#1228456 (Bug #73450) * Concurrent p4 login and p4 logout commands could loose tickets in the P4TICKETFILE. Similar problems are possible with concurrent p4 trust commands. Fixed by creating a .lck lock file next to the ticket file to avoid the concurrent login problem. This .lck file will be removed if it is several minutes old.

#1228149 (Bug #80494) ** A change with a missing db.desc record could cause a server crash if that change was accessed by a fetch, push, or zip command.

#1227692 (Bug #80086) ** Correct high ascii character handling when the Windows Server is in unicode mode, related to long file name handling.

#1227632 (Bug #80379) * ** On Windows an uninitialized variable could cause a file rename to fail. This has been corrected.

#1225187 (Bug #74936) ** A 'sync --parallel' command issued via a forwarding replica would complete immediately, but would sync no files.

#1223646 (Bug #80332) ** If a fetch/push command was issued with a Commit Server or Edge Server as the destination of the fetch/push, and the set of files being copied included some files of type +l, and the command was interrupted or cancelled (e.g., using ^C), then the files of type +l were left exclusively locked by a client with an invalid client name (the name was wrongly prefixed by a double slash).

#1214354 (Bug #78784) ** Submitting to a combination of task stream path and Import+ path in the same changelist is not allowed, but not prevented. This change catches the combination and rejects the submit, the user has to resubmit changes to the filepaths in separate submits.

#1203118 (Bugs #79647, #79739) ** p4d -jr would mis-handle the revStatus field if replaying db.rev journal records written by a 2005.2 or older server, and would mis-handle the mount2, mount3, stream, serverid, and partition fields if replaying db.domain journal records written by a 2002.1 through 2004.2 server.

#1202710 (Bugs #44639, #63140, #74807) ** The verify command now supports the -S flag to specify that shelved files are to be verified. This flag can also be combined with the -t flag on a replica to schedule the transfer of any missing or damaged shelf archives from the master server.

#1199869 (Bug #79507) ** LDAP connections are now reused were possible to avoid unnecessary overhead.

#1172454 (Bug #79504) ** A submit initiated on an Edge Server which failed due to a problem detected after the edge-content trigger had been checked could leave the changelist incorrectly marked as "shelved", and possibly also as "promoted", on the Commit Server, although the changelist was correctly recorded on the Edge Server itself.

#1172019 (Bug #79473) *** ** * The Windows support for filenames longer than 260 characters will now handle highbit ascii characters correctly.

#1171745 (Bug #75750) ** The replica server now makes an attempt to detect an incorrect configuration of the lbr.replication setting.

#1144449 (Bug #77333) ** The configurables 'P4NAME', 'db.replication' and 'lbr.replication' may no longer be set globally; a serverid must be specified.

#1142007 (Bug #79341) ** Since change 1017756, in a Commit/Edge configuration, when 'p4 shelve -d' deleted a promoted shelf, the fix records for jobs which were attached to the pending changelist were incorrectly removed.

#1130240 (Bug #79361) * 'p4 reconcile' could crash the client when run with a unicode server if filenames have unmapped unicode characters. This has been fixed.

#1130149 (Bug #73821) ** Unloading or deleting clients could leave abandoned shelves on servers. This change allows an admin user to force delete '-df' a shelf that has been left in this state.

#1128864 (Bugs #70118,#70738) ** Windows servers using the serverlog.maxmb setting will no longer generate duplicate server log files when rotation occurs under heavy load. As a result of this change, server lockfiles under the 'server.locks/meta' subdirectory are no longer stored in numbered subdirectories, so the lockfiles will be named 'server.locks/meta/db', 'server.locks/meta/journal', etc.

#1128635 (Bug #79104) ** Since change 616010, the 'p4 sync' and 'p4 integrate' commands have been enforcing the MaxResults limit, if set, on the size of the intermediate results of the sync or integrate command, which could in some situations mean that the user's MaxResults setting had to be large enough to contain their entire have list. Now the MaxResults limit is enforced only on the size of the final results of the sync or integrate command.

#1127279 (Bug #79353) ** A 'sync --parallel' command which sync'd any files of type 'binary' would write an incorrect value for the 'type' field of the db.have record for the binary file(s). This could cause problems later when integrating changes into these files from other branches. Any workspaces potentially affected by this bug should be sync'd to revision #0 and then re-sync'd for all files of type binary at their convenience in order to rewrite the db.have records.

#1123323 (Bug #74970) ** Structured log entries for commands that have passed through a proxy now log both the originating client's IP address and the IP address of the last proxy server. This is stored in the same format as the server log: 'client/proxy'. Setting 'log.originhost=0' will cause the structured log to only log the IP address of the last proxy server, like previous releases.

#1099636 (Bug #78495) ** When relocating a client from one edge server to another using unload/reload, any unpromoted shelves of the moved client would no longer be accessible on the server they reside.

#1098936 (Bug #77687) ** The 'p4 init' and 'p4 clone' commands can now be used from a directory with a name containing one of the Perforce wildcard characters (@/#/%/*).

#1098709 (Bug #74268) ** For 'p4 sync --parallel', 'min=N' now defaults to 9, and 'minsize' now defaults to 576 KB.

#1098514 (Bug #76009) ** The P4Admin depot deletion tool no longer reports the 'Can't snap active task stream files' error when deleting an empty depot which has no relationship to any active task streams.

#1072106 (Bug #79234) ** 'p4 fetch' and 'p4 push' now correctly purge old archives when importing new revisions of a file of type +S.

#1071810 (Bug #71853, #75135) ** 'p4 sync --parallel' and 'p4 submit --parallel' would report a misleading error message when the number of threads requested exceeds the configurable 'net.parallel.max'. This has been fixed.

#1070381 (Bug #79139) ** The zip file written by 'p4 zip -A' was missing archive content for branched files if the '-r' flag was omitted.

#1070377 (Bug #79171) ** A 'p4 fetch/push/unzip' command on a highly active server could diagnose conflicts incorrectly.

#1070043 (Bug #78498) ** The temp file created when a trigger is run from the depot now preserves the original file extension since some script engines refuse to run the file otherwise.

#1069734 (Bug #79181) ** The error message issued by change 696998 is improved to more clearly describe the reason that the file can't be archived.

#1068648 (Bug #79162) ** Replica servers wouldn't log the completion of some commands that run on the replica before being forwarded to the master.

#1068615 (Bug #57220) ** Protocol variable names are now case-insensitive. #1065877,

#1067450 (Bug #79100, #79035) ** The configurables 'rpl.forward.all' and 'rpl.forward.login' now only affect replica servers. Additionally, replica servers will no longer start if P4TARGET is not provided.

#1067300 (Bug #76977) ** A fetch command which was interrupted before completing could leave corrupted RCS archive files on the destination server.

#1065376 (Bug #77360) ** In a distributed configuration, the 'edit -n' and 'delete -n' commands for a file of type +l might incorrectly report that the file was opened by another user, though it was not.

#1065313 (Bugs #76987,#77274,#79028,#79029,#79036) ** 'p4 push' and 'p4 fetch' could mishandle file locks. In some cases, they would report locking conflicts when no such conflict existed; in other cases they would fail to detect locking conflicts. When 'unlock -r' was used to unlock files after a failed push, it would leave them open. 'p4 push' was incorrectly allowing a push to be initiated by a workspace which exists in the destination server. In some cases, 'p4 unlock -r' could crash.

#1063251 (Bug #78965) ** 'p4 fetch' on a case-insensitive server would fail with a file transfer error when fetching multiple revisions of a file of type text if the revision names differed in case.

#1061247 (Bugs #78830,#78915) ** A replica with rpl.checksum.change set to 2 or higher might incorrectly write its own journal file under conditions of high concurrency on the master, resulting in incorrect behavior and problems with replicas of this replica.

#1060249 (Bugs #78781#78812) ** p4 push/fetch/unzip now correctly detect the conflict if a file is moved simultaneously on two different servers to different destination filenames.

#1059769 (Bug #78855) * ** 'p4 sync --parallel' now works with certain custom licenses.

#1058411 (Bug #78785) ** If a replica with rpl.checksum.change set to 2 or higher encountered an internal error processing a changelist checksum note, it would halt replication. Now, it logs the error but resumes replication.

#1057142 (Bug #75822) ** The commands 'p4d -jd', 'p4d -jv', 'p4d -xv', and 'p4d -xx', if issued on a read-only copy of a server configured with one or more structured server logs, would issue incorrect messages about permissions errors on the structured server log files.

#1056616 (Bugs #26763,#26824,#61456,#70297) ** Some integer overflow problems in the display of server performance tracking data to the server log have been addressed. Tracking log data for extremely large queries will now display accurate results.

#1055820 (Bug #72351) ** A Windows server installed as a Windows Service, which has been given a server.id which does not match the Windows Service Name, will now use the server.id as its name in preference to the Windows Service Name.

#1054521 (Bug #70899) ** On a server with a spec depot configured, if the spec depot archive file cannot be written, the spec revision is now marked as purged.

#1054354 (Bug #56725) ** A 'p4 print' of a binary file, if it did not specify -o, and did not go through a proxy or forwarding replica, would send the wrong message if the archive file was missing on the server. Instead of sending a 'file not found' message to the client, it would send "Operation 'client-OutputBinary' failed."

#1054186 (Bug #73951) ** Shelving a file that is open for integrate from a revision that is hidden by the client's ChangeView will no longer produce an error.

#1050954 (Bug #78647) ** On an Edge Server with submit.unlocklocked=1, a submit which fails with "Out of date files must be resolved or reverted" could incorrectly alter the resolve state of the open files if the conflicting change was submitted simultaneously.

#1050337 (Bug #78593) ** Spec update commands now enforce filesys.P4ROOT.min and filesys.P4JOURNAL.min.

#1047418 (Bug #78444) ** The replica-specific table db.user.rp is now journaled. This means that the table data will appear in checkpoints, journals and dumps. The replica pull thread automatically filters out all db.user.rp records from its P4TARGET server, which is normally the desired behavior, since records in this table are unique to each replica's activity. However, for maintaining warm standby replicas of other replicas, you can set rpl.replay.userrp=1 for the standby replica to disable the filtering and replicate db.user.rp data.

#1046909 (Bugs #77390, #77461) ** The 'p4 change -d -f' and 'p4 client -d -f' commands now perform more argument checking in a distributed configuration. If a client is bound to a different server, 'p4 client -d -f' no longer allows that client to be deleted, and 'p4 change -d -f' no longer allows that client's pending changes to be deleted. In order to override these checks, the 'p4 change -d -f' and 'p4 client -d -f' commands now accept the '--serverid=X' flag, which can be specified when running these commands on the Commit Server to force the deletion of clients and their changes which are bound to an Edge Server.

#1046908 (Bug #78471) ** The 'p4 info' command now includes information about the server services, if this server has a 'p4 server' spec, and about the replica target, if this server is a replica. This information was previously present only when the tagged form of 'p4 info' was used.

#1046060 (Bug #73967) ** 'p4 -ztag servers' could report incorrect values for the 'User' field for server specs upgraded from an older release.

#1045565 (Bug #78497) ** Promoting a shelf, then subsequently deleting it, using the same network connection to the Edge Server could fail to properly delete the shelf. #1042783 (Bug #78427) * 'p4 -P <ticket> sync --parallel' will no longer give authentication errors for the file transfer sub-processes.

#1042222 (Bug #68933) ** Fixed unpromoted changelists being omitted from "p4 changes" output for large task streams.

#1042162 (Bug #77612) ** Fixed spurious "can't purge active task stream files" when running obliterate with a narrow revision range across a wide depot path.

#1040989 (Bug #77820) ** Increased the default value of 'net.backlog' from 10 to 128 to make the server more resilient to heavy usage spikes.

#1039831 (Bugs #73075, #74961) ** The revision specifier @client was not working properly for clients bound to a build-server.

#1039277 (Bug #78383) ** A 'p4 describe' command which accesses a remote promoted shelf now properly reports any communications-related error conditions which occur when retrieving the remote shelf.

#1039178 (Bug #77617) ** 'p4 resubmit' can now resubmit an unsubmitted change which involved the oldest non-purged revision of a file of type +S.

#1070355 (Bug #77551) ** 'p4d -i' when run under inetd on unix no longer shows 'unknown' for all addresses.

#1037755 (Bug #76982) * If a 'p4 sync --parallel' child process encounters an error writing files to the local machine, the parent 'p4 sync' command now returns a non-zero exit status to the operating system.

#1037679 (Bug #78142) ** The 'p4 admin resetpasword' command now allows the passwords of users who authenticate against the Perforce database to be reset when LDAP authentication is enabled.

#1037486 (Bug #76283) ** Performance of 'p4d -z -jv <file>' is substantially improved.

#1140112 (Bug #71839) ** When 'p4 shelve -d -c NNN' was used on an Edge Server to delete a promoted shelf, an error message 'Change NNN unknown' was incorrectly reported in the Edge Server log.

#1037192 (Bug #78009) ** It is no longer allowed to create a client named _____CLIENT_UNSET_____. Any existing client by this name can still be used, but you should plan to delete such a client (if you have created one) as soon as possible, for it can interfere with the use of P4V against this server.

#1036485 (Bug #77069) ** A 'p4 describe -S' command on an Edge Server which specified more than 1 promoted shelf which was created on a different Edge Server would fail with an 'Unknown changelist' message.

#1036596 (Bug #77433) ** In a distributed configuration, 'p4 unshelve' no longer takes the global exclusive file lock for a file of type +l which is unshelved for add.

#1035121 (Bug #78036) ** The 'p4 attribute' command is not allowed on a server which was created by 'p4 init'; also, when a revision is copied to another server by the 'p4 fetch', 'p4 push', or 'p4 unzip' commands, its traitLot field is automatically cleared in the destination.

#1034765 (Bug #75636) ** A server which has a P4NAME, but does not have a server.id file, will now read the configuration information from the server spec with ServerID = <that P4NAME>, if such a server spec exists.

#1032558 (Bug #78084) ** 'p4 push -n -v' and 'p4 fetch -n -v' no longer report that changelists to be pushed/fetched would be renumbered as change #0.

#1032010 (Bug #74056) ** 'p4 sync --parallel' would fail to expand RCS keywords properly.

#1031176 (Bug #76013) ** 'p4d -xx db.working db.have' could create spurious delete records for db.working if a file opened for move or delete is subsequently moved and submitted by another client and the opened file is then synced to the head revision.

#1030772 (Bug #77871) ** 'p4 -ztag pull -l -s' now provides tagged output.

#1030313 (Bug #77559) ** A build-server replica would incorrectly process the View: field for labels, causing the wrong set of revisions to be specified by the label. #1028751,

#1204292 (Bug #56707) ** The presence of a client spec with the same name as the TCP/IP address of a replica machine no longer causes that replica to issue the error: "Don't know how to translate paths for OS ''".

#1028372,#1028461 (Bug #77558) ** A replica with lbr.replication=cache was not able to access labels using the autoreload option.

#1027668 (Bug #77595) ** 'p4 export -f' now formats the domain type column correctly for unloaded clients, unloaded labels, and unloaded task streams.

#1026707 (Bug #77504) ** * 'p4 -Zproxyload sync --parallel=...' now correctly updates the proxy's archive cache without sending files to the client.

#1026534 (Bug #77280) ** If a change submitted via an Edge Server was rejected by a change-submit or change-content trigger on the Commit Server, the change's files were modified to read-only mode on the client machine rather than being left in writable mode.

#1026233 (Bug #77435) ** A 'p4 integ' or 'p4 unshelve' command on an Edge Server which failed to open a +l file due to a client-side file transfer error would leave an orphaned lock record in db.excl.

#1025869 (Bug #77886) ** A parsing problem with the 'p4d -i' flag is resolved.

#1025619 (Bug #77726) ** 'p4 unsubmit' commands which have multiple arguments, and which terminate due to an error while processing an argument other than the first, now correctly sync the workspace with all the work that was successfully unsubmitted prior to that error.

#1025545 (Bugs #77656, #77672) ** Audit log records for the push, fetch, zip, and unzip commands, in both the structured audit log and the P4AUDIT log, now have improved precision and additional detail.

#1025484 (Bug #77626) ** The 'p4 unsubmit' and 'p4 resubmit' commands are not available on an Edge Server, and issuing them against an Edge Server now gives an error message.

#1025380 (Bug #77326) ** 'p4 zip' no longer creates an empty zip file if the specified fileset is empty.

#1024502 (Bug #77719) * The 'p4 init' or 'p4 clone' commands, when they connect to a shared server, would cause log records to be written as an "unknown" client program and "unknown" program version.

#1011878 (Bug #77507) ** Integrate now reports "integrated in pending changelist" when repeatedly integrating into a moved file.

#1002449 (Bug #77266) ** On a replica server, 'p4 monitor show' incorrectly displayed paused background threads as terminated, and 'monitor show -s P' didn't display paused background threads at all.

#996993 (Bug #75866) ** A replica which has ArchiveDataFilter specified in its server spec will now pull archive contents for lazy copied files which satisfy the filter.

#996812 (Bug #76749) ** On a Windows server, a depot with Map: field specified using Windows-style path syntax (E:\depot\...) could not be deleted with depot -d even though the directory was in fact empty.

#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.