From ea5b768907e43b40519e41bc34105d2d174947b0 Mon Sep 17 00:00:00 2001 From: Oliver Sander <sander@igpm.rwth-aachen.de> Date: Thu, 26 Mar 2015 15:01:01 +0100 Subject: [PATCH] Document subversion->git migration process --- convert-to-git.bash | 166 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100755 convert-to-git.bash diff --git a/convert-to-git.bash b/convert-to-git.bash new file mode 100755 index 00000000..1fb1215c --- /dev/null +++ b/convert-to-git.bash @@ -0,0 +1,166 @@ +#!/usr/bin/env bash + +GIT_CLEANUP=$PWD/git-cleanup.bash +GIT_CONVERT=$PWD/convert-to-git.bash + +if ! [[ -f ${GIT_CONVERT} ]]; then + cat <<EOF +error: This script expects to be called convert-to-git.bash and reside in the + directory in which it is executed. +EOF + exit -1 +fi + +clone() { + git svn clone --stdlayout \ + https://www.igpm.rwth-aachen.de/svn/sander/dune-modules/$1 +} + +handle_gitignore_and_filter() { + git svn show-ignore > .gitignore + git add .gitignore + git commit -m 'Convert svn:ignore properties to .gitignore.' + + git filter-branch -f \ + --msg-filter ' + sed -e "/^\$/{ :l; N; s/^\n\$//; t l; p; d; }" | \ + sed -e "/^git-svn-id:/s/.*@\([^ ]*\) .*$/[[Imported from SVN: r\1]]/"' \ + --commit-filter ". ${GIT_CLEANUP};" \ + HEAD +} + +create_release_branch() { + git checkout -b releases/$1 origin/$2 +} + +create_git_cleanup() { + cat > ${GIT_CLEANUP} <<'EOF' +#!/usr/bin/env bash + +case $GIT_AUTHOR_NAME in + akbib*|youett*) + GIT_AUTHOR_NAME="Jonathan Youett" + GIT_AUTHOR_EMAIL=youett@mi.fu-berlin.de + ;; + ansgar) + GIT_AUTHOR_NAME="Ansgar Burchardt" + GIT_AUTHOR_EMAIL=burchardt@igpm.rwth-aachen.de + ;; + forster*) + GIT_AUTHOR_NAME="Ralf Forster" + GIT_AUTHOR_EMAIL=forster@math.fu-berlin.de + ;; + graeser*) + GIT_AUTHOR_NAME="Carsten Gräser" + GIT_AUTHOR_EMAIL=graeser@mi.fu-berlin.de + ;; + lschmidt*|oel*) + GIT_AUTHOR_NAME="Leo Schmidt" + GIT_AUTHOR_EMAIL=lschmidt@math.fu-berlin.de + ;; + klapprot*) + GIT_AUTHOR_NAME="Corinna Klapproth" + GIT_AUTHOR_EMAIL=klapproth@zib.de + ;; + mawolf*) + GIT_AUTHOR_NAME="Maren-Wanda Wolf" + GIT_AUTHOR_EMAIL=mawolf@math.fu-berlin.de + ;; + maxka) + GIT_AUTHOR_NAME="Max Kahnt" + GIT_AUTHOR_EMAIL=max.kahnt@fu-berlin.de + ;; + pipping*) + GIT_AUTHOR_NAME="Elias Pipping" + GIT_AUTHOR_EMAIL=elias.pipping@fu-berlin.de + ;; + podlesjo) + GIT_AUTHOR_NAME="Joscha Podlesny" + GIT_AUTHOR_EMAIL=joscha.py@googlemail.com + ;; + sander*) + GIT_AUTHOR_NAME="Oliver Sander" + GIT_AUTHOR_EMAIL=sander@igpm.rwth-aachen.de + ;; + sertel) + GIT_AUTHOR_NAME="Susanne Ertel" + GIT_AUTHOR_EMAIL=ertel@zib.de + ;; + usack*) + GIT_AUTHOR_NAME="Uli Sack" + GIT_AUTHOR_EMAIL=usack@math.fu-berlin.de + ;; +esac +git commit-tree "$@" +EOF +} + +save_script_and_create_tag() { + cp ${GIT_CONVERT} . + git add convert-to-git.bash + git commit -m 'Document subversion->git migration process' + git tag -a \ + -m "Subversion->Git migration completed. Master rev: $@" \ + 'subversion->git' +} + +### Check out and clean up repositories + +create_git_cleanup + +clone dune-gfe +( + cd dune-gfe + master_rev=$(git svn find-rev HEAD) + create_release_branch 2.0-1 2.0-1 ; handle_gitignore_and_filter; # Rename + create_release_branch 2.1-1 2.1-1 ; handle_gitignore_and_filter; + create_release_branch 2.2-1 2.2-1 ; handle_gitignore_and_filter; + create_release_branch 2.2-2 2.2-2 ; handle_gitignore_and_filter; + create_release_branch 2.3-1 2.3-1 ; handle_gitignore_and_filter; + create_release_branch 2.3-2 2.3-2 ; handle_gitignore_and_filter; + create_release_branch 2.3-last-basically-sequential-version 2.3-last-basically-sequential-version ; handle_gitignore_and_filter; + create_release_branch first-evidence-that-neff-shells-do-not-lock first-evidence-that-neff-shells-do-not-lock ; handle_gitignore_and_filter; + create_release_branch first-working-adol-c-support first-working-adol-c-support ; handle_gitignore_and_filter; + create_release_branch working-version-before-moving-to-dune-functions working-version-before-moving-to-dune-functions ; handle_gitignore_and_filter; + git checkout master ; handle_gitignore_and_filter; + save_script_and_create_tag ${master_rev} +) + + +rm -f ${GIT_CLEANUP} + +## Debugging section +# +# Use the following scripts to check if the conversion went according to plan +# +# (1) To generate a list of authors +# +# !/usr/bin/env bash +# +# for i in dune-*; do +# ( +# cd $i; +# git log --format=tformat:'%an <%ae>'; +# ); +# done | perl -e ' +# use 5.018; +# my %a; +# while (<>) { +# chomp; $a{$_}++; +# }; +# while (each %a) { +# printf "%d\t%s\n", $a{$_}, $_; +# } +# ' | sort -n +# +# (2) To generate a list of converted branches +# +# !/usr/bin/env bash +# +# for i in dune-*; do +# ( +# cd $i; +# echo $i; +# git for-each-ref --format=' %(refname)' refs/heads; +# ); +# done -- GitLab