Major Enhancements

#767722 (Bug #70103) ** Distributed commit/edge servers have been further optimized to work in a data center environment. Edge servers (first introduced in 2013.2) are a great way to offload work from the main server. The following three improvements make it easier to configure multiple edge servers that can be added to (scale out) as usage increases.

Shared Archive

- When the edge server and commit server have access to the same storage device for the file content (archive), setting lbr.replication=shared has been optimized to reduce network content transfer.

Distributed Shelves

- Shelving now functions between edge servers. In the shared archive configuration (as above) shelves are automatically promoted to the commit server and are available on any edge server. Edge servers not sharing the archive with the commit server need to 'promote' shelves using the new 'shelve -p' command. If this is the first time the server has been configured as a commit server, all existing shelves will be marked promoted. If this installation is already distributed, then you must run 'p4d -xf 71917' on the commit server to promote the shelves.

Distributed Changes

- New to this release, change descriptions and status is available to all edge servers participating in a distributed configuration.

NOTE: A server configured as a 'commit' server cannot disable 'server.locks.dir' that is because these locks are required for shelve consistency. If you are a customer who has disabled this in the past due to problems with syncs, you can turn-off the longer duration lock by setting server.locks.sync=0.

#693837 (Bug #62657) ** Stream 'import' paths may now include a changelist specifier:

import import/... //depot/import/...@1000

Clients of this stream will use this changelist to limit their view of those files, such that revisions from later changelists will be automatically hidden from most commands. The changelist limits that are in effect for a given client are displayed in a new read-only client spec field called 'ChangeView'.

#650821 (Bug #31840) ** The new 'p4 clean' command (equivalent to the new '-w' flag for 'p4 reconcile') can be used to restore workspace files to match the state of the corresponding depot files. Files that have been added to the workspace but not opened for add will be removed from the workspace, and files that have been modified or removed without being opened for edit or delete will be refreshed to match the version that was last synced.

#708510 (Bug #522, #2121, #2170, #18255, #21302, #24025, #25080, #25715, #32821, #55643, #60662, #65728) ** It is now possible to specify pre/post triggers on most commands. A new trigger type of 'command' exists that executes when a command matching the specified regular expression (regex) is run. E.g.

banner command pre-user-login "figlet Hello, %user%" nooblt command pre-user-obliterate "fail command disallowed" ide_fn command post-user-(add|edit) "integration_with_ide.exe"

#726410 (Bug #18330) ** Triggers can now be run directly from the depot. Plain or stream depot files with an optional revision number can now be specified when placed within percent signs. E.g. %//depot/trigger.pl%. When a depot path variable is present in the trigger command, the contents of the variable are filled with the path to a temporary file with the contents of the depot file. E.g.:

chk_path form-in client "perl %quote%%//admin/trigger.pl%%quote%"

Becomes

perl "/tmp dir/some_tmp_named_file"

#711144 ** The monitor information, the table db.monitor, will now be maintained in shared memory by default. Enabling monitor information will require a server restart. The tunable db.monitor.shared can be set to 0 to disable shared memory or set to a number of pages of shared memory should the default (1Mbyte) be too small. All changes to this require a server restart.

Minor Enhancements

#893342 ** (Bug #52885) By default when the journal is rotated any structured logs are also rotated. When the new dm.rotatelogwithjnl configurable is set to zero, log rotation is not performed at journal rotation.

#793339 (Bug #68848, #71375) ** The new trigger type 'change-failed' can be used to detect submit or populate failure as it only fires upon commit failure and returns the change number of the failed submit or populate.

#790634 (Bug #71355) ** Delete resolves are now ordered after other resolves.

#784208 (Bug #68928) ** p4d db file use changed which may improve operation on Windows platforms with some anti-virus scanners. #784278 (Bug #64900) * ** 'p4 shelve -a leaveunchanged' shelves only changed files.

#774149 (Bug #70076) ** 'p4 copy' now supports a '-f' flag to force the creation of extra revisions for integration bookkeeping purposes.

#770301 (Bug #60662, #69042) ** The following new variables are available to triggers:

argc - command argument count

args - command argument string

command - command name

clientcwd - the client's current working directory

groups - space-separated list of groups the user is in

intermediateService - presence of a Broker/Proxy

maxErrorSeverity - empty/error/warning

