#!/bin/bash # # Migrate (mirror) a remote repository # # migrate-repo.sh [] # if [[ -z $1 ]] ; then echo "git_migrate-repo.sh [ ]" echo "will migrate repo to local user unless specified" exit 0 fi # get config file and params inifilename=$(echo ~)"/.smegit/config" if [ ! -e $inifilename ] ; then # Not here, look at system default if [ ! -e /etc/smegit.ini ] ; then echo "No ini file found $inifiename or /etc/smegit.ini" echo "git_mirror-repo.sh []" exit 1 else initfilename="/etc/smegit.ini" fi fi while read -r line || [[ -n "$line" ]]; do if [[ $line =~ ^\[.*\]$ ]] then section=${line#*[} section=${section%]*} else if [[ $line =~ ^[^#]*= ]] then key=${line%=*} value=${line#*=} declare "${section}_${key}=$value" fi fi done < $inifilename DEBUG= if [ ${smegit_DEBUG} == true ] ; then DEBUG=true ; fi if [ $DEBUG ] ; then echo "found ini file: $inifilename" ; fi SILENT="-s" if [ $DEBUG ] ; then SILENT="-v" ; fi SOURCEHOST=${remote_GITEAHOST} SOURCEACCESSTOKEN=${remote_GITEAACCESSTOKEN} TARGETHOST=${local_GITEAHOST} TARGETACCESSTOKEN=${local_GITEAACCESSTOKEN} TARGETORG=${local_USER} MIRROR=false for param in $2 $3 $4 $5 $6; do if [ $param ] ; then case $param in local ) SOURCEHOST=${local_GITEAHOST} SOURCEACCESSTOKEN=${local_GITEAACCESSTOKEN} CLONEADDRESS=$LOCALGITEAHOST/$2/$1.git ;; copy ) MIRROR=false ;; mirror ) MIRROR=true ;; debug ) DEBUG=true ;; * ) TARGETORG=$param ;; esac else break fi done CLONEADDRESS=$SOURCEHOST/$2/$1.git if [ $DEBUG ] ; then echo "MIRROR=$MIRROR" echo "TARGETORG=$TARGETORG" fi # check that the TARGETORG exists if [ $DEBUG ] ; then echo "checking if $TARGETORG exists on $TARGETHOST" ; fi RESPONSE=$(curl $SILENT -o /dev/null -w "%{http_code}" $TARGETHOST/$TARGETORG) if [ $DEBUG ] ; then echo "RESPONSE=$RESPONSE" ; fi if [[ "$RESPONSE" != "200" ]] ; then echo "$TARGETORG does not exist on $TARGETHOST" exit 1 fi # And check if this repo already exists on the target if [ $DEBUG ] ; then echo "checking if $TARGETORG/$1 already exists on $TARGETHOST" ; fi RESPONSE=$(curl $SILENT -o /dev/null -w "%{http_code}" $TARGETHOST/$TARGETORG/$1) if [ $DEBUG ] ; then echo "RESPONSE=$RESPONSE" ; fi if [ "$RESPONSE" == "200" ] ; then echo "Repository $TARGETORG/$1 already exists on $TARGETHOST - cannot migrate" exit 1 fi DATA=$(cat << EOT "auth_token": "$TARGETACCESSTOKEN", "clone_addr": "$CLONEADDRESS", "issues": true, "labels": true, "lfs": true, "milestones": true, "mirror": $MIRROR, "private": false, "pull_requests": true, "releases": true, "repo_name": "$1", "repo_owner": "$TARGETORG", "service": "git", "uid": 0, "wiki": true EOT ) if [ $DEBUG ] ; then echo "JSON DATA=$DATA" ; fi if [ $DEBUG ] ; then echo "Migrating $2/$1 as $TARGETORG/$1 on $TARGETHOST MIRROR=$MIRROR" ; fi RESPONSE=$(curl $SILENT -k -X 'POST' \ "$TARGETHOST/api/v1/repos/migrate" \ -H 'accept: application/json' \ -H "Authorization: token $TARGETACCESSTOKEN" \ -H 'Content-Type: application/json' \ -d "{ $DATA }" ) if [ $DEBUG ] ; then echo $? $RESPONSE ; fi # And check if this repo is there if [ $DEBUG ] ; then echo "checking that $TARGETORG/$1 exists" ; fi RESPONSE=$(curl $SILENT -o /dev/null -w "%{http_code}" $TARGETHOST/$TARGETORG/$1) if [ $DEBUG ] ; then echo "RESPONSE=$RESPONSE" ; fi if [ "$RESPONSE" == "200" ] ; then msg="Repository $TARGETORG/$1 has been created" if [ $MIRROR == "true" ] ; then msg=$msg" and mirrors $2/$1" else msg=$msg" and is a copy of $2/$1" fi echo $msg else echo "migrate-repo was unable to migrate $2/$1 sucessfully" exit 1 fi