Major Enhancements

#1357095 (Bug #5897) * ** Ditto (&) mappings are now supported in client views. These allow a client to map files from the depot into multiple locations in the workspace in a one-to-many fashion. Files mapped with this flag are read-only, and may not be open by 'p4 edit', etc. The same files may also be normally mapped, allowing a single copy of the file in the workspace to be openable. Each sync'ed copy of the same file has it's own have record, and so can be sync'ed to a different revision from the other copies of the same file. To sync a specific copy of a file, you must specify the path in client syntax. Existing clients will be able to sync files mapped with ditto mappings. In order for 'p4 fstat' to show details about ditto mapped files, p4 must either be updated or the '-zexpandAndmaps' global flag must be provided.

#1320223 (Bug #72847, #83427) ** A new command 'p4 reshelve' copies shelved files from an existing shelf into either a new shelf or one that has already been created. The command executes on the server and does not require a client workspace. See 'p4 help reshelve'.

#1243015 (Bug #79913) * ** The p4 command line, run interactively, will now prompt for login if a command that requires authentication is run when the user is not authenticated. If the login is successful, the original command continues.

#1241816 (Bug #81114) * The p4 command line now supports a simple, yet powerful, command aliasing feature. Aliases are read from your ~/.p4aliases file (p4aliases.txt on Windows platforms), and are applied to the command you entered before it is sent to the server for execution. Full documentation for the aliasing features is available on the Perforce website or by issuing 'p4 aliases help'.

#1214192 (Bug #78800) ** Provided that both DVCS partner servers are at 2016.1 or higher levels, the DVCS fetch/push protocols now support copying a shelf from one server to another. Specify the shelf to copy with the '-s NNN' flag to 'p4 fetch', 'p4 push' or 'p4 zip'. Copying a shelf always results in the creation of a new shelf in the destination server; existing shelves, even if similar, are not overwritten. The new shelf will be owned by the user issuing the push or fetch command, even if the shelf being copied was owned by some other user. The shelve-submit and shelve-commit triggers in the destination server are run for the new shelf.

Minor Enhancements

#1367341 (Bug #84856) ** 'p4 -Ztag info' can report low level TCP connection information in a field 'transportInfo' if it is available on the platform. This field may have multiple lines of output which may affect simple parsers.

#1351675 (Bug #2620) ** 'p4 user -d' and 'p4 group -d' now feature a new '-F' flag. This flag removes the user or group members from groups, and also removes the user or group from the protection table when deleting the user or group. See 'p4 help user' and 'p4 help group' for details.

#1340295 (Bug #79558) ** 'p4 switch' now features a '-Rx' flag. This flag controls which actions that switch reconciles when changing streams. see 'p4 help switch' for more details.

#1339945 (Bug #84841) * P4IGNORE files now support escapping '#' comment characters with '\' so that filenames beginning with '#' characters may now be ignored.

#1324084 (Bug #53693) ** 'p4 protects' now features a '-M' flag which unlike '-m' applies exclusions against the specified path when calculating the maximum permission.

#1317819 (Bug #84182) ** Form triggers now provide a new 'specdef' variable that provides the definition for the form's spec.

#1316579 (Bug #52073) ** The 'route.csv' log can now be defined in order to log the full network route of authenticated client connections. Errors related to net.mimcheck are also logged against the related hop.

#1315758 (Bug #81357) ** Entries in the client spec field 'ChangeView' may now be provided in client syntax as well as depot syntax.

#1312518 (Bug #76643, #76046) ** 'p4 server -c edge-server|commit-server <serverID>' runs configuration commands for edge or commit servers. 'p4 server -o -l <serverID>' shows current distributed configuration settings for a commit or edge server as well.

#1307507 (Bug #11948) ** 'p4 group' now has a 'MaxOpenFiles' field, which can be used to prevent users from accidentally opening too many files in a single command. See 'p4 help maxopenfiles'.

#1306511 (Bug #70917) ** 'p4 changes <filepath>#have' now accesses the db.have table lockless for the duration of the compute phase.

#1265017 (Bug #5626) ** 'p4 dirs' and 'p4 files' now have a '-i' ignore case flag that can be used to list directories/files case-insensitive against a case-sensitive server.

#1261234 (Bug #76243) ** 'p4 labelsync/tag <filespec>' where the filespec is a path that does not include a client or label will execute the compute phase lockless for the db.rev table.

#1248091 (Bug #77847) * ** Using 'p4 switch' with DVCS no longer removes your current working directory when switching to a branch that does not contain that directory.

#1245813 (Bug #75242) ** 'p4 -Ztag change -o' now displays the access time for shelved files. An admin can make use of this information to remove old or abandoned shelves. Note, accessing the shelf in anyway will update the access time except for 'p4 describe -s -S <shelf>'.

#1245231 (Bug #81003) ** The 'p4 remote' option "nocopyrcs" can be set to disable the DVCS fetch/push optimization which copies entire RCS ,v files as a single file transfer.

#1243936 ** 'p4 integrate -v' has been deprecated, having been made obsolete by the introduction of 'p4 populate' in the 2012.1 release.

#1243887 (Bug #63964) ** 'p4 annotate' now features a '-T' flag to align the leading part of each line of output to a tab stop. See 'p4 help annotate'.

#1240991 (Bug #79755) ** SSO authentication triggers may now be used in with when native LDAP authentication is enabled. In this case, users who authenticate by LDAP can set a client-side SSO script instead of being prompted for a password. Provided that the SSO trigger succeeds, the active LDAP configurations are used to confirm that the user exists in at least one LDAP server; the user must also pass the group authorization check if configured. SSO triggers will not be called for users who do not authenticated against LDAP.

#1238714 (Bug #79559) ** The owner of a shelf can now delete it using the '-d -f' options even if there are pending resolves that involve files from that shelf.

#1237288 (Bug #79804) ** The new option '--me' can be used with 'p4 changes' and 'p4 clients/labels/branches' as a shorthand for '-u $P4USER'.

#1236486 (Bug #80391) ** Provided that both the local servers and the shared server are at 2016.1 or higher, DVCS configurations that employ files of type +l can now use the new --remote flag on the 'p4 edit', 'p4 delete', and 'p4 revert' commands to lock +l file types exclusively on the shared server, with the locks released automatically when the modified files are pushed. Note that the shared server must be configured as a Commit Server to enable this support, and must set server.allowremotelocking=1.

#1232507 (Bug #79942) ** 'p4 fetch -v' and 'p4 push -v' are now less verbose by default, and the new '-O' flag allows you to increase the level of verbosity if you choose. See 'p4 help fetch' and 'p4 help push'.

#1232022 (Bug #53806) ** 'p4 verify' now supports the '-A' flag to allow files in archive depots to be verified prior to issuing the 'p4 restore' command.

#1231264 (Bug #80305) ** The native LDAP features now support performing LDAP searches with paged results. This is useful when the returned results set could be larger than the LDAP server's allowed limits. To enable this, set the new 'auth.ldap.pagesize' configurable to a value less than the LDAP servers result limit.

#1230024 (Bug #979) ** 'p4 protect' now supports comments (## prefix) which can be either interlaced with protection entries or appended to them.

## prevent update to this area of the repo write user mike * -//depot/readonly/location/... write user * 10.1.1.1 //depot/secret/location/... ## Jeff

P4Admin comments and 2016.1 native stored comments are currently not compatible.

A new long option '--convert-p4admin-comments' has been added to the 'p4 protect -o' which will convert any of the P4Admin style comments into the new improved format. Once saved the 'p4 protect' table can be edited and saved with the comments remaining intact (however as of this release you can never go back to the P4Admin tool for your protections after the conversion - and while the protections is only a small part of the admin tool its linked very closely together).

e.g. Convert and save:

p4 protect --convert-p4admin-comments -o | p4 protect -i

#1227849 (Bug #79439) ** When syncing open moved files (when either open for edit and moved in the depot, or open for move and edited in the depot), a resolve is scheduled against the revision of the other file that corresponds to the revision range specified on the synced file. If no such revision exists, the older behavior (syncing to the head revision of an edited file, or the move/add rev of a moved file) is used instead.

#1225119 (Bug #78430) ** 'p4 fstat' now displays the working revision (workRev) for opened files. The working revision is usually the same as the have revision (haveRev) but may differ if the file is explicitly synced to an older revision while open, or implicitly synced as it is opened.

#1223153 (Bugs #78281,#79086) ** The 'p4 remote' spec now supports the ArchiveLimits: field. This field may be used to establish limits on the number of archives desired in a DVCS repo. These limits are enforced by the 'p4 fetch' command. The typical expected use of this field is for scenarios involving a mix of small (source code) files, where all archives are retained, and large (media asset) files, where only the N most recent archives are retained in the DVCS repo.

#1218702 (Bug #80232) ** New flag '-s spec' for 'p4 protects' allows the 'super' user to run the command using the contents of the file in the spec depot rather than the current protections table. This allows for back-in-time browsing of protection spec changes. Note that protects output will be based on current group data and is therefore not guaranteed to be completely accurate.

#1217261 (Bug #73699) ** New flag '-f' for 'p4 dbstat' to show free pages in btree files. Allows admins to view into how full the db files are and how much space can be recovered or will be reused before the files grow again.

#1214190 (Bug #72880) ** 'p4 renameuser' now supports a -f flag to bypass the checks against accidentally merging two unrelated users.

#1214183 (Bug #75237) ** The 'p4 counter' and 'p4 key' commands now accept the paired flags '--from' and '--to'. A command of the form 'p4 counter --from=XYZ --to=abc my-counter' sets the counter 'my-counter' to the value 'abc' only if it currently has the value 'XYZ'.

#1214182 (Bug #75236) ** The 'p4 counter' and 'p4 key' commands now accept the '-v' argument when setting or incrementing a key. If -v is specified, the previous value of the counter or key is displayed as part of the command output.

Bug Fixes

#1369710 (Bug #85876) ** 'p4 submit --parallel' was not supported in a federated environment when the commit server is on a Windows platform. Trying to do this in this scenario now causes the submit to proceed without using the parallel threads. Also this has been documented in 'p4 help submit'.

#1368620 (Bug #85851) * 'p4 clone' was failing to copy the "Options:" values from the remote spec on the central server, and was instead using a hard-coded "Options: unlocked nocompress" for the 'origin' remote.

#1366865 (Bug #79423) ** 'p4 changes' would ignore a client's ChangeView if the specified path matched a sufficient number of revisions, invoking a specific optimization. This has been fixed.

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

#1365819 (Bug #85738) * P4IGNORE files inside directories that should have been ignored by P4IGNORE were being read, and any reverse rules were being applied within that directory. These files are no longer being read.

#1365347 (Bug #85376) ** Fix for false database corruption error when long descriptions are updated concurrent to readers reading the same description.

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

#1362824 (Bug #85371) ** 'p4 sync --parallel=..' using multiple file arguments could fail to transfer some files if any of the file paths did not contain enough data to use parallel threads. This has been fixed.

#1357895 (Bug #85404) ** When LDAP based user auto-creation is enabled, if the 'p4 ldap' spec has the 'downcase' option enabled, then the new user will be created with a lower case username.

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

#1355500 (Bug #85298) ** 'p4 sync -r' and 'p4 switch -r' could fail to update a file that was open on another client with the new depot path. This has been fixed.

#1354741 (Bug #79424) ** The server consistency check command 'p4d -xx' now reports invalid arguments and allows the user to just provide a single table argument to perform all checks for that table.

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

#1349284 (Bug #83729) ** Configuring a readonly client by adding the 'Type' field only succeeded if it was placed after the 'Options' field.

#1348225 (Bug #85019) * The default P4IGNORE rules no longer match directories named the same as the value of P4CONFIG.

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

#1334196 (Bug #83965) ** Removing the client.readonly.dir setting from a server with one or more clients of Type: readonly already defined makes those clients unusable until the configuration setting is restored. This situation is now diagnosed with a more precise error message.

#1333068 (Bug #84451) ** Issuing control-C during submit from a 2015.2 Edge Server using submit.unlocklocked could leave files locked on the Commit Server which were difficult to unlock. This has been fixed.

#1332907 (Bug #84705) ** A failed 'p4 fetch' or 'p4 push' operation now removes any archive files which it copied to the destination server prior to the failure.

#1330870 (Bug #84661) ** 'p4 renameuser' now re-indexes any jobs owned by the renamed user.

#1327174 (Bug #83931) ** 'p4 istat' will now run directly against an edge server rather than be forwarded to a commit server.

#1324686 (Bug #75521) ** 'p4 labels -e label.*' would fail to match labels due to the processing of '.' adjacent to '*' wildcard.

#1324692 (Bug #84006) ** 'p4 submit' from an Edge Server using revertunchanged would leave reverted files writable. This has been fixed.

#1324437 (Bug #84468) ** A parallel sync via a proxy might not distribute the file transfer load across all the transmit threads as fairly as it should.

#1323707 (Bugs #84436, #84437) ** 'p4 journals' now displays the full error message text for a failed checkpoint or journal entry. Also, if a checkpoint failed due to the checkpoint filesystem being mounted read-only, a checkpoint-failed entry is now written in db.ckphist.

#1323224 (Bug #84441) * 'p4 clone' would mis-handle depot file paths containing spaces.

#1322105 (Bug #84375) ** The 'SearchBindPasswd' field of the 'p4 ldap' may now be quoted. This allows '#' characters to be used in the password without being interpreted as the start of a comment.

#1321747 (Bug #84368) ** All replicas of a Commit Server now accept and process the 'opened -x' command. Prior to this change, only Edge Server replicas did so.

#1321128 (Bug #80987) ** Selection of a base when merging a move operation was improved for a particular case involving a complex sequence of previous move operations.

#1319794 (Bug #83748) ** Servers with structured server logs configured will no longer stop responding if a trigger is defined which executes automated 'kill' commands on server sub-processes.

#1318024 (Bug #75136, #75135, 71853, 85501) ** Parallel sync and submit commands will not fail when net.parallel.max is unset or the requested number of parallel threads exceeds net.parallel.max. Instead the command will proceed without using parallel threads, or will use the max number of allowed threads. In these cases an informational message will also be written to the log.

#1315787 (Bug #84128) ** A server which is configured to use submit.identity=serverid but did not have a serverid defined now generates an error at submit, instead of generating a malformed changelist identity.

#1313674 (Bug #84022) ** A replica server which was started up at a moment when its master server was down or unreachable would fail to start correctly, and would print an incorrect error message about archive filesystem configuration in the replica log.

#1313382 (Bug #84023) ** The 'p4 zip -A' command could fail to include all the necessary archive files, leading to an "archive entry missing" error when running 'p4 unzip -A' subsequently.

#1313143 (Bug #80887) ** The 'serverlog.retain.N' configurable now restricts the number of rotated logs kept when the 'serverlog.counter.N' configurable is also set for the same log.

#1311906 (Bug #83995) ** 'p4 sizes -h/-H' and 'p4 diskspace' could print incorrect values for the fractional component of the file or filesystem size.

#1308952 (Bug #1557) ** 'p4 reviews <filepath>' was not honoring exclusion lines.

#1302870 (Bug #81355) ** Files restricted by a changeView mapping are no longer openable. These files were already read-only, but gave no indication until submit rejected them. This makes the changeView's read-only behavior consistent with remote depots and ditto mappings.

#1263380 (Bug #83500) ** If the operating system should run out of process resources, and if structured server logging was configured at a high enough level, the message recorded in the structured server log about the exhaustion of process resources was improperly formatted.

#1260940 (Bug #55795) ** The replica behavior fix for autoreload labels (bug 77558) now also applies when lbr.replication=readonly.

#1257690 (Bug #83296) ** Starting the Server on read only db files incorrectly produced a licensing error. Now an access denied error is produced.

#1255960 (Bug #81403) ** A DVCS 'fetch -t' command which encounters an internal error relocating the conflicting changes will no longer loop forever retrying the failed change relocation.

#1247366 (Bug #79908) ** Propagating attributes could be removed when performing 'p4 resolve -at' after unshelving into an opened file. This has been fixed.

#1245711 (Bug #81034) ** Now at most one backup thread is allowed in a server at the same time. Multiple backup threads are never useful and can cause unexpected behavior.

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

#1242972 (Bug #81083) ** When authentication triggers have been configured, operator users now authenticate against the auth-check trigger instead of the service-check trigger.

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

#1236537 (Bug #59266) ** On Linux and other Unix-like platforms, the 'p4 diskspace' command was reporting the filesystem's reserved space as used. 'p4 diskspace' now excludes the reserved space from the display of the used space, which more closely matches the behavior of the system 'df' command.

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

#1234884 (Bug #75212) ** 'p4 configure show server.locks.dir' now shows the correct default.

#1234286 (Bug #80762) ** 'p4 resolve -at' between files with differing charsets will now copy the charset metadata even if server.filecharset is not set. This prevents the 'copy from' resolve record from downgrading to a 'merge from' due to the charset difference.

#1232803 (Bugs #72749,#80586) ** 'p4 configure show', with no additional arguments, would show some configuration variables that were not explicitly set, but were instead still operating with their default values.

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

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

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

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

#1224269 ** 'p4 shelve' now displays the working revision for files being shelved rather than the current depot revision; this fixes an issue with added files being displayed as '#none'.

#1223845 ** The default value for lbr.retry.max is now 50.

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

#1222063,1304112 (Bugs #80274,#83625) * 'p4 init' and 'p4 clone' would sometimes display errors twice.

#1214194 (Bug #79836) ** If rpl.checksum.change >= 1, the 'p4 unzip' command will now write changelist checksum journal notes upon completion.

#1214188 (Bug #79814) ** 'p4 sizes //...@=NNN', when used to display the size of files in a shelf, could display incorrect data if one or more files in the shelf had been replaced using 'shelve -f' or 'shelve -r' and the actual content of the shelved file was unchanged.

#1214187 (Bug #79569) * The -p flag to 'p4 clone' is now optional; if not specified, clone uses the remote server specified by P4PORT in the environment. Additionally, when cloning a single filepath, the '-f' flag is now optional in front of the path, so the command that previously required 'p4 clone -p host:port -f //file/path...' can now be specified as 'p4 clone //file/path...' if P4PORT is already set.

#1214184 (Bug #77782) ** The archive deletion journal records for archives deleted by certain shelve and submit command forms are now written in individual journal transactions, which can improve the responsiveness of replicas waiting for the archive deletion to complete.