=== Notices Originally developed for Perforce by VIZIM (www.vizim.com) Copyright (c) 2014 Perforce Software, Inc. and VIZIM Worldwide, Inc. All rights reserved. Please see LICENSE.txt in top-level folder of this distribution for license information === Introduction This file is background information for those looking to understand, update or modify these tools. The file Migration.docx in this distribution is oriented toward end users. Before making modifications, consider that the majority of users for these tools have one or more of these characteristics: (1) They are not familiar with packages that don't have installers. (2) They are not familiar with perl. (3) They are not familiar with CPAN. You should also assume that they follow the installation instructions and procedures specified in the migration document. === Coding style Each of the tools is a standalone monolith. Most of the tools are small, there is limited commonality to the functionalities, and modules add setup complexity. The general programming style is procedural. There is commonality to format and naming but no specific published standard was used. Complex data structures are commented. Most of the remaining comments either (a) provide processing markers, or (b) document a correction to a logic error that caused a test to fail during development and support. The code could be more compact. However, the priority consideration was coders who may not be that familiar with perl. Of course many perl coders don't usually deal with hashes of hashes, hashes of arrays, arrays of anonymous hashes and references. But there is no practical way to avoid using these constructs. === CPAN modules Modules that are not part of the standard ActivePerl distribution have been avoided. This includes modules that may be readily available through CPAN. The primary reason for this is to reduce the install overhead. There are also organizations where CPAN installation is problematic for various policy reasons. === Perforce Perl API The Perforce Perl API was not used. Unlike more general purpose applications the import code requires well defined command responses. Using the API does not simplify much of the code and has a minimal impact on performance. Moreover, there are environments where available Perl distributions do not align with the available versions of the API. Overcoming the availability issue by making a local compile of the API an install requirement is undesirable given the minimal value to the import code. === TFS APIs There are version dependencies that exist with the TFS APIs. The required extraction information is easily established using command line commands that don't have version dependencies. === XML Although many of the files generate what appears to be XML the files are not intended to be valid XML. However, the XML syntax is useful so it has been adopted. It wouldn't be difficult to make these files valid XML. In fact they were originally valid XML. The problem encountered was that processing of large (often several 100 Meg) files using the standard distribution XML modules was significantly slower than the code that currently exists. Given the long run times for some of these tools, increasing the run time for format purity was undesirable.