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