# attempt to merge eclipse.platform.ui/  eclipse.platform.ui.e4/

# in this merge, we simply pull both repos together and then
# merge them onto head

cd eclipse.platform.ui
git tag | sort -u >../tags_ui.txt
git branch -r | sort -u >../branch_ui.txt
cd ../eclipse.platform.ui.e4/
git tag | sort -u >../tags_e4.txt
git branch -r | sort -u >../branch_e4.txt
cd ..
comm -12 tags_ui.txt  tags_e4.txt >common_tags.txt
comm -12 branch_ui.txt branch_e4.txt >common_branches.txt

#Clean up the tags out of the eclipse.platform.ui repo
#Probably branches as well.

# Fix R4_HEAD
# use git log -10 to find the commit, then:
#cvs2svn 8d34cecb6b804430ea35d8fe84ecc864feb810f0 # delete commit
#bbokowski 01abec9233ebf30c5a57f16a91d2b6edc3435dbb # parent commit
rebase --onto 01abec9233ebf30c5a57f16a91d2b6edc3435dbb 8d34cecb6b804430ea35d8fe84ecc864feb810f0

# if you are creating the main repo, you're OK
# if you haven't then you have a lot of pushing to do:
git push --force

# merge org.eclipse.ui/R4_HEAD into the 4.2 master
# did it using EGit and the http://wiki.eclipse.org/EGit/User_Guide#Resolving_a_merge_conflict
# Merge tool
    Conflicts:
        bundles/org.eclipse.ui/META-INF/MANIFEST.MF
        bundles/org.eclipse.ui/schema/viewActions.exsd
+ I had to fix PDE prefs for at least 2 projects



cd eclipse.platform.ui
for f in $( cat ../common_tags.txt ) ; do git tag ${f}_R3 ${f}; git tag -d $f ; git push origin :$f ; done

# pull in the e4 ui stuff and add the merge node.
#

git remote add e4 ssh://pwebster@git.eclipse.org/gitroot/e4/eclipse.platform.ui.e4.git
git fetch e4
git merge e4/master

# Replicate all of the branches so that you can create a useful repo
git branch -r >../br.txt
# remove e4/master and origin/master from the file, then
for f in $( cat ../br.txt ); do BR=$( echo $f | sed 's/^.*\///g' ); git branch -t $BR $f ; done

# Then since master now points to the last commit in e4, 
# the push will push everything back to the main repo
# except we can't push any of our franken-repos, because of the commit hooks
#git push --all origin
#git push --tags origin

# so we'll do it the bad way

  cd ..
  git clone --bare eclipse.platform.ui eclipse.platform.ui.git
  cd eclipse.platform.ui.git
  git remote rm origin
# check that it is shared
  git config -l
  git config --add core.sharedrepository 1
  
# copy it to git root, from my local machine
scp -r * pwebster@dev.eclipse.org:/gitroot/platform/eclipse.platform.ui.git


  