#!/bin/bash
# *** Don't run this script :-) ***

ROOT=/shared/eclipse/e4/git/cvs
MIGR=$ROOT/org.eclipse.migration

##################################################
# first up, the big one: eclipse.platform.ui

# make the fake cvs repo in the right shape
CVS_LOC=$ROOT/cvsroot.eclipse.platform.ui
mkdir $CVS_LOC
cd $CVS_LOC
cvs -d :local:$(pwd) init
mkdir -p eclipse.platform.ui
cd eclipse.platform.ui
mkdir bundles  examples  features  tests


MIGR_PASS=$MIGR/eclipse.platform.ui/pass3

cd /cvsroot/eclipse
. $MIGR_PASS/modules_ui.sh
for M in $MODULES; do
  echo $M
  cp -r $M $CVS_LOC/eclipse.platform.ui/bundles
done

cd $CVS_LOC/eclipse.platform.ui/bundles
mv *tests* ../tests
mv *example* *snippet* ../examples

# clean the CVS repo of links
find $CVS_LOC -type l|xargs -n 1 rm

#get the tool, once
cd $ROOT
svn co --username=guest --password="" http://cvs2svn.tigris.org/svn/cvs2svn/trunk cvs2svn-trunk

# generate the import data
# make sure the author names are correct
# make sure your options file points to the correct tmp cvsroot
cvs2svn-trunk/cvs2git --options=$MIGR_PASS/cvs2git.options >cvs2git_log.txt 2>&1
cp symbol-info.txt $MIGR_PASS


# create a git repo to be used for verification
git init verify.eclipse.platform.ui
cd verify.eclipse.platform.ui
cat ../cvs2svn-tmp/git-blob.dat ../cvs2svn-tmp/git-dump.dat | git fast-import

python ../cvs2svn-trunk/contrib/git-move-refs.py
git prune
git repack -a -d --depth=250 --window=250
git gc --aggressive
git repack -a -d --depth=250 --window=250

# verify the repo - started on work linux box
cd $ROOT
mkdir compare-tmp
python $ROOT/cvs2svn-trunk/contrib/verify-cvs2svn.py \
--git $CVS_LOC/eclipse.platform.ui \
$ROOT/verify.eclipse.platform.ui \
--tmp=$ROOT/compare-tmp --diff >$MIGR_PASS/compare-log.txt 2>&1 &

# create a git repo to continue the conversion
git init target.eclipse.platform.ui
cd target.eclipse.platform.ui




cat ../cvs2svn-tmp/git-blob.dat ../cvs2svn-tmp/git-dump.dat | git fast-import
python ../cvs2svn-trunk/contrib/git-move-refs.py
git prune
git repack -a -d --depth=250 --window=250
git gc --aggressive
git repack -a -d --depth=250 --window=250


# we also have to delete at least 2 tags:
git tag 'R3_6_api_cleanup_build_20091125' 'R3_6_api_cleanup_<build_20091125>'
git tag -d 'R3_6_api_cleanup_<build_20091125>'
git tag 'R3_6_p2_api_cleanup_20091216' 'R3_6_p2_api_cleanup_<20091216>'
git tag -d 'R3_6_p2_api_cleanup_<20091216>'

# Fixing the Delete only tags:
cd $ROOT
/bin/bash $MIGR/scripts/fix_tags.sh >$MIGR_PASS/tag_report.sh
grep ^git $MIGR_PASS/tag_report.sh >$MIGR_PASS/mv_tags.sh
# examine them
/bin/bash $MIGR_PASS/mv_tags.sh

# now examine the repo, hopefully the tags and branches that we care about are in decent shape.
# In my case, I see Cherrypick markers for a couple of tags.  When the conversion is complete and most
# people are happy, a developer will have to examine these commits to see if they
# can be simplified.

grep ^Cherry $MIGR_PASS/tag_report.sh >$MIGR_PASS/tag_cherrypicks.txt
grep "R[34]_" $MIGR_PASS/tag_cherrypicks.txt
#Cherrypick tag: R3_0 commit: ead7a690ae2a6b78507ee0705e2cdd193c4c9dfd
#Cherrypick tag: R3_0_2 commit: 33b9f9f25fd8e45cd2206a504725bcfb03e9199f
#Cherrypick tag: R3_1 commit: 83d5b3b8596bf06ceea3cf0054dd6c66e049f054
#Cherrypick tag: R3_3_1_1 commit: a74e9bad283b3d01ec5683fa719710e9ca0e645b
#Cherrypick tag: R3_4_1 commit: 96e8167b3756219d62dcaf5318c6a42f1b93dfb9
#Cherrypick tag: R3_5 commit: 4186af7444f9685e7f4bf27cfe1878866ce9a2e5
#Cherrypick tag: Root_R3_4_maintenance commit: e4ec86e43c2cec1e0d6e94660bed1704d5eaf41d

git branch >$MIGR_PASS/branches.txt
git tag >$MIGR_PASS/tags.txt





#
# after the other repos are converted, the next step is the merge with eclipse.platform.ui.e4
#


##################################################
# next, org.eclipse.e4.tools since it should be isolated
MODULE_NAME=org.eclipse.e4.tools

cd $ROOT
CVS_LOC=$ROOT/cvsroot.$MODULE_NAME
mkdir -p $CVS_LOC/e4
cd $CVS_LOC
cvs -d :local:$(pwd) init

MIGR_PASS=$MIGR/org.eclipse.e4.tools/pass3
cp -r /cvsroot/eclipse/e4/$MODULE_NAME $CVS_LOC/e4

# clean the CVS repo of links
find $CVS_LOC -type l|xargs -n 1 rm

# generate the import data
# make sure the author names are correct
# make sure your options file points to the correct tmp cvsroot
cd $ROOT
vi $MIGR_PASS/cvs2git.options
rm -rf cvs2svn-tmp symbol-info.txt cvs2git_log.txt
cvs2svn-trunk/cvs2git --options=$MIGR_PASS/cvs2git.options >cvs2git_log.txt 2>&1
cp symbol-info.txt cvs2git_log.txt $MIGR_PASS



# create a git repo to be used for verification
git init verify.$MODULE_NAME
cd verify.$MODULE_NAME
cat ../cvs2svn-tmp/git-blob.dat ../cvs2svn-tmp/git-dump.dat | git fast-import

python ../cvs2svn-trunk/contrib/git-move-refs.py
git prune
git repack -a -d --depth=250 --window=250
git gc --aggressive
git repack -a -d --depth=250 --window=250

# verify the repo - this can take long, so for your first test skip this step.
cd $ROOT
rm -rf compare-tmp
mkdir compare-tmp
python $ROOT/cvs2svn-trunk/contrib/verify-cvs2svn.py \
--git $CVS_LOC/e4/$MODULE_NAME \
$ROOT/verify.$MODULE_NAME \
--tmp=$ROOT/compare-tmp --diff >$MIGR_PASS/compare-log.txt 2>&1 &

# create a git repo to continue the conversion
cd $ROOT
git init target.$MODULE_NAME
cd target.$MODULE_NAME

cat ../cvs2svn-tmp/git-blob.dat ../cvs2svn-tmp/git-dump.dat | git fast-import
python ../cvs2svn-trunk/contrib/git-move-refs.py
git prune
git repack -a -d --depth=250 --window=250
git gc --aggressive
git repack -a -d --depth=250 --window=250



# Fixing the Delete only tags:
cd $ROOT/target.$MODULE_NAME
/bin/bash $MIGR/scripts/fix_tags.sh >$MIGR_PASS/tag_report.sh
grep ^git $MIGR_PASS/tag_report.sh >$MIGR_PASS/mv_tags.sh
# examine them
/bin/bash $MIGR_PASS/mv_tags.sh

# now examine the repo, hopefully the tags and branches that we care about are in decent shape.
# In my case, I see Cherrypick markers for a couple of tags.  When the conversion is complete and most
# people are happy, a developer will have to examine these commits to see if they
# can be simplified.

grep ^Cherry $MIGR_PASS/tag_report.sh >$MIGR_PASS/tag_cherrypicks.txt
grep "R[34]_" $MIGR_PASS/tag_cherrypicks.txt
# No R?_ Cherry pick tags

git branch >$MIGR_PASS/branches.txt
git tag >$MIGR_PASS/tags.txt

# last step before you deploy:

cd $ROOT
cat - >gitignore <<EOF
bin/
*~
*.rej
*.bak
core
*.patch
javacore.*
heapdump.*
core.*
Snap.*
target/

EOF

cd target.$MODULE_NAME

# from http://stackoverflow.com/questions/3895453/how-do-i-make-a-git-commit-in-the-past

new_file=$(git hash-object -w ../gitignore)
git filter-branch \
--index-filter \
'git update-index --add --cacheinfo 100644 '"$new_file"' .gitignore' \
--tag-name-filter cat \
-- --all

git reset --hard

#create deploy
cd $ROOT
git clone --bare  target.$MODULE_NAME deploy.$MODULE_NAME
cd deploy.$MODULE_NAME
git remote rm origin
git config -l
git config --add core.sharedrepository 1

#final pack and prune step
git prune
git repack -a -d --depth=250 --window=250
git gc --aggressive
git repack -a -d --depth=250 --window=250

cd $ROOT
scp -r deploy.$MODULE_NAME pwebster@git.eclipse.org:/gitroot/e4/${MODULE_NAME}.git
#
# DONE, org.eclipse.e4.tools
#



##################################################
# next, eclipse.platform.ui.e4 - graduated Eclipse4 UI bundles
MODULE_NAME=eclipse.platform.ui.e4

cd $ROOT
CVS_LOC=$ROOT/cvsroot.$MODULE_NAME
mkdir -p $CVS_LOC/e4
cd $CVS_LOC
cvs -d :local:$(pwd) init

MIGR_PASS=$MIGR/$MODULE_NAME/pass3
$MIGR/scripts/copy_e4.sh $MIGR_PASS/modules_platform_ui.sh $CVS_LOC

# fix up the compat tests that moved into platform ui
cd $CVS_LOC/e4
mv org.eclipse.e4.compatibility/tests/* org.eclipse.e4.ui/tests
mv org.eclipse.e4.compatibility/features/org.eclipse.e4.rcp/ org.eclipse.e4.ui/features
#confirm there's nothing else in there
find org.eclipse.e4.compatibility/ -type f


# clean the CVS repo of links
find $CVS_LOC -type l|xargs -n 1 rm

# generate the import data
# make sure the author names are correct
# make sure your options file points to the correct tmp cvsroot
cd $ROOT
vi $MIGR_PASS/cvs2git.options
rm -rf cvs2svn-tmp symbol-info.txt cvs2git_log.txt
cvs2svn-trunk/cvs2git --options=$MIGR_PASS/cvs2git.options >cvs2git_log.txt 2>&1
cp symbol-info.txt cvs2git_log.txt $MIGR_PASS



# create a git repo to be used for verification
git init verify.$MODULE_NAME
cd verify.$MODULE_NAME
cat ../cvs2svn-tmp/git-blob.dat ../cvs2svn-tmp/git-dump.dat | git fast-import

python ../cvs2svn-trunk/contrib/git-move-refs.py
git prune
git repack -a -d --depth=250 --window=250
git gc --aggressive
git repack -a -d --depth=250 --window=250

# verify the repo - this can take long, so for your first test skip this step.
cd $ROOT
rm -rf compare-tmp
mkdir compare-tmp
python $ROOT/cvs2svn-trunk/contrib/verify-cvs2svn.py \
--git $CVS_LOC/e4/$MODULE_NAME \
$ROOT/verify.$MODULE_NAME \
--tmp=$ROOT/compare-tmp --diff >$MIGR_PASS/compare-log.txt 2>&1 &

# create a git repo to continue the conversion
git init target.$MODULE_NAME
cd target.$MODULE_NAME

cat ../cvs2svn-tmp/git-blob.dat ../cvs2svn-tmp/git-dump.dat | git fast-import
python ../cvs2svn-trunk/contrib/git-move-refs.py
git prune
git repack -a -d --depth=250 --window=250
git gc --aggressive
git repack -a -d --depth=250 --window=250



# Fixing the Delete only tags:
cd $ROOT/target.$MODULE_NAME
/bin/bash $MIGR/scripts/fix_tags.sh >$MIGR_PASS/tag_report.sh
grep ^git $MIGR_PASS/tag_report.sh >$MIGR_PASS/mv_tags.sh
# examine them
/bin/bash $MIGR_PASS/mv_tags.sh

# now examine the repo, hopefully the tags and branches that we care about are in decent shape.
# In my case, I see Cherrypick markers for a couple of tags.  When the conversion is complete and most
# people are happy, a developer will have to examine these commits to see if they
# can be simplified.

grep ^Cherry $MIGR_PASS/tag_report.sh >$MIGR_PASS/tag_cherrypicks.txt
grep "R[34]_" $MIGR_PASS/tag_cherrypicks.txt
# No changes here

git branch >$MIGR_PASS/branches.txt
git tag >$MIGR_PASS/tags.txt

# the next step for this one is to be merged into eclipse.platform.ui





##################################################
# next, eclipse.platform.runtime.e4 - graduated Eclipse4 core bundles
MODULE_NAME=eclipse.platform.runtime.e4

cd $ROOT
CVS_LOC=$ROOT/cvsroot.$MODULE_NAME
mkdir -p $CVS_LOC/e4
cd $CVS_LOC
cvs -d :local:$(pwd) init

MIGR_PASS=$MIGR/$MODULE_NAME/pass3
$MIGR/scripts/copy_e4.sh $MIGR_PASS/modules_platform_runtime.sh $CVS_LOC



# clean the CVS repo of links
find $CVS_LOC -type l|xargs -n 1 rm

# generate the import data
# make sure the author names are correct
# make sure your options file points to the correct tmp cvsroot
cd $ROOT
vi $MIGR_PASS/cvs2git.options
rm -rf cvs2svn-tmp symbol-info.txt cvs2git_log.txt
cvs2svn-trunk/cvs2git --options=$MIGR_PASS/cvs2git.options >cvs2git_log.txt 2>&1
cp symbol-info.txt cvs2git_log.txt $MIGR_PASS



# create a git repo to be used for verification
git init verify.$MODULE_NAME
cd verify.$MODULE_NAME
cat ../cvs2svn-tmp/git-blob.dat ../cvs2svn-tmp/git-dump.dat | git fast-import

python ../cvs2svn-trunk/contrib/git-move-refs.py
git prune
git repack -a -d --depth=250 --window=250
git gc --aggressive
git repack -a -d --depth=250 --window=250

# verify the repo - this can take long, so for your first test skip this step.
cd $ROOT
rm -rf compare-tmp
mkdir compare-tmp
python $ROOT/cvs2svn-trunk/contrib/verify-cvs2svn.py \
--git $CVS_LOC/e4/$MODULE_NAME \
$ROOT/verify.$MODULE_NAME \
--tmp=$ROOT/compare-tmp --diff >$MIGR_PASS/compare-log.txt 2>&1 &

# create a git repo to continue the conversion
cd $ROOT
git init target.$MODULE_NAME
cd target.$MODULE_NAME

cat ../cvs2svn-tmp/git-blob.dat ../cvs2svn-tmp/git-dump.dat | git fast-import
python ../cvs2svn-trunk/contrib/git-move-refs.py
git prune
git repack -a -d --depth=250 --window=250
git gc --aggressive
git repack -a -d --depth=250 --window=250



# Fixing the Delete only tags:
cd $ROOT/target.$MODULE_NAME
/bin/bash $MIGR/scripts/fix_tags.sh >$MIGR_PASS/tag_report.sh
grep ^git $MIGR_PASS/tag_report.sh >$MIGR_PASS/mv_tags.sh
# examine them
/bin/bash $MIGR_PASS/mv_tags.sh

# now examine the repo, hopefully the tags and branches that we care about are in decent shape.
# In my case, I see Cherrypick markers for a couple of tags.  When the conversion is complete and most
# people are happy, a developer will have to examine these commits to see if they
# can be simplified.

grep ^Cherry $MIGR_PASS/tag_report.sh >$MIGR_PASS/tag_cherrypicks.txt
grep "R[34]_" $MIGR_PASS/tag_cherrypicks.txt
# No changes here

git branch >$MIGR_PASS/branches.txt
git tag >$MIGR_PASS/tags.txt

# the next step for this one is to be merged into eclipse.platform.runtime ... still to be converted





##################################################
# next, org.eclipse.e4.ui - leftover e4 bundles and simpleide
MODULE_NAME=org.eclipse.e4.ui

cd $ROOT
CVS_LOC=$ROOT/cvsroot.$MODULE_NAME
mkdir -p $CVS_LOC/e4
cd $CVS_LOC
cvs -d :local:$(pwd) init

MIGR_PASS=$MIGR/$MODULE_NAME/pass3
$MIGR/scripts/copy_e4.sh $MIGR_PASS/modules_e4_ui.sh $CVS_LOC



# clean the CVS repo of links
find $CVS_LOC -type l|xargs -n 1 rm

# generate the import data
# make sure the author names are correct
# make sure your options file points to the correct tmp cvsroot
cd $ROOT
vi $MIGR_PASS/cvs2git.options
rm -rf cvs2svn-tmp symbol-info.txt cvs2git_log.txt
cvs2svn-trunk/cvs2git --options=$MIGR_PASS/cvs2git.options >cvs2git_log.txt 2>&1
cp symbol-info.txt cvs2git_log.txt $MIGR_PASS



# create a git repo to be used for verification
git init verify.$MODULE_NAME
cd verify.$MODULE_NAME
cat ../cvs2svn-tmp/git-blob.dat ../cvs2svn-tmp/git-dump.dat | git fast-import

python ../cvs2svn-trunk/contrib/git-move-refs.py
git prune
git repack -a -d --depth=250 --window=250
git gc --aggressive
git repack -a -d --depth=250 --window=250

# verify the repo - this can take long, so for your first test skip this step.
cd $ROOT
rm -rf compare-tmp
mkdir compare-tmp
python $ROOT/cvs2svn-trunk/contrib/verify-cvs2svn.py \
--git $CVS_LOC/e4/$MODULE_NAME \
$ROOT/verify.$MODULE_NAME \
--tmp=$ROOT/compare-tmp --diff >$MIGR_PASS/compare-log.txt 2>&1 &

# create a git repo to continue the conversion
cd $ROOT
git init target.$MODULE_NAME
cd target.$MODULE_NAME

cat ../cvs2svn-tmp/git-blob.dat ../cvs2svn-tmp/git-dump.dat | git fast-import
python ../cvs2svn-trunk/contrib/git-move-refs.py
git prune
git repack -a -d --depth=250 --window=250
git gc --aggressive
git repack -a -d --depth=250 --window=250



# Fixing the Delete only tags:
cd $ROOT/target.$MODULE_NAME
/bin/bash $MIGR/scripts/fix_tags.sh >$MIGR_PASS/tag_report.sh
grep ^git $MIGR_PASS/tag_report.sh >$MIGR_PASS/mv_tags.sh
# examine them
/bin/bash $MIGR_PASS/mv_tags.sh

# now examine the repo, hopefully the tags and branches that we care about are in decent shape.
# In my case, I see Cherrypick markers for a couple of tags.  When the conversion is complete and most
# people are happy, a developer will have to examine these commits to see if they
# can be simplified.

grep ^Cherry $MIGR_PASS/tag_report.sh >$MIGR_PASS/tag_cherrypicks.txt
grep "R[34]_" $MIGR_PASS/tag_cherrypicks.txt
# No changes here

git branch >$MIGR_PASS/branches.txt
git tag >$MIGR_PASS/tags.txt

cd $ROOT
cat - >gitignore <<EOF
bin/
*~
*.rej
*.bak
core
*.patch
javacore.*
heapdump.*
core.*
Snap.*
target/

EOF

cd target.$MODULE_NAME

# from http://stackoverflow.com/questions/3895453/how-do-i-make-a-git-commit-in-the-past
rm -f t1.txt
git checkout master

new_file=$(git hash-object -w ../gitignore)
git filter-branch \
--index-filter \
'git update-index --add --cacheinfo 100644 '"$new_file"' .gitignore' \
--tag-name-filter cat \
-- --all

git reset --hard

#create deploy
cd $ROOT
git clone --bare  target.$MODULE_NAME deploy.$MODULE_NAME
cd deploy.$MODULE_NAME
git remote rm origin
git config -l
git config --add core.sharedrepository 1

#final pack and prune step
git prune
git repack -a -d --depth=250 --window=250
git gc --aggressive
git repack -a -d --depth=250 --window=250

cd $ROOT
scp -r deploy.$MODULE_NAME pwebster@git.eclipse.org:/gitroot/e4/${MODULE_NAME}.git
#
# DONE, org.eclipse.e4.ui
#


##################################################
# next, eclipse.platform.ui.compat - The ui.workbench fork
MODULE_NAME=eclipse.platform.ui.compat

cd $ROOT
CVS_LOC=$ROOT/cvsroot.$MODULE_NAME
mkdir -p $CVS_LOC/e4
cd $CVS_LOC
cvs -d :local:$(pwd) init

MIGR_PASS=$MIGR/$MODULE_NAME/pass3
$MIGR/scripts/copy_e4.sh $MIGR_PASS/modules_compat.sh $CVS_LOC



# clean the CVS repo of links
find $CVS_LOC -type l|xargs -n 1 rm

# generate the import data
# make sure the author names are correct
# make sure your options file points to the correct tmp cvsroot
cd $ROOT
vi $MIGR_PASS/cvs2git.options
rm -rf cvs2svn-tmp symbol-info.txt cvs2git_log.txt
cvs2svn-trunk/cvs2git --options=$MIGR_PASS/cvs2git.options >cvs2git_log.txt 2>&1
cp symbol-info.txt cvs2git_log.txt $MIGR_PASS



# create a git repo to be used for verification
git init verify.$MODULE_NAME
cd verify.$MODULE_NAME
cat ../cvs2svn-tmp/git-blob.dat ../cvs2svn-tmp/git-dump.dat | git fast-import

python ../cvs2svn-trunk/contrib/git-move-refs.py
git prune
git repack -a -d --depth=250 --window=250
git gc --aggressive
git repack -a -d --depth=250 --window=250

# verify the repo - this can take long, so for your first test skip this step.
cd $ROOT
rm -rf compare-tmp
mkdir compare-tmp
python $ROOT/cvs2svn-trunk/contrib/verify-cvs2svn.py \
--git $CVS_LOC/e4/$MODULE_NAME \
$ROOT/verify.$MODULE_NAME \
--tmp=$ROOT/compare-tmp --diff >$MIGR_PASS/compare-log.txt 2>&1 &

# create a git repo to continue the conversion
cd $ROOT
git init target.$MODULE_NAME
cd target.$MODULE_NAME

cat ../cvs2svn-tmp/git-blob.dat ../cvs2svn-tmp/git-dump.dat | git fast-import
python ../cvs2svn-trunk/contrib/git-move-refs.py
git prune
git repack -a -d --depth=250 --window=250
git gc --aggressive
git repack -a -d --depth=250 --window=250



# Fixing the Delete only tags:
cd $ROOT/target.$MODULE_NAME
/bin/bash $MIGR/scripts/fix_tags.sh >$MIGR_PASS/tag_report.sh
grep ^git $MIGR_PASS/tag_report.sh >$MIGR_PASS/mv_tags.sh
# examine them
/bin/bash $MIGR_PASS/mv_tags.sh

# now examine the repo, hopefully the tags and branches that we care about are in decent shape.
# In my case, I see Cherrypick markers for a couple of tags.  When the conversion is complete and most
# people are happy, a developer will have to examine these commits to see if they
# can be simplified.

grep ^Cherry $MIGR_PASS/tag_report.sh >$MIGR_PASS/tag_cherrypicks.txt
grep "R[34]_" $MIGR_PASS/tag_cherrypicks.txt
# No changes here

git branch >$MIGR_PASS/branches.txt
git tag >$MIGR_PASS/tags.txt

# the last step for this one is to be merged into eclipse.platform.ui and grafted on random places

##################################################
# Let's do eclipse.platform.runtime so core has a place to go

#from somewhere with a useful CVSROOT
../../scripts/retag_cvs.sh modules_runtime.sh R3_6 "06/04/2010 00:00" R3_6_maintenance >tag_pass1.sh
grep ^cvs tag_pass1.sh >tag_fix1.sh
#examine tag_fix1.sh and then run
/bin/bash -x tag_fix1.sh

# Then fix the other tags.  TAG1 is a known tag (like from above :-)
../../scripts/subtag_cvs.sh modules_runtime.sh R3_6 R3_6_1 >subtag_pass1.sh
grep ^cvs subtag_pass1.sh >subtag_fix1.sh
#examine subtag_fix1.sh and then run
/bin/bash -x subtag_fix1.sh

../../scripts/subtag_cvs.sh modules_runtime.sh R3_6_1 R3_6_2 >subtag_pass2.sh
grep ^cvs subtag_pass2.sh >subtag_fix2.sh
#examine subtag_fix2.sh and then run
/bin/bash -x subtag_fix2.sh


# R3_5
../../scripts/retag_cvs.sh modules_runtime.sh R3_5 "06/05/2009 00:00" R3_5_maintenance  >tag35_pass1.sh
grep ^cvs tag35_pass1.sh >tag35_fix1.sh
#examine tag35_fix1.sh and then run
/bin/bash -x tag35_fix1.sh

# Then fix the other tags.  TAG1 is a known tag (like from above :-)
../../scripts/subtag_cvs.sh modules_runtime.sh R3_5 R3_5_1 >subtag35_pass1.sh
grep ^cvs subtag35_pass1.sh >subtag35_fix1.sh
#examine subtag35_fix1.sh and then run
/bin/bash -x subtag35_fix1.sh

../../scripts/subtag_cvs.sh modules_runtime.sh R3_5_1 R3_5_2 >subtag35_pass2.sh
grep ^cvs subtag35_pass2.sh >subtag35_fix2.sh
#examine subtag35_fix2.sh and then run
/bin/bash -x subtag35_fix2.sh

# R3_4
../../scripts/retag_cvs.sh modules_runtime.sh R3_4 "06/11/2008 00:00" R3_4_maintenance  >tag34_pass1.sh
grep ^cvs tag34_pass1.sh >tag34_fix1.sh
#examine tag34_fix1.sh and then run
/bin/bash -x tag34_fix1.sh

# Then fix the other tags.  TAG1 is a known tag (like from above :-)
../../scripts/subtag_cvs.sh modules_runtime.sh R3_4 R3_4_1 >subtag34_pass1.sh
grep ^cvs subtag34_pass1.sh >subtag34_fix1.sh
#examine subtag34_fix1.sh and then run
/bin/bash -x subtag34_fix1.sh

../../scripts/subtag_cvs.sh modules_runtime.sh R3_4_1 R3_4_2 >subtag34_pass2.sh
grep ^cvs subtag34_pass2.sh >subtag34_fix2.sh
#examine subtag34_fix2.sh and then run
/bin/bash -x subtag34_fix2.sh

# R3_7
../../scripts/retag_cvs.sh modules_runtime.sh R3_7 "06/24/2011 00:00" R3_7_maintenance >tag37_pass1.sh
grep ^cvs tag37_pass1.sh >tag37_fix1.sh
#examine tag37_fix1.sh and then run
/bin/bash -x tag37_fix1.sh

# let's get started
MODULE_NAME=eclipse.platform.runtime

cd $ROOT
CVS_LOC=$ROOT/cvsroot.$MODULE_NAME
mkdir -p $CVS_LOC/eclipse.platform.runtime/bundles
cd $CVS_LOC
cvs -d :local:$(pwd) init

MIGR_PASS=$MIGR/$MODULE_NAME/pass3

cd /cvsroot/eclipse
. $MIGR_PASS/modules_runtime.sh
for M in $MODULES; do
  echo $M
  cp -r $M $CVS_LOC/eclipse.platform.runtime/bundles
done



# clean the CVS repo of links
find $CVS_LOC -type l|xargs -n 1 rm

# generate the import data
# make sure the author names are correct - updated for eclipse.platform.runtime
# make sure your options file points to the correct tmp cvsroot
cd $ROOT
vi $MIGR_PASS/cvs2git.options
rm -rf cvs2svn-tmp symbol-info.txt cvs2git_log.txt
cvs2svn-trunk/cvs2git --options=$MIGR_PASS/cvs2git.options >cvs2git_log.txt 2>&1
cp symbol-info.txt cvs2git_log.txt $MIGR_PASS



# create a git repo to be used for verification
git init verify.$MODULE_NAME
cd verify.$MODULE_NAME
cat ../cvs2svn-tmp/git-blob.dat ../cvs2svn-tmp/git-dump.dat | git fast-import

python ../cvs2svn-trunk/contrib/git-move-refs.py
git prune
git repack -a -d --depth=250 --window=250
git gc --aggressive
git repack -a -d --depth=250 --window=250

# verify the repo - this can take long, so for your first test skip this step.
cd $ROOT
rm -rf compare-tmp
mkdir compare-tmp
python $ROOT/cvs2svn-trunk/contrib/verify-cvs2svn.py \
--git $CVS_LOC/$MODULE_NAME \
$ROOT/verify.$MODULE_NAME \
--tmp=$ROOT/compare-tmp --diff >$MIGR_PASS/compare-log.txt 2>&1 &

# create a git repo to continue the conversion
cd $ROOT
git init target.$MODULE_NAME
cd target.$MODULE_NAME

cat ../cvs2svn-tmp/git-blob.dat ../cvs2svn-tmp/git-dump.dat | git fast-import
python ../cvs2svn-trunk/contrib/git-move-refs.py
git prune
git repack -a -d --depth=250 --window=250
git gc --aggressive
git repack -a -d --depth=250 --window=250



# Fixing the Delete only tags:
cd $ROOT/target.$MODULE_NAME
/bin/bash $MIGR/scripts/fix_tags.sh >$MIGR_PASS/tag_report.sh
grep ^git $MIGR_PASS/tag_report.sh >$MIGR_PASS/mv_tags.sh
# examine them
/bin/bash $MIGR_PASS/mv_tags.sh

# now examine the repo, hopefully the tags and branches that we care about are in decent shape.
# In my case, I see Cherrypick markers for a couple of tags.  When the conversion is complete and most
# people are happy, a developer will have to examine these commits to see if they
# can be simplified.

grep ^Cherry $MIGR_PASS/tag_report.sh >$MIGR_PASS/tag_cherrypicks.txt
grep "R[34]_" $MIGR_PASS/tag_cherrypicks.txt
#Cherrypick tag: R3_0_1 commit: 97501471bd7c6703f61c0f0ac8a7d9d6cbce26a7
#Cherrypick tag: R3_0_2 commit: 12ec8ee0788365599a1a4ad48cbf0afd7c377b23
#Cherrypick tag: R3_1_1 commit: 202d867ac7ed58a4fea01bdc7835be94c8ac9a34
#Cherrypick tag: R3_1_2 commit: d7dfd6ff907e77ca9f310b3f27e5402fba8214dd
#Cherrypick tag: R3_2_1 commit: cdbda0401288a0255427acd5ef5c0c4c9b91a49c
#Cherrypick tag: R3_2_2 commit: ad5844f5da7b5d688eb799d90eda450a952892e4
#Cherrypick tag: R3_3_1 commit: 7e0126e6acc3aef7229414450c973b4a2e30dc3f
#Cherrypick tag: R3_3_1_1 commit: 7e0126e6acc3aef7229414450c973b4a2e30dc3f
#Cherrypick tag: R3_3_2 commit: 7e0126e6acc3aef7229414450c973b4a2e30dc3f
#Cherrypick tag: R3_5 commit: 0fcdd52072d2283d9ebb39a03630caefb65614dd


git branch >$MIGR_PASS/branches.txt
git tag >$MIGR_PASS/tags.txt

# now we're ready to start stiching repos together :-)

##################################################
# merging eclipse.platform.runtime.e4 into eclipse.platform.runtime

MODULE_NAME=eclipse.platform.runtime
MIGR_PASS=$MIGR/$MODULE_NAME/pass3
MIGR_E4_PASS=$MIGR/eclipse.platform.runtime.e4/pass3

cd $ROOT
comm -12 $MIGR_PASS/tags.txt $MIGR_E4_PASS/tags.txt >$MIGR_PASS/common_tags.txt
comm -12 $MIGR_PASS/branches.txt $MIGR_E4_PASS/branches.txt >$MIGR_PASS/common_branches.txt

# no common branches or tags ... good

cd target.$MODULE_NAME
git config user.email pwebster
git config user.name "Paul Webster"

git remote add e4 ../target.eclipse.platform.runtime.e4
git fetch e4
git merge e4/master

rm -f $MIGR_PASS/localize_e4_branches.sh

git branch -r | grep -v e4\/master >$MIGR_PASS/remote_e4_branches.txt
for f in $( cat $MIGR_PASS/remote_e4_branches.txt ); do 
BR=$( echo $f | sed 's/^.*\///g' )
echo git branch -t $BR $f >>$MIGR_PASS/localize_e4_branches.sh
done

/bin/bash $MIGR_PASS/localize_e4_branches.sh
git remote rm e4


cd $ROOT
cat - >gitignore <<EOF
bin/
*~
*.rej
*.bak
core
*.patch
javacore.*
heapdump.*
core.*
Snap.*
target/

EOF

cd target.$MODULE_NAME

# from http://stackoverflow.com/questions/3895453/how-do-i-make-a-git-commit-in-the-past
rm -f t1.txt
git checkout master

new_file=$(git hash-object -w ../gitignore)
git filter-branch \
--index-filter \
'git update-index --add --cacheinfo 100644 '"$new_file"' .gitignore' \
--tag-name-filter cat \
-- --all

git reset --hard

#create deploy
cd $ROOT
git clone --bare  target.$MODULE_NAME deploy.$MODULE_NAME
cd deploy.$MODULE_NAME
git remote rm origin
git config -l
git config --add core.sharedrepository 1

#final pack and prune step
git prune
git repack -a -d --depth=250 --window=250
git gc --aggressive
git repack -a -d --depth=250 --window=250


scp -r * pwebster@git.eclipse.org:/gitroot/platform/${MODULE_NAME}.git
#
# DONE, eclipse.platform.runtime
#