Release Notes for P4Convert-svn, An SVN and CVS to Perforce conversion tool. This documentation needs an update reflecting the new features on the Public release of the converter What follows is the last SVN only release information. Version 2014.1 Introduction This document lists all user-visible changes to P4Convert from release 2011.2, the first supported release. Perforce numbers releases YYYY.R/CCCCC, e.g. 2011.2/434818. YYYY is the year; R is the release of that year; CCCCC is the bug fix change level. Each bug fix in these release notes is marked by its change number. Any build includes (1) all bug fixes of all previous releases and (2) all bug fixes of the current release up to the bug fix change level. To determine the version of your P4Convert, issue the following command: java -jar p4convert.jar --version -------------------------------------------------------------------------- Compatibility Statements Server Compatibility You can use any release of P4Convert with any release of the Perforce server later than 2010.2 Platform Compatibility While P4Convert is generally portable, this release is certified only on the following platforms: Linux 2.6 Intel (x86_64) Solaris 10 Intel (x86) Windows 7 Intel (x86_64) Mac OS X 10.7 (x86_64) Java Virtual Machine This release is certified to run on Java SE Runtime Environment 1.7.* -------------------------------------------------------------------------- Bugs fixed in 2014.1 #872553 #872245 (Bug #73235 #72982) During a Replace operation (R:D) + (SUB:B:D) all opened files were reverted. The Import mode now runs a preview integration first, then reverts only open files that have targets for the integration. #872082 (Bug #72981) Fixed second REMOVE action to not revert, but revert AND remove. Patches after 2013.1 #857075 (Bug #64029) Abort the conversion if Text-delta is detected. #853349 #856543 (Bug #72701) Set client clobber option to avoid, safe sync protection introduced in 14.1 #848224 (Bug #72822) Fixed processing of line endings when a 'text' file is identified using the typemap. #846592 (Bug #72811) During a SVN roll back operation if the user edits the file, then p4 copy cannot be used. The code now falls back to manual edit (pre 10.2 mode). #802912 (Bug #71815 #67509 #62886) Type map enhanced to include 'text' and 'unicode'. For example mapping like 'text //....java'. Note: if the converter fails to find a character mapping for the file it is no longer downgraded to BINARY, but stored as TEXT and the content left as-is. The as-is content will NOT include Line Ending conversions, BOM removal or Character Map translation. #718459 (Bug #69161) Fix to allow automatic resolve of binary files using setForceTextualMerge() option in p4java, equivalent to '-t' flag. #712269 (Bug #68935) Fix to 'Node-path' parse detection to ignore subsequent delimiters (': ') that might occur in a file path. Internal new functionality in 2013.1 #704024 (Bug #68652) SVN property parse support for non windows-1252 high ascii code pages. Optional configuration option 'com.p4convert.svn.propTextType' can be set to a specific code page for SVN properties: BINARY ISO-8859-2 US-ASCII ISO-8859-5 UTF-8 ISO-8859-6 UTF-16BE ISO-8859-7 UTF-16LE ISO-8859-8 UTF-32BE windows-1251 UTF-32LE windows-1254 Shift_JIS windows-1252 ISO-2022-JP windows-1256 ISO-2022-CN KOI8-R ISO-2022-KR ISO-8859-9 GB18030 IBM424_rtl EUC-JP IBM424_ltr EUC-KR IBM420_rtl Big5 IBM420_ltr ISO-8859-1 UNKNOWN (default) The first scan is always 'UTF-8' followed by the configuration option. BINARY implies a skip and the string '' is inserted. #702766 (Bug #68510) By default RCS keyword expansion attributes are imported; however setting the configuration option 'com.p4convert.svn.keepKeyword' to 'false' will ignore all previous keyword attributes and import the files as normal text. #693333 (Bug #68191) Missing 'COPY' support (C:F) for file integrations. #688730 (Bug #67815, #67909) #688720 (Bug #67775) Support replacing a file/symlink with a directory. The fix includes a new action type 'C' COPY which represents a Subversion 'replace' action that has a 'copyfrom' Node. Normal 'replace' actions remain identified as 'U' UPDATE actions. #687931 #687905 (Bug #67716) Roll back imporvments for files and symlinks. #686737 (Bug #67668) Line ending translation fix for MAC style '\r' characters. #679015 (Bug #67530) Allow a file to be replaced with a directory by deleting the previous file revision. #678249 (Bug #67532) Support coping a file over a symlink with no target. #676714 (Bug #67548) Updated ICU4J libraries to 51.2 improving Cyrillic detection. #669199 (Bug #67263) Support for replacing a symlink revision with a file. #668788 (Bug #67167) Limit conversion user to work at 'admin' level (previously 'super' was required. User must login before listing users due to configurable 'run.users.authorize'. #668166 (Bug #66986) Updated filtering to p4java INFO message 'Unknown client error' #664667 (Bug #66790, #67069) #656616 (Bug #66683) Remove the use of Stub files as a workaround for symlink bugs in p4java. Bugs patched after 2012.2 #655899 #655901 #655903 (Bug #66707, #66649, #66638) Tidy up of Warning messages from p4-java and workaround for 10.2 tamper check error. #652698 (Bug #66620) Report conversion tool version information in log and console output: jar build version: 12.2.652698 #652651 (Bug #66509) Configuration exception check when connecting to a live Perforce server. If the Unicode counter was not set users would see a cryptic error: 'User nouser doesn't exist.' #648309 (Bug #66427) Fix in the detection of ADD/EDIT action after the REMOVE part of UPDATE case. (regression from #636750) #648284 (Bug #66429) Fixed the detection of previously deleted files when adding a new revision. (regression from #636750) #645509 (Bug #66128) A fix to sub node/block detection; only 'delete' actions with a sub 'copyfrom' action are detected. Marked in the log with 'SUB:B:F' for branched files. #636750 (Bug #65984) Support SVN 'replace' actions as Action.UPDATE or 'U' in log. A 'replace' action deletes the node and replaces it with the following actions. #633528 (Bug #65781) Subversion merge information is computed in SVN revisions and not Perforce change-lists. However when querying Perforce the SVN revision number must be translated to a Perforce change-list using the ChangeMap class. #631017 (Bug #65254) A fix to the archive format for symlinks preventing p4 status / p4 reconcile from marking the symlink as changed and trying to open for edit. #591267 (Bug #63446) Added a sample SLF4J configuration file for trace and debug. #593032 (Bug #63611) Change counter was offset by 1 after using the 'Convert mode', so subsequent migrations using 'Import mode' did not match SVN revisions 1:1. #594830 (Bug #63621) Store a generated version string at release time in the default.cfg file. #594824 (Bug #63660) Support empty subversion revisions (resulting after 3rd party filter tools). #594807 (Bug #63662) Added missing '/n' to audit log after header comment. #601206 (Bug #63888) #605402, #604770 (Bug #64302) Support an empty Node-Path; implies a '//...' and is sometimes used by Subversion to set properties for the whole repo. The '--info' option now counts the number of empty Node-Paths as an indication of corrupt or a hacked data set. #602959 #603679 (Bug #64220) Missing revisions in branch operations are reported as skipped; this is due to an earlier Subversion sub-action where the rollback step was missing. The fix results in the following behavioural changes: 'Convert mode' - Overlays the delete action with a roll-back to last revision. Note that a branch to same path not allowed by a P4 client. 'Import mode' - Reverts the pending delete then attempt the integration. The integration will be skipped at resolve and may leaving an empty change. #605415 #610235 #611875 (Bug #64347 #64391) Support Subversion merge-info across the directory hierarchy, in complex merge operations including: - Cherry picked revisions - Multiple revision ranges - Indirect merges #622215 #623359 (Bug #65174 #65254) Added non-zero return codes for Warnings and Errors: OK(0) All OK, no warnings USAGE(1) Usage error SHUTDOWN(2) Trapped 'Ctrl C' break signal WARNING(3) Warning count greater than 0 EXCEPTION(4) Trapped Exception New functionality in 2012.2 #551486 (Bug #61340) SSL support. Configuration for non ssl uses sets the configuration 'com.p4convert.p4.port' to 'localhost:4444' or for SSL 'ssl:localhost:4444' #543222 (Bug #58715) Documented include/exclude maps for selecting Subversion paths to import. Maps now matching SVN paths with java regex: Basic examples: 1. Only import files with the extension 'yml': .*\.yml .* 2. Exclude the subversion folder apimanager/trunk/app/... (where apimanager is the top level directory) ^apimanager/trunk/app.* #533890, #533813, #533075, #533024, #533015, #530602, #530598, #529183, #528009, #528002, #527580, #527319, #527295, #527285 (Bug #56426) MergeInfo imported as INTEG actions. Subversion stores integration history on the target (about its sources) as properties. The properties can be on FILE nodes or DIR in pending changes. Subversion uses the key svn:mergeinfo with a value of the form: :,,... Ranges are in the form nnn-nnn or just nnn; there is only one done range (accounted for integrations), but there can be one or more exclude ranges (ignored revisions). In some data sets an '*' my appear on the end to indicate non-inheritable mergeinfo. - Support multi merge source data for Convert and Import mode. - Branch actions sources are marked as BRANCH and not MERGE_IGNORE - Added ignore action credit IGNORE/IGNORE_BY Currently the feature is disabled, change to 'true' to enable, e.g.: com.p4convert.svn.mergeInfoEnabled=true #522555, #522541, #522537 (Bug #59517) Type map to be used for identifying binary files ONLY. Do not use try to force 'unicode' as 'text' in a mapping like 'text //....java'. To use create a local file 'types.map' using the Perforce typemap format. - only paths of the form '//....xxx' are supported, any other path like '//depot/foo/....xxx' are ignored. - only types: binary+mxwlk are supported. Type map is required for small or empty binary files (e.g. zip, gif...) as ICU4J cannot determine if it is binary. #512452 (Bug #58685, Bug #58790) The user translation map (--users) is now generated with the original Subversion username on the LHS and the filtered name on the RHS. The filter removes Perforce reserved chars (removing #, @, *, %, ... and replacing " " with "_"). The same filter is used post translation in case the RHS contains reserved chars. Loading the filter reports the file and number of mappings. For example: Loaded user translation map 'users.map'; 27 user names remapped. Internal new functionality in 2012.2 #553863 (Bug #61622) Skip REMOVE actions if there were no previous revisions. This case is seen where cvs2svn adds REMOVE actions when the revision does not exist. #575401 #553849 #545744 #534836 (Bug #61619, Bug #61200, Bug #62540) Files larger than 10MB (set as hidden config option) are compress archive with +C flag (mimics server behaviour) #551485 (Bug #61351) Case sensitive rename support in Import mode for case insensitive servers using FIRST mode for file and directories. #546739 (Bug #60117) Support for windows-1252 encoding in property values. Property values falling outside UTF-8 or windows-1252 will throw an exception. #545239 Added progress class (to indicate progress when parsing logs) #543187 (Bug #60034) Password support for security level greater than 0. The com.p4convert.p4.user must have 'super' level access and its password set in com.p4convert.p4.passwd. This removes the UserPool and Protection ProtectionTable classes. Instead the pending change is submitted as the super user then the Owner field is modified along with the date. #524827 (Bug #59703) Reports the longest Subversion path when using --info #524816, #534787 (Bug #59820) Added @nx@ note record (type journal header) to protect against uses not setting C1 / C0 flags when replaying the journal. Server version is reported as 0 giving a big hint the the admin that 'p4d -xu' needs to be run. #515846 (Bug #58083) Changed all logging from java.util.Logger to SLF4J + log4j. Logging configuration is defined in file 'prop/slf4j.xml' and built into the deployed jar. Console output is at INFO and file logging is set to DEBUG (TRACE is not on by default). Logging is appended to a file called 'converter.log' and is rotated at 300MB and purged after 5 rotations. Audit log has been reimplemented to use a Buffered Output Stream. Schema upgraded to 5.x (as logging section has been moved to to xml file) #504626 (Bug #58713) Codepage support for windows 1252. Bugs fixed in 2012.2 #557022 (Bug #61663) Disable RPC_SOCKET_SO_TIMEOUT_NICK timeout. #534395 (Bug #57600) Suppress 'all revision(s) already integrated' message. #520565 (Bug #59456) Clean up of warning message if a path delimiter is missing and included examples in the default configuration file. #511728 (Bug #58826) Attempt to re-encode text files if the wrong encoding was found with ICU4J. Windows CP1252 is used to try to encode the file as it is often miss identified. Should this fail then, as before, the file is downgraded to BINARY. If a file is downgraded to binary it will not have had it's line-endings processed and if changed to TEXT may have corrupt line-endings. -------------------------------------------------------------------------- New functionality in 2012.1 #440198, #463676 (Bug #54093) Subversion revision or node extraction feature java -jar p4convert.jar --extract rev.node #452368 (Bug #54101) Imports can now be located in a sub directory of a depot. Set the option com.p4convert.subPath to the sub directory required. Do not include the depot path or start with a '/', however paths must end with a '/' even if it is not being used. For example, to import files under "//import/sub/..." set: com.p4convert.depotPath: import com.p4convert.subPath=sub/ #457421, #462801, #464411 (Bug #54796, Bug #55837, Bug #55838) File type detection now uses icu4j libraries and improved IO buffering. Any file type detection below 30% is assumed to be binary unless it only contains valid ascii characters. Only the first 1024K of the file is scanned. #463714 (Bug #54094) Subversion Path exclusion Prescans data to validate path exclusion map (and inclusion). If all ok, then conversion starts, skipping any excluded files or directories. Exclusion map 'exclude.map' only matches strings (no wild cards), except for a single '*' to exclude everything (works well with include map). Comments can be added by starting the line with a '#'. For example ('exclude.map'): Database/NOE/noe_migrate/tags ... will skip all content under 'Database/NOE/noe_migrate/tags'. #464439 (Bug #55528) Split configuration into groups and format the configuration file with comments. #451897, #485654 (Bug #53543) Reformat Subversion revision descriptions to include the revision ID using the template: substituted with the Subversion revision substituted with the Subversion log Default (as-is): com.p4convert.svn.logRevID="" #488856 (Bug #54693, Bug #56719, Bug #57642) Prescan a Subversion dump file to determine system requirements. java -jar p4convert.jar --info Internal new functionality in 2012.1 #449830 (Bug #55030) Added a hook to trap Ctrl-C and exit cleanly, saving the ChangeMap and finishing the last action. #481859 (Bug #56784) Support UTF32 for non-unicode and unicode enabled servers. Down grades to binary, or stores as utf8 as required. #485650 (Bug #54693) Support protection table access for Import mode. Allowing the update of protections when adding content to existing servers. #485653 (Bug #53591, Bug #54693, Bug #56325) Re-implementation of p4 java connection to reuse server connection and client workspace. #486819 (Bug #57513) Cleanup of invalid Subversion usernames: Invalid characters removed: '*', '%%', '@', '#', '...' Invalid characters replaced: ' ' with '_' #488095, #489306 (Bug #54693) Cache of active Perforce users. Pool based on the number of free user licenses. Bugs fixed in 2012.1 #437285 (Bug #53680) Handle extremely large changelists #437286, #451367 (Bug #53779) Support invalid SVN dumpfile schemas with 'null' MD5 strings. #449810 (Bug #55336) Support rename of files only by case. Reverted on case aware platforms or renamed on cases sensitive platforms. #450757 (Bug #55031) Unicode support for property key pair values. Read the specified number of bytes and will throw a runtime exception if the reported length does not match the amount of bytes read. #451356 (Bug #55225) Detect platform case sensitivity used when generating the default configuration. #451465 (Bug #54839) Product version stored in MANIFEST and reported in configuration file. #464459 (Bug #55167) Bug fix to convert mode to sync to the old version of file when rolling back an edit action in Subversion. #465169 (Bug #53025) Bug fix to only remove '\r' chars when used as line endings. The Configuration option 'com.p4convert.adv.lineEnding' only converts '\r\n' to '\n' when true (default). Any isolated '\r' chars are not treated as line ending chars and left as-is (i.e MAC line endings are not converted -- may be an issue with the backdoor archive files). #470599, #471132 (Bug #56371) Trim invalid white space from SVN dump file header attributes #472249 (Bug #56440) Spelling; changed default value of com.p4convert.svn.propName to .svn.properties #481323 (Bug #56686) SVN users rolling back a branch to an earlier point would cause the 'front-door' to try to integrate between the same source/target. For branch roll back operations (Import Mode) now uses p4 copy. If the server is older than 20111, then the sync to old change and then re-add steps are used. #485989 (Bug #57117) Bug fix for file modification bits. File modification bits (e.g. +x) were not propagated to the next revision in Import Mode. #486808 (Bug #53572) Traps null Action objects. Logs Subversion records to file where actual Subversion file content is replaced with a block count. #489576, #489584 (Bug #57658) Fix to support a base-less copy where source is a deleted revision. Convert mode: if the source is a delete then the target will also be deleted. No integration records are created by default; however if the following option is set: com.p4convert.adv.downgrade=true then integration records are created for the delete (to match integ 3+). Import mode: if the source is a delete then the target will also be deleted. Includes patched for integration credit (how is now copy from/into) and resolve option to 'copy' source (-at).