SLING-3987 - move from Subversion to Git

Split the migrate-to-git.sh script to have multiple steps and add
a basic README.

git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1809073 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/scripts/README.md b/scripts/README.md
new file mode 100644
index 0000000..60eb7ae
--- /dev/null
+++ b/scripts/README.md
@@ -0,0 +1,27 @@
+SCM Tooling
+====
+
+Git migration helpers
+---
+
+The workflow for migrating from Subversion to Git is the following:
+
+1. Generate the list of repository candidates
+
+    $ ./tooling/scm/scripts/gen-repo-candidates.sh  > repo-candidates.txt
+
+2. Create the remote repositories using the ASF self-service git tool
+
+    $ ./tooling/scm/scripts/migrate-to-git.sh -r < repo-candidates.txt
+
+Creating a repository can take up to one hour, so do this well in advance
+
+3. Extract the modules in individual repositories
+
+    $ ./tooling/scm/scripts/migrate-to-git.sh -r < repo-candidates.txt
+
+Also validate that the repositories created using step 2 are now live.
+
+4. Push the local changes to the remote repositories
+
+    $ ./tooling/scm/scripts/migrate-to-git.sh -p < repo-candidates.txt
diff --git a/scripts/migrate-to-git.sh b/scripts/migrate-to-git.sh
index b87f34f..ed270b6 100755
--- a/scripts/migrate-to-git.sh
+++ b/scripts/migrate-to-git.sh
@@ -21,6 +21,17 @@
 git_repo_location='../sling-modules'
 git_src_location='../sling-modules-src'
 
+function usage  {
+    echo "Usage: $0 [-p|-c] < repo-list.txt"
+    echo ""
+    echo "   -r : provision the Remote repositories"
+    echo "   -c : Convert the Repositories locally"
+    echo "   -p : Push local repositories to remote"
+    echo ""
+    echo "The repo-list.txt file can be generated using the "
+    echo "$(dirname $0)/gen-repo-candidates.sh script"
+}
+
 if [ ! -f check_staged_release.sh ]; then
     echo "Please run this script from the root of the Sling SVN repository"
     exit 1
@@ -35,7 +46,22 @@
     echo "Done!"
 fi
 
-for module in $(./tooling/scm/scripts/gen-repo-candidates.sh); do
+# validate CLI
+if [ $# -ne 1 ]; then
+    usage
+    exit -1
+fi
+
+case "$1" in 
+    "-r") echo "Provisioning remote repositories" ;;
+    "-c") echo "Converting local repositories";;
+    "-p") echo "Pushing local repositories to remove";;
+    *)
+        usage
+        exit -1
+esac
+
+while read -r module; do
 
     module_orig=$module
 
@@ -47,60 +73,66 @@
 
     repo_name="sling-${artifactId}" # add TLP prefix
     
-    echo "---- Preparing to migrate $module_orig to $repo_name ---"
+    echo "---- Preparing to process $module_orig as $repo_name ---"
 
-    status=$(curl -s -o /dev/null -I  -w "%{http_code}" https://git-wip-us.apache.org/repos/asf?p=${repo_name})
+    if [ $1 == "-c" ]; then
+   
+        if [ ! -d ${git_repo_location}/${repo_name}/.git ]; then
+            echo "Converting from SVN to Git..."
 
-    if [ $status = "404" ]; then
-        echo "Repository not found, will create";
-    elif [ $status = "200" ] ;then
-        echo "Repository exists, skipping";
-    else
-        echo "Unhandled HTTP status code ${status}, aborting"
-        exit 1
-    fi
-    
-    if [ ! -d ${git_repo_location}/${repo_name}/.git ]; then
-        echo "Converting from SVN to Git..."
+            # create the initial repo
+            git clone --no-hardlinks ${git_src_location} ${git_repo_location}/${repo_name}
+            pushd ${git_repo_location}/${repo_name}
 
-        # create the initial repo
-        git clone --no-hardlinks ${git_src_location} ${git_repo_location}/${repo_name}
+            # make sure we don't push to the incorrect repo and also remove make sure
+            # we don't keep references to the remote repo
+            git remote rm origin
+
+            # rename trunk to master
+            git branch -m trunk master
+
+            # Remove everything except the path belonging to the module
+            git filter-branch --subdirectory-filter ${module_orig}
+
+            # remove unrelated tags
+            for tag in $(git tag); do
+                if [[ $tag != ${artifactId}* ]]; then
+                    git tag -d ${tag}
+                fi
+            done
+
+            # cleanup and compaction
+            git for-each-ref --format="%(refname)" refs/original/ | xargs -n1 git update-ref -d
+            git reflog expire --expire=now --all
+            git repack -Ad
+            git gc --aggressive --prune=now
+            popd
+            echo "Complete!"
+        else
+            echo "Already converted"
+        fi
+
+    elif [ $1 == "-r" ]; then
+        status=$(curl -s -o /dev/null -I  -w "%{http_code}" https://git-wip-us.apache.org/repos/asf?p=${repo_name})
+
+        if [ $status = "404" ]; then
+            echo "Repository not found, will create";
+        elif [ $status = "200" ] ;then
+            echo "Repository exists, skipping";
+        else
+            echo "Unhandled HTTP status code ${status}, aborting"
+            exit 1
+        fi
+     
+        
+        # TODO - create the repository using the ASF self-service tool
+        # curl --netrc 'https://reporeq.apache.org/ss.lua'
+        echo "Creating GIT repository ..."
+        exit 254 # unimplemented
+    else # -p
         pushd ${git_repo_location}/${repo_name}
-
-        # make sure we don't push to the incorrect repo and also remove make sure
-        # we don't keep references to the remote repo
-        git remote rm origin
-
-        # rename trunk to master
-        git branch -m trunk master
-
-        # Remove everything except the path belonging to the module
-        git filter-branch --subdirectory-filter ${module_orig}
-
-        # remove unrelated tags
-        for tag in $(git tag); do
-            if [[ $tag != ${artifactId}* ]]; then
-                git tag -d ${tag}
-            fi
-        done
-
-        # cleanup and compaction
-        git for-each-ref --format="%(refname)" refs/original/ | xargs -n1 git update-ref -d
-        git reflog expire --expire=now --all
-        git repack -Ad
-        git gc --aggressive --prune=now
+        git remote add origin https://git-wip-us.apache.org/repos/asf/${repo_name}.git
+        git push -u origin master
         popd
-        echo "Complete!"
-    else
-        echo "Already converted"
     fi
-
-    
-    # TODO - create the repository using the ASF self-service tool
-    echo "Creating GIT repository ..."
-    exit 254 # unimplemented
-
-    cd ${git_repo_location}/${repo_name}
-    git remote add origin https://git-wip-us.apache.org/repos/asf/${repo_name}.git
-    git push -u origin master
 done