This is a simple project that holds the scripts used to convert
old cvs version of the aggregation files to git. 

See bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=359240.

The conversion and migration was done primarily to record the 
historical record. The aggr files are no longer active and should not 
be modified. 

The files and scripts are mostly self explanatory, but I 
learned all I know from Paul Webster, who sent me this description
of how he migrated the Platform's repositories ... though our 
case was much simpler, I paste it here just to document it, and 
give credit where credit is due. 

Note: none of the files in this project (or Paul's original references) 
could be used as-is. They are only for learning. 

= = = 

(2012-06-20 13:02:22) Paul Webster: 

http://git.eclipse.org/c/e4/org.eclipse.migration.git/tree/scripts is the place to be. 

http://git.eclipse.org/c/e4/org.eclipse.migration.git/tree/scripts/migration_script.sh is my migration script, it's a record of what I did for most of our CVS repos

http://git.eclipse.org/c/e4/org.eclipse.migration.git/tree/scripts/migration_script.sh#n247 is an example of one CVS repo directly to one git repo, without a lot of pre-conditioning

http://git.eclipse.org/c/e4/org.eclipse.migration.git/tree/scripts/migration_script.sh#n157 is where I get (once) the python tool we use, cvs2git

In the other directories, like http://git.eclipse.org/c/e4/org.eclipse.migration.git/tree/eclipse.platform.runtime/pass3 are input and output for an actual run

http://git.eclipse.org/c/e4/org.eclipse.migration.git/tree/eclipse.platform.runtime/pass3/cvs2git.options is the most important file