maxErrorText - error number and text of error

maxLockTime - user-specified value maxResults - user-specified value

maxScanRows - user-specified value

serverpid - the OS PID of the calling server process

serverServices - 'Services:' field of 'p4 server -o'.

serverVersion - version string for the server

submitserverid - id of server where submit originated

terminated - if the command exited early

termType - reason for the early termination

triggerMeta_action - command to execute by trigger

triggerMeta_depotFile - third field in trigger definition

triggerMeta_name - name from trigger definition

triggerMeta_trigger - second field in trigger definition

The %serverport% trigger variable now includes a transport prefix (eg, "ssl:", "tcp6:", or "ssl6:"). Thus "p4 -p %serverport%" can be used to connect to the server whether or not the server listens on IPv4 or IPv6, with or without SSL.

See 'p4 help triggers' for all available variables.

#766844 (Bug #70121) ** The '-T' flag for 'p4 streams' now forces tagged output.

#766646 (Bug #70579) ** The 'files -A', 'print -A', and 'sizes -A' commands now process revision specifiers correctly when accessing the archive depot.

#763331 (Bug #70458) ** 'p4 describe' now diffs text+k files with the keywords collapsed so that the diff output is more consistent with 'p4 diff2'.

#758482 (Bug #65107) ** The metadata pull thread on a replica server may now choose to specify '-i 0'. This will reduce the replica lag on that replica at the cost of slightly higher resource usage on the master server.

#752276 (Bug #70027) ** 'p4 populate' now uses the command line arguments as the changelist description if no description is provided.

#738116 (Bug #39274) * ** 'p4 sync' 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 sync, the configurable net.parallel.max must be set to a value greater than 1.

#728727 (Bugs #68822, #59107) ** When a replica server replicates a large changelist containing new integration history, the table locking is optimized to lock revision data in the replica for a shorter period.

#728562 (Bug #67686) ** Multiple counters may be updated in a single command. Please see 'p4 help counter' for details.

#724073 (Bug #30052, #58946) ** Triggers typically get their parameters via command line variables like %formfile% or %client%. Now when the new triggers.io configurable is set to 1, triggers will receive a dictionary of key/value pairs sent to their STDIN and can send their dictionary response back to the server via STDOUT, similar to how the Broker does it. This new configurable defaults to a value of 0, which is 13.3 behavior. A future release will change the default to 1.

#723545 (Bug #69286, #69288) ** An update command submitted via a forwarding replica which is interrupted while it is waiting for replication processing to complete will no longer cause unnecessary system resource usage in the forwarding replica. New system configurables are available for fine-tuning these behaviors: see 'p4 help configurables'.

#720626 ** 'p4 unload' now accepts the '-o outputFile' flag. 'p4 unload -o' writes the current state of the specified client, label, or task stream to the specified file on the client workstation, instead of unloading the object from the server to the unload depot. The client, label, or task stream remains fully loaded after the command is run. #719619 ** An administrator may use 'p4 print -U' to display the data from an unloaded client, label, or task stream.

#717327 (Bug #40148) ** 'p4 client -d -f -Fs' will delete a client even when it has changes with shelved files. In this case, the shelved changes are left intact.

#711631 (Bug #67673) * ** 'p4 reconcile -m' reduces costly digest computation on the client when detecting if files are changed outside of Perforce. This option can only be used if the files had been synced with the +m filetype, or using a client with "modtime" option set.

#710472 (Bug #66978) ** 'p4 fstat' now returns the 'isMapped' field for files that are open for add and mapped in the current client view.

#710347 (Bug #68682) ** Resolve records are now only considered to be 'pending integrations' for the purposes of 'revert -a' and 'revertunchanged' if they are of the type that will be written as permanent integration records on submit, i.e. originating from a different file from the target.

#709340 (Bug #65698) ** Super users can now run 'p4 logout -a USER' to invalidate another user's login ticket.

#705255 (Bug #36551) ** Server command options may now be specified using an alternative long-form syntax. For example, instead of

p4 reopen -c 1602 -t text+F //depot/my/file

you may now instead use

p4 reopen --change 1602 --filetype text+F //depot/my/file

To display the long-form options syntax for a particular command, use the '--explain' facility:

p4 sync --explain

Or to explain the syntax for just a single option of a command:

p4 revert --explain -k

In this release, nearly all options have both a short-form and a long-form syntax. The option behaves identically using either syntax. Some rarely used options have only a short-form syntax.

#704128 (Bug #65154) ** Expose the in-use %P4PORT% to SSO scripts so they can distinguish between the port used to talk to a broker/proxy and the real serverAddress.

#703887 (Bug #62279) ** Populate now fires change-submit triggers. As with change-content triggers, a temporary pending change record is created so that the description can be accessed, but be aware that populate does not have open files associated with it.

#696966 (Bug #57909) ** 'p4d -jd -z' now adds the '.gz' extension to the dump file if the filename doesn't already end with .gz.

#693803 (Bug #67684) ** 'p4 list' now takes the -d flag to delete a no-longer-needed temporary label.

#685967 (Bug #65732) ** The new 'p4 cachepurge' command can be used by an administrator to help manage replica servers which must be deployed on machines with limited disk space resources.

#679524 (Bug #26192) ** 'p4 sizes' now takes the -h flag to request the output be formatted in human-readable form.

#676312 (Bug #64123) ** In a distributed configuration, changes which are pending or shelved on an Edge Server are now visible in the 'p4 changes' command on other servers in the installation.

#673961 (Bug #67442) ** 'p4 copy' will now give warning messages when source files have been moved but the target is not correctly disposed to open them for move. In addition to a warning for each problematic file, there is a summary at the end suggesting a course of action to correct the problem (e.g. first copying from an earlier change that will provide a better basis for copying the move).

#664438 ** 'p4 merge' will now output scheduled resolves by default. This was previously enabled by the '-Or' flag.

#657309 (Bug #3270) ** The new 'p4 renameuser' command renames an existing user to a new name, updating all the changes, specs, and other objects owned by that user. For more information, and some issues to consider prior to running the command, see 'p4 help renameuser'.

#656580 (Bug #65730) ** The configurables template.client and template.label can be set to provide a server-wide default client and/or label to be used as a template when the new client or label does not already exist and the -t argument is omitted from the 'p4 client' or 'p4 label' command.

#656151 (Bugs #42211,#44034) ** The server.depot.root configurable can be set to modify the interpretation of a relative Map: field in all depot specs. Without the configurable set, relative maps are interpreted as relative to P4ROOT; with the configurable set, relative maps are interpreted as relative to the value of server.depot.root. #

654585 (Bugs #19368,#51693,#56354,#68105,#70602) ** The server now records checkpoint/journal history entries in the db.ckphist table. This new table is not part of the main server database; it need not be backed up and can be deleted at any time. The 'p4 journals' command can be used to diplay information from the db.ckphist table.

#644426 (Bug #64836) ** More keywords are now available with ktext files:

$DateUTC$ - date of file submission, in UTC.

$DateTimeUTC$ - date and time of file submission, in UTC.

$DateTimeTZ$ - date and time of file submission, in the server's timezone, with the timezone information included in the keyword expansion.

#618344 (Bug #64824) ** 'p4 unlock' supports the '-x' flag in a distributed installation to enable clearing of orphaned exclusively locked files.

#616600 (Bug #64822) ** 'p4 opened' supports the '-x' flag in a distributed installation to display files which are opened exclusively across the entire installation.

Bug Fixes

#803197 (Bugs #70703,71826) ** The tagged form of the 'p4 submit' command against an Edge Server was returning messages from the Commit Server in non-tagged form.

#797554 (Bug #71642) ** Renames that occurred prior to a file being re-added will no longer be considered when integrating from that file unless an 'add from' record bridges the deletion.

#794583 (Bug #45366, #71436) ** 'p4 -Ztag groups -m' could return less than the -m number of group data. This has been fixed.

#792056 (Bug #71418) ** 'p4d -jr -s j1 j2 j3 ...' only re-journaled the database updates for the first journal named on the command line.

#790488 (Bug #71314) ** 'p4 unshelve -s <arg> -c <arg2>' would fail to report if the shelved change was already committed, but instead would report "No such file(s)". This has been fixed.

#784547 (Bug #71137) ** It was possible to delete a shelf with pending resolves scheduled against a different depot file (via unshelve -b). This has been fixed so that the shelf deletion is now blocked.

#783372 (Bug #69572) ** Stream and StreamAtChange fields of a client specification were not being validated during the editor session, which could cause other spec data updated during the session to be lost. This has been fixed.

#782990 (Bug #64713) ** Prevent a file which is already opened in a numbered change from being reopened by another user who does not own the change but who is sharing the workspace of the owner of the change. This could have occurred when the '-c' was absent on the reopen command.

#777730 (Bug #70950) ** A 'p4 revert' command which ran concurrently while a 'p4 shelve' command was underway using the same workspace and changelist could cause that shelve command to crash, if the shelve command included certain undocumented arguments.

#777200 (Bug #70696) With 'db.peeking' enabled in 2013.3, long running (overlapping) 'p4 sync' operations would block 'p4 obliterate' from running.

#775130, #774830 (Bug #70845, #70906) ** Some merge cases involving files being moved, deleted, and readded in unusual ways are now handled better.

#772218 (Bug #70760) ** A situation in which 'p4 integrate' could give a mapping error with a blank path has been fixed to give the correct error.

#771811 ** The undocumented tunable rpc.deliver.duplex now defaults to 1. This means that the behavior described in change 671142 is now opt-in, rather than opt-out; you must explicitly set rpc.deliver.duplex=0 to enable the change 671142 behavior.

#769878 (Bug #66184) ** Merges made into a task stream from a stream other than its parent will now be 'promoted' and publicly visible. Note that task streams become less lightweight as more files are promoted, so it is recommended that task streams only merge/copy to and from their parent streams.

#769770 (Bug #68423) ** The 'p4 logrotate' command was not correctly rotating structured server logs with names that didn't include a file extension (.csv).

#769683 (Bug #34428) ** The 'p4 logtail' command now reports the file offset correctly when run against a Windows server.

#769476 (Bug #64593) ** The 'p4 pull' command now defaults to '-P serverid' if the replica has a serverid and no -P flag has already been specified.

#768121 (Bug #70627) ** 'p4 interchanges' could report extra changes in cases where a file had multiple sequential delete revs. This has been fixed.

#768000 (Bug #70626) * ** Allow zero line context and unified diff output.

#767850 (Bug #69355) ** 'p4 reconcile -n' and all of its aliases now only require 'read' permission on the files in its path to show what needs to be reconciled.

#767206 (Bug #70620) ** It was possible for 'p4 integrate' of a file that was moved in two different branches to be matched up with the wrong variant of the file if it had been deleted and re-added in one of the branches prior to being moved. This has been fixed.

#767009 (Bug #70548) ** 'p4 shelve -c' now gives a 'files not opened in that change' error rather than 'no such files' when there are no files to shelve.

#765126 (Bug #69975) ** The dm.proxy.protects configurable may be used to control the behavior of the protections table for connections made via proxies, brokers, forwarding replicas, or Edge Servers. For more information, please see 'p4 help protect'.

#764636 (Bug #70559) ** 'p4 list -M' on a forwarding replica or Edge Server was forwarding the list command to the central server, but was also incorrectly creating an empty list on the forwarding replica or Edge Server.

#763622 (Bug #42297) * A failed 'p4 revert' on Windows will no longer make the workspace file read-only.

#745928 ** Command arguments in structured logs can now be up to 4096 characters before they are elided (previously it was 80.)

#758833 (Bug #70224) ** 'p4 submit' from an edge server could hang if the server.locks.dir configurable was set to the same absolute path on both the edge and commit servers. This has been fixed.

#753081 (Bug #69991,#69986) * ** *** Under some unusual circumstances a client network error could cause the broker to hang and use 100% of a cpu core. Also, some network requests that experienced a transient error were not automatically retried.

#752957 (Bug #70168) ** A performance problem in 'p4 archive' introduced by change 696998 is addressed. The performance of 'p4 archive' now correctly depends on the number of revisions being archived, not on the total number of revisions examined by the 'p4 archive' command.

#750787 (Bug #70120) * On Mac OS X (and the Darwin build also) syncing a file might fail with Operation not permitted because of the user immutable flag on files. We now remove this flag to complete the file transfer.

#749425 (Bug #69604) ** 'p4 istat' in a merge direction did not indicate all outstanding changes reported by 'p4 merge'. Regardless if the the content in the target stream was correct, 'p4 istat' did not report identical change information reported by 'p4 merge'.

#749946 (Bugs #29923, #70101) * UTF16 file detection changed to help block audio files from being detected as UTF16. Files which start with a UTF16 BOM (Byte order mark) but which are not valid UTF16 or do not meet some textual tests will be considered binary.

#744802 (Bug #69776) ** A server with security=3 which uses a P4AUTH server that has an auth-check trigger defined will no longer perform password strength checking, since the external authentication system is responsible for enforcing password strength requirements.

#740482 (Bug #69603) * Conversions between the different Unicode UTF formats allow the code positions U+FFFE and U+FFFF now. These are 'sentinels' not characters and do not have printable forms, but are translatable.

#740373 (Bug #69859) ** An Edge Server with lbr.replication=cache or lbr.replication=shared would incorrectly schedule archive transfer requests in the rdb.lbr table.

#738762 (Bug #69824) ** For the 'p4 describe', 'p4 diff', and 'p4 diff2' commands, specifying a value of N for the -dc[N] and -du[N] flags that is greater than 2147483647 is now quietly ignored.

#730272 (Bug #69436) ** 'p4 status' would prefix bad characters on output lines if the file argument had leading '.' or '..' characters. This has been fixed.

#728082 (Bug #69043) ** 'p4 reviews -C <client>' with an all-numeric field for <client> would fail in a distributed environment. This has been fixed.

#727757 (Bug #69257) ** 'p4 submit' will now fail if attempting to submit a branch or copy of a revision that has since been obliterated or purged.

#727035 (Bug #69492) ** The 'p4 servers' command would incorrectly display servers of type 'broker' as 'invalid'.

#718736 (Bug #69194) ** 'p4 export -f' against an Edge Server could crash the Edge Server if it encountered journal records for Edge Server-initiated submits.

#714378 (Bug #68988) ** Files that were shelved for 'add'like operations were retaining their resolve records (add, branch, or move) when unshelved over existing depot files as 'edit' operations. Since those resolve record types do not make sense for 'edit' revisions, they are now dropped when those actions are converted to 'edit'.

#709281 (Bug #68824) ** Updating an autoreload label would write the updated label contents to a new unload file rather than rewriting the original unload file if spec.hashbuckets had been changed since the label was first created.

#707928 (Bug #52982) ** 'p4 obliterate' will now clear the cache used by 'p4 istat' when deleting revision records within a stream. Previously it was possible for 'p4 istat' to return stale results after an obliterate.

#707664 (Bug #68752) ** 'p4 counters -m' might display more counters than the -m limit if one or more of the system configurables 'monitor', 'security', 'unicode', 'minClient', or 'minClientMessage' were set.

#704245 (Bug #67904) ** 'p4 fstat -e <shelvedChange> -Rs -Ol" now reports the file size and digest of files shelved at the specified change. Previously it reported the size and digest of files at the head revision.

#699932 (Bug #19001) * The modtime client setting and +m file type modifier now only set the file modification time. Previous versions would also set the file access time to the same value as the modificiation time.

#698965 (Bug #68292) ** The diff '-dw' and '-db' flags would fail to ignore whitespace at the end of a file that did not end with a newline.

#697571 (Bug #68302) ** A 'p4 restore' command with multiple filespec arguments will no longer halt at the first filespec argument for which no revisions can be restored.

#696453 (Bug #65901) ** 'p4 changes -s restricted' and 'p4 changes -s invalid' used to return bogus data. Now these commands return an error message.

#687657 (Bug #67951) ** A rare case where ignore credit could be lost in the process of overwriting a change via copy has been corrected.

#685799 (Bug #67698) ** Integrating and resolving a moved file would sometimes suggest ignoring the move when it had been copied over by another file. This has been corrected.

#672366 (Bug #70860) ** When a 'copy' content resolve is combined with an 'ignore' filetype resolve it will now be recorded as a 'merge' to ensure that the copy does not override the outstanding filetype difference.

#659164 ** 'p4 reconcile' will now detect files that have been added to the workspace in locations that map to existing (unsynced) depot files.

#644128 (Bug #66194) ** 'p4 logstat -l journal' now works as documented.

#642804 (Bug #66179) ** For some types of file damage, 'p4 verify' will now print "BAD!" where formerly it printed "MISSING!".