Notes
Keyword Expansion Issues:
The conversion process preserves keyword file types and sets these files
in Perforce with the +k modifier. However keywords in Subversion and
Perforce are expanded differently. For example: In Subversion the keyword
$Revision$ expands to:
$Revision: 25005 $ (a change number in Perforce)
Another example is the keyword $Date$, which in
Subversion gives you the time as well...
$Date: 2006-02-17 12:09:10 +0000 (Fri, 17 Feb 2006) $
and in Perforce...
$Date: 2006/02/17 $
Here is a list of alternatives, (based on the above example):
$Revision$ ==> $Change$ gives $Change: 25005 $
$Date$ ==> $DateTime$ gives $DateTime: 2006/02/17 12:09:10 $
Due to the differences in keyword expansion the MD5 sum in Subversion is
not valid for use in Perforce. This is why any keyword expanded files have
an empty MD5 sum and why the p4 verify -u //... command
is recommended in the 'Optional Steps' section.
Verification
Verification can be performed using a running Subversion server and
comparing the differences in files in Perforce using the audit log. To
enable the audit log set the following option to true
and choose the file name.
com.p4convert.log.audit.enabled=true
com.p4convert.log.audit.filename=audit.log
A sample line of the audit log:
# <SVN path>, <SVN revision>, <P4 change>, <MD5 sum>
trunk/src/foo.c, 1, 1, 1234567890abcdef1234567890abcdef
Output and Logs
Console output and logging configuration options
The default SLF4J logging options can be overwritten with another
configuration file; specify the
log4j.configuration option with a local file,
using the syntax:
file:your_local_file
java -Dlog4j.configuration=file:log4j.xml -jar p4convert.jar
Please use or refer to the sample debug.log4j.xml
for logging options.
These options are reserved for testing or future enhancements:
com.p4convert.core.test
com.p4convert.core.version
com.p4convert.svn.emptyDirEnabled
com.p4convert.svn.emptyDirName
Reading Console/Logging output
Importing Subversion ranges:
start: 1
end: 23091
last: 23091
1.0 A:D - trunk
1.1 A:D - trunk/src
1.2 A:F - trunk/src/foo.c (UTF-8)
mapping: r1 => @1
2.0 A:F - trunk/src/bar.png (BINARY)
mapping: r2 => @2
...
Explanation of output lines, for example:
1.2 A:F - trunk/src/foo.c (UTF-8)
The numbering 1.2 refers to the current Subversion
revision and the node action. (1 Subversion revision
1 and .2 = the third node action
as .0 would be the first index)
The letters A:F refers to the Subversion action and
if it is a file or directory operation.
A Add
B Branch
E Edit
I Integrate (merge fromNode)
M Merge (svn:mergeinfo)
C Copy (svn replace action with fromNode)
U Update (svn replace action)
R Remove (delete)
F File
D Directory
The subversion path trunk/src/foo.c is followed by
the detected type.
Detected Type
Perforce Base Type
UTF-8
Unicode
UTF-16BE
utf16
UTF-16LE
utf16
UTF-32BE
Unicode
UTF-32LE
Unicode
Shift_JIS
Unicode
ISO-2022-JP
downgraded to binary
ISO-2022-CN
downgraded to binary
ISO-2022-KR
downgraded to binary
GB18030
Unicode
EUC-JP
Unicode
EUC-KR
Unicode
Big5
Unicode
ISO-8859-1
Unicode
ISO-8859-2
Unicode
ISO-8859-5
Unicode
ISO-8859-6
downgraded to binary
ISO-8859-7
Unicode
ISO-8859-8
Unicode
windows-1251
Unicode
windows-1254
Unicode
windows-1256
downgraded to binary
KOI8-R
Unicode
ISO-8859-9
Unicode
IBM424_rtl
downgraded to binary
IBM424_ltr
downgraded to binary
IBM420_rtl
downgraded to binary
IBM420_ltr
downgraded to binary
BINARY
binary
The detected type is based on language detection using ICU4J and not
Subversion MIME or Perforce detection.
Finally mapping: r223 => @223' refers to the
Subversion revision number (r223) to the Perforce
changelist number (@223). Typically 1:1 unless offset
or merged against an live or pre-existing Perforce Server.
Errors
In Import Mode, Perforce related p4-java messages are
reported as warnings and should be verified, for example:
46.3 A:F - repo/trunk/my.file
WARNING: p4java: //import/repo/trunk/my.file - file(s) up-to-date.
In Conversion Mode, errors are reported as Panics and
an exception is thrown.
Problematic Subversion dump records can be extracted and sent to Perforce
when it is not possible to send in the whole dumpfile. The extracted
dumpfile only contains meta-data and the file content is removed and
replaced with a block count.
During an exception note the Subversion revision and node ID (the example
above has a revision number of 46 and a node number of 3). Then run the
following command to extract the problematic record, for example:
$ java -jar dist/p4convert.jar --extract 46.3 mysvndump.dump
searching for node: 46.3...
Node-path: repo/trunk/my.file
Node-kind: file
Node-action: add
Prop-content-length: 10
Text-content-length: 308
Text-content-md5: 6a339b6ccf2af72d77169ef29b98eb0b
Content-length: 318
PROPS-END
A file is then generated called node.46.3.dump and
will contain the Subversion record to be sent to Perforces, as well as the
Subversion meta-data (everything after searching for node:
46.3...).