import/migrate.sh

89 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euf -o pipefail
curp="$(cd "$(dirname "$0")" && pwd)"
# unset all GITEA_* variables
unset "${!GITEA_@}"
[ -f "$curp/init.sh" ] && source "$curp/init.sh"
source "${curp}/include/gitea.sh"
# defaults
: ${GITEA_ADMIN_USERNAME:=$USER}
: ${GITEA_ADMIN_PASSWORD:=}
# example ssh://git@gitea.example.com:3022
: ${GITEA_SERVER_PUSH_URL:=}
ARGS=()
pos_arg_flag=0
while [[ $# -gt 0 ]]; do
if [ "${pos_arg_flag}" -eq "1" ]; then
ARGS+=("$1")
shift 1
continue
fi
case "$1" in
--url | -u)
GITEA_SERVER_URL="$2"
shift 2
;;
--token | -t)
GITEA_ADMIN_TOKEN="$2"
shift 2
;;
--admin | -a)
GITEA_ADMIN_USERNAME="$2"
shift 2
;;
--password | -p)
GITEA_ADMIN_PASSWORD="$2"
shift 2
;;
--pushurl | -s)
GITEA_SERVER_PUSH_URL="$2"
shift 2
;;
--)
pos_arg_flag=1
shift 1
;;
--*=*)
set -- "$(cat - <<<"$1" | cut -d '=' -f1)" "$(cat - <<<"$1" | cut -d '=' -f2-)" "${@:3}"
;;
*)
ARGS+=("$1")
shift 1
;;
esac
done
[ -z "${GITEA_SERVER_PUSH_URL}" ] &&
GITEA_SERVER_PUSH_URL="$(echo "${GITEA_SERVER_URL}" | perl -pe "s#(https?://)#\${1}${GITEA_ADMIN_USERNAME}:${GITEA_ADMIN_PASSWORD}@#")"
GITEA_SERVER_API_URL="${GITEA_SERVER_URL}/api/v1"
# init repos
for repo in "${ARGS[@]}"; do
repoPath="$(echo "$repo" | cut -d ':' -f1 | tr -d '[:space:]')"
repoOrg="$(echo "$repo" | cut -d ':' -f2 | tr -d '[:space:]')"
repoName="$(echo "$repo" | cut -d ':' -f3 | tr -d '[:space:]')"
[ -z "$repoName" ] && repoName="$(basename "$repoPath" ".git")"
if [ -z "$repoOrg" ]; then
repoAPIEP="/user/repos"
repoOwner="${GITEA_ADMIN_USERNAME}"
UTYPE=user
else
gitea_create_org "$repoOrg"
repoAPIEP="/org/$repoOrg/repos"
repoOwner="$repoOrg"
UTYPE=org
fi
gitea_create_repo "${repoOwner}" "${repoName}" "${UTYPE}" 1>&2
(
cd "$repoPath"
git push "${GITEA_SERVER_PUSH_URL}/${repoOwner}/${repoName}.git" --mirror
)
done