smeserver-gitutils/git-migrate-repo.sh

135 lines
3.8 KiB
Bash
Raw Normal View History

2023-05-09 05:34:39 +02:00
#!/bin/bash
#
# Migrate (mirror) a remote repository
#
# migrate-repo.sh <reponame> <organisation> [<target organisation>]
#
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 <reponame> <organisation> [<target organisation>]"
exit 1
else
initfilename="/etc/smegit.ini"
fi
2023-05-09 05:34:39 +02:00
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
if [[ -z $1 ]] ; then
echo "git_migrate-repo.sh <reponame> <organisation> [<target organization>]"
echo "will migrate repo to local user unless <target organisation> specified"
2023-05-09 05:34:39 +02:00
exit 0
fi
DEBUG=
if [ ${smegit_DEBUG} == true ] ; then DEBUG=true ; fi
if [ $DEBUG ] ; then echo "found ini file: $inifilename" ; fi
curlsilent="-s"
if [ $DEBUG ] ; then curlsilent="-v" ; fi
2023-05-09 05:34:39 +02:00
REMOTEACCESSTOKEN=${remote_GITEAACCESSTOKEN}
LOCALACCESSTOKEN=${local_GITEAACCESSTOKEN}
REMOTEGITEAHOST=${remote_GITEAHOST}
CLONEADDRESS=$REMOTEGITEAHOST/$2/$1.git
LOCALGITEAHOST=${local_GITEAHOST}
TARGETORG=${local_USER}
#if [ $3 ] ; then TARGETORG=$3 ; fi
MIRROR="false"
for param in $3 $4 ; do
if [ $param ] ; then
if [[ $param == "copy" || $param == "mirror" ]] ; then
if [ $param == "mirror" ] ; then MIRROR="true" ; fi
else
TARGETORG=$param
fi
else
break
fi
done
if [ $DEBUG ] ; then
echo "MIRROR=$MIRROR"
echo "TARGETORG=$TARGETORG"
fi
2023-05-09 05:34:39 +02:00
# check that the TARGETORG exists
2023-05-10 04:34:09 +02:00
if [ $DEBUG ] ; then echo "checking if $TARGETORG exists on $LOCALGITEAHOST" ; fi
RESPONSE=$(curl $curlsilent -o /dev/null -w "%{http_code}" $LOCALGITEAHOST/$TARGETORG)
2023-05-10 04:34:09 +02:00
if [ $DEBUG ] ; then echo "RESPONSE=$RESPONSE" ; fi
2023-05-09 05:34:39 +02:00
if [[ "$RESPONSE" != "200" ]] ; then
echo "$TARGETORG does not exist on $LOCALGITEAHOST"
2023-05-09 05:34:39 +02:00
exit 1
fi
# And check if this repo already exists on the target
2023-05-10 04:34:09 +02:00
if [ $DEBUG ] ; then echo "checking if $TARGETORG/$1 already exists on $LOCALGITEAHOST" ; fi
RESPONSE=$(curl $curlsilent -o /dev/null -w "%{http_code}" $LOCALGITEAHOST/$TARGETORG/$1)
2023-05-10 04:34:09 +02:00
if [ $DEBUG ] ; then echo "RESPONSE=$RESPONSE" ; fi
2023-05-10 05:04:48 +02:00
if [ "$RESPONSE" == "200" ] ; then
echo "Repository $TARGETORG/$1 already exists on $LOCALGITEAHOST - cannot migrate"
2023-05-09 05:34:39 +02:00
exit 1
fi
DATA=$(cat << EOT
"auth_token": "$REMOTEACCESSTOKEN",
"clone_addr": "$CLONEADDRESS",
2023-05-09 05:34:39 +02:00
"issues": true,
"labels": true,
"lfs": true,
"milestones": true,
"mirror": $MIRROR,
2023-05-09 05:34:39 +02:00
"private": false,
"pull_requests": true,
"releases": true,
"repo_name": "$1",
"repo_owner": "$TARGETORG",
2023-05-09 05:34:39 +02:00
"service": "git",
"uid": 0,
"wiki": true
EOT
)
if [ $DEBUG ] ; then echo "JSON DATA=$DATA" ; fi
2023-05-09 05:34:39 +02:00
if [ $DEBUG ] ; then echo "Migrating $2/$1 as $TARGETORG/$1 on $LOCALGITEAHOST MIRROR=$MIRROR" ; fi
RESPONSE=$(curl $curlsilent -k -X 'POST' \
"$LOCALGITEAHOST/api/v1/repos/migrate" \
-H 'accept: application/json' \
-H "Authorization: token $LOCALACCESSTOKEN" \
-H 'Content-Type: application/json' \
-d "{ $DATA }"
)
2023-05-09 05:34:39 +02:00
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 $curlsilent -o /dev/null -w "%{http_code}" $LOCALGITEAHOST/$TARGETORG/$1)
2023-05-10 04:34:09 +02:00
if [ $DEBUG ] ; then echo "RESPONSE=$RESPONSE" ; fi
2023-05-09 05:34:39 +02:00
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
2023-05-09 05:34:39 +02:00
else
echo "migrate-repo was unable to migrate $2/$1 sucessfully"
exit 1
2023-05-09 05:34:39 +02:00
fi