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-svn.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 '<binary property>' 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':
<include.map>
.*\.yml
<exclude.map>
.*
2. Exclude the subversion folder apimanager/trunk/app/...
(where apimanager is the top level directory)
<exclude.map>
^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:
<path>:<done range>,<exclude>,<exclude>...
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-svn.jar --extract rev.node <dump file>
#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:
<rev> substituted with the Subversion revision
<description> substituted with the Subversion log
Default (as-is): com.p4convert.svn.logRevID="<description>"
#488856 (Bug #54693, Bug #56719, Bug #57642)
Prescan a Subversion dump file to determine system requirements.
java -jar p4convert-svn.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).