#!/bin/bash USERNAME= AUTHORS_FILE=authors.txt SVN_URL="" SVN_PROJECT_LOCAL_DIR="" GIT_REPOSITORY_DIRECTORY_NAME="" WORKSPACE=~/workspace AUTHORS_OK=false POM_FILE=pom.xml OLD_MAVEN_PARENT_VERSION="1.0.0" NEW_MAVEN_PARENT_VERSION="1.1.0" GITEA_TOKEN= GIT_OK=false function git_repository { while [ "$GIT_OK" = false ] do echo "Did you created the https://code-repo.d4science.org/gCubeSystem/${GIT_REPOSITORY_DIRECTORY_NAME}.git repository?" select yna in "Yes" "No" "Abort"; do case $yna in Yes ) GIT_OK=true; break;; No ) GIT_OK=false git_create_repository break;; Abort ) exit;; esac done done } function git_create_repository { local GIT_CREATE_OK=false if [[ -z "$GITEA_TOKEN" ]]; then echo "Please initialize GITEA_TOKEN first"; exit fi while [ "$GIT_CREATE_OK" = false ] do echo "Do you want automatically create https://code-repo.d4science.org/gCubeSystem/${GIT_REPOSITORY_DIRECTORY_NAME}.git repository?" select yna in "Yes" "No" "Abort"; do case $yna in Yes ) curl -X POST "https://code-repo.d4science.org/api/v1/org/gCubeSystem/repos?access_token=$GITEA_TOKEN" -H "accept: application/json" -H "content-type: application/json" -d "{\"name\":\"${GIT_REPOSITORY_DIRECTORY_NAME}\"}" echo "\n" GIT_CREATE_OK=true; GIT_OK=true; break;; No ) echo "Please created it at https://code-repo.d4science.org/repo/create?org=5722 and select yes to continue. See how to do it at https://wiki.gcube-system.org/gcube/Git_Repositories#Create_a_New_Repository" git_repository GIT_CREATE_OK=true break;; Abort ) exit;; esac done done } function authors { if [ "$AUTHORS_OK" = false ]; then read -p "By continuing you will be able to check the authors file with 'less' command (type ENTER to continue)." fi while [ "$AUTHORS_OK" = false ] do less $AUTHORS_FILE echo "Are authors correct?" select yna in "Yes" "No" "Abort"; do case $yna in Yes ) AUTHORS_OK=true; break;; No ) echo "Please edit $AUTHORS_FILE manually then continue" AUTHORS_OK=false break;; Abort ) AUTHORS_OK=false exit;; esac done if [ $AUTHORS_OK = false ]; then nano $AUTHORS_FILE fi done } function repositories { local REPO_OK=false while [ "$REPO_OK" = false ] do git remote -v echo "Are repositories correct?" select yna in "Yes" "No" "Abort"; do case $yna in Yes ) REPO_OK=true; break;; No ) REPO_OK=false exit;; Abort ) REPO_OK=false exit;; esac done done } function push { local PUSH_OK=false while [ "$PUSH_OK" = false ] do echo "Do you want to push to the git repository?" select yna in "Yes" "No" "Abort"; do case $yna in Yes ) PUSH_OK=true; git push --set-upstream --force origin master break;; No ) PUSH_OK=true break;; Abort ) PUSH_OK=false exit;; esac done done } function fix_maven-parent { local FIX_OK=false while [ "$FIX_OK" = false ] do echo "Do you want to change maven parent from $OLD_MAVEN_PARENT_VERSION to $NEW_MAVEN_PARENT_VERSION?" select yna in "Yes" "No" "Abort"; do case $yna in Yes ) FIX_OK=true sed -i "s/$OLD_MAVEN_PARENT_VERSION<\/version>/$NEW_MAVEN_PARENT_VERSION<\/version>/g" $POM_FILE break;; No ) FIX_OK=true break;; Abort ) exit;; esac done done } function maven-parent-fixed { local FIXED=false while [ "$FIXED" = false ] do git diff echo "Was the fix made properly. Answering yes will result in a commit and a push to the push origin" select yna in "Yes" "No" "Abort"; do case $yna in Yes ) FIXED=true git add $POM_FILE git commit -m "Switched maven parent from $OLD_MAVEN_PARENT_VERSION to $NEW_MAVEN_PARENT_VERSION" break;; No ) exit;; esac done done } function ignore_target_directory { echo target > .gitignore git add .gitignore git commit -m 'Ignored generated target directory' } function showhelp { echo -e "\nUsage: import-from-svn.sh [-s ] [-u ] [-h] \n" echo " -s The SVN repository URL" echo " -p The path to the local project actually on SVN" echo " -u for git svn clone command e.g. luca.frosini" echo " -g " echo " -a does not request to check the author file" echo -e " -h shows this help.\n" } while getopts ":i:s:p:u:g:a:h" opt; do case $opt in i) INIT=true;; s) SVN_URL=$OPTARG;; p) SVN_PROJECT_LOCAL_DIR=$OPTARG;; u) USERNAME=$OPTARG;; g) GIT_REPOSITORY_DIRECTORY_NAME=$OPTARG;; a) AUTHORS_OK=true;; h) showhelp; exit ;; ?) echo -e "\nERROR:invalid option: -$OPTARG"; showhelp; exit 1 >&2;; esac done GIT_MIGRATION_DIRECTORY="$(pwd)" if [[ -n "$SVN_PROJECT_LOCAL_DIR" ]]; then echo "Going to migrate SVN repository : $SVN_PROJECT_LOCAL_DIR" cd $SVN_PROJECT_LOCAL_DIR if [[ -z "$SVN_URL" ]]; then SVN_URL="$(svn info --show-item url)" echo "SVN repository URL is : $SVN_URL" fi if [[ -z "$GIT_REPOSITORY_DIRECTORY_NAME" ]]; then GIT_REPOSITORY_DIRECTORY_NAME="$(basename $PWD)" echo "Local repository directory will be : $GIT_REPOSITORY_DIRECTORY_NAME" fi fi if [ $INIT ]; then wget https://code-repo.d4science.org/gCubeSystem/Configs/raw/branch/master/SVN/svn-migration-scripts.jar echo "You must configure the SVn to Git migration facilities. Please check how to do it at https://wiki.gcube-system.org/gcube/Import_from_SVN#Configure_your_system_to_allow_Migration_Facilities_to_properly_work" exit fi cd $GIT_MIGRATION_DIRECTORY MIGRATION_DIRECTORY="${GIT_REPOSITORY_DIRECTORY_NAME}-migration" echo "Going to create $MIGRATION_DIRECTORY" rm -rf $MIGRATION_DIRECTORY mkdir $MIGRATION_DIRECTORY cd $MIGRATION_DIRECTORY git_repository echo -e "\n" #echo "Removing old $AUTHORS_FILE file" rm -rf $AUTHORS_FILE #echo "Getting updated $AUTHORS_FILE file" wget -q -O $AUTHORS_FILE https://code-repo.d4science.org/gCubeSystem/Configs/raw/branch/master/SVN/all-svn-authors.txt #echo "Exporting authors from history of $SVN_URL repository" #java -jar svn-migration-scripts.jar authors $SVN_URL > $AUTHORS_FILE #sed -i s/@mycompany.com/@isti.cnr.it/g $AUTHORS_FILE authors git svn clone --authors-file=$AUTHORS_FILE --follow-parent $SVN_URL --username $USERNAME $GIT_REPOSITORY_DIRECTORY_NAME cd $GIT_REPOSITORY_DIRECTORY_NAME CREATED_GIT_DIRECTORY="$(pwd)" echo "Git Repository directory $CREATED_GIT_DIRECTORY" git branch #git remote add origin "https://code-repo.d4science.org/gCubeSystem/${GIT_REPOSITORY_DIRECTORY_NAME}.git" git remote add origin "gitea@code-repo.d4science.org:gCubeSystem/${GIT_REPOSITORY_DIRECTORY_NAME}.git" git remote -v push SVN_DIRECTORY="${WORKSPACE}/SVN" if [ ! -d "$SVN_DIRECTORY" ]; then mkdir $SVN_DIRECTORY fi mv $SVN_PROJECT_LOCAL_DIR ${SVN_DIRECTORY}/ mv $CREATED_GIT_DIRECTORY $SVN_PROJECT_LOCAL_DIR cd $SVN_PROJECT_LOCAL_DIR fix_maven-parent maven-parent-fixed ignore_target_directory git push cd $GIT_MIGRATION_DIRECTORY rm -rf $MIGRATION_DIRECTORY echo "Well Done" echo "Please configure the Jenkins Building system for your project at https://jenkins.d4science.org/ See how to do it at https://wiki.gcube-system.org/gcube/Jenkins_Projects_(aka_Jobs)" echo "Please Add Webhhoks on Gitea at https://code-repo.d4science.org/gCubeSystem/${GIT_REPOSITORY_DIRECTORY_NAME} See how to do it at https://wiki.gcube-system.org/gcube/Gitea/Jenkins:_Setting_up_Webhooks#Webhook_on_the_Gitea_repository"