Platform-releng/Juno Git Migration Recipe
This is a modified version of the steps described by the CDT team in bug bug 316208
- 1 Overview of the steps for platform conversion:
- 2 Recipe for test conversion for p2
- 2.1 Copy the existing repository to a temp location
- 2.2 Remove broken symlinks in the repo from all to the components we moved above
- 2.3 Move old content into old and exclude old content from migration
- 2.4 Run cvs2git to do the conversion
- 2.5 Import the cvs2git output into git
- 2.6 Move tags into place
- 2.7 Prune + Repack the repository
- 2.8 Verify repo
- 2.9 Update map files
- 2.10 Run test build
Overview of the steps for platform conversion:
This is taken from the Platform UI/Eclipse4 migration script, migration_script.sh
Precondition the CVS repo
If you have maintenance releases where your release was tagged R3_6 but only projects that were changed were branched R3_6_maintenance the cvs2git conversion tool will create a maintenance branch with only the projects that were changed in it. This makes the maintenance branch useless. But if you branch every project in your CVS repo before the conversion, you will get correct branches in git.
For each maintenance branch you care about you have to fix the branch + the tags, ex: R3_6, R3_6_1, R3_6_2, and R3_6_maintenance.
Create a temp repo
cvs2git changes the cvs repo as it goes (it reads and modifies the ,v files), so you should do your conversion on a temp repo. For a component like Platform UI, that allowed us to shape our repository from many top level CVS modules to its current shape: repo/bundles/[plugin_projects], repo/tests/[plugin_projects], etc. Just copy the projects to where you would like them to show up.
Running the tool
The options file for running the tool needs 2 things.
- the root of the temporary CVS repo you created
- the list of authors
There is a quick way to generate a list of authors from a bash shell for your CVS projects. The Eclipse Foundation requires that we use "Name" <committer.id> or "committer.id" <committer.id> as the authors for the conversion, unless that committer has specifically allowed his committer email to be used.
Recipe for test conversion for p2
Copy the existing repository to a temp location
mkdir ~/cvs; cd ~/cvs
cp /home/data/cvs/rt/org.eclipse.equinox.p2 .
find cvs/ -type l|xargs -n 1 rm
Note: This didn't apply to us.
Move old content into old and exclude old content from migration
Need to create exclude list preliminary list is here
Run cvs2git to do the conversion
Get latest cvs2git:
svn co --username=guest --password="" http://cvs2svn.tigris.org/svn/cvs2svn/trunk cvs2svn-trunk
Export from cvs
(To do: Add options file link)
Import the cvs2git output into git
cd /gitroot/p2 mkdir -p org.eclipse.equinox.p2/org.eclipse.equinox.p2.git cd org.eclipse.equinox.p2/org.eclipse.equinox.p2.git git init cat ~/cvs2svn-tmp/git-blob.dat ~/cvs2svn-tmp/git-dump.dat | git fast-import
Prune + Repack the repository
git prune git repack -a -d --depth=250 --window=250 git gc --aggressive git repack -a -d --depth=250 --window=250
mkdir /tmp/compare-kmoir/ python /home/data/users/kmoir/cvs2svn-trunk/contrib/verify-cvs2svn.py --git /home/data/users/kmoir/cvs/p2/ /gitroot/p2/org.eclipse.equinox.p2/org.eclipse.equinox.p2.git/ --tmp=/tmp/compare-kmoir/ --diff
Update map files
replace CVS= with GIT= tag should remain replace cvsRoot=:pserver:firstname.lastname@example.org:/cvsroot/rt/ with file:///gitroot/equinox/rt.equinox.p2.git remove org.eclipse.equinox/p2/ in path= update path
Run test build
Run test build on Hudson - job name is eclipse-equinox-git-test-N