100 lines
1.9 KiB
Bash
Executable File
100 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euf -o pipefail
|
|
|
|
curp="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
bb_projects() {
|
|
# get all projects
|
|
curl --silent \
|
|
-u ${BB_ADMIN_USERNAME}:${SRC_TOKEN} \
|
|
"${BB_SERVER_URL}/rest/api/1.0/projects/" |
|
|
jq -r '.values[] | .key' |
|
|
tr '[:upper:]' '[:lower:]'
|
|
}
|
|
bb_repos() {
|
|
[ -z "$1" ] && return
|
|
# by project
|
|
curl --silent \
|
|
-u ${BB_ADMIN_USERNAME}:${SRC_TOKEN} \
|
|
"${BB_SERVER_URL}/rest/api/1.0/projects/$1/repos/" |
|
|
jq -r '.values[].name' |
|
|
tr '[:upper:]' '[:lower:]'
|
|
}
|
|
|
|
# unset all GITEA_* variables
|
|
unset "${!GITEA_@}"
|
|
|
|
[ -f "$curp/init.sh" ] && source "$curp/init.sh"
|
|
|
|
[ -z "${SRC_TOKEN}" ] && {
|
|
echo "SRC_TOKEN is empty" 1>&2
|
|
exit 1
|
|
}
|
|
|
|
: ${BB_ADMIN_USERNAME:=$USER}
|
|
: ${BB_ADMIN_PASSWORD:=}
|
|
|
|
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)
|
|
BB_SERVER_URL="$2"
|
|
shift 2
|
|
;;
|
|
--token | -t)
|
|
SRC_TOKEN="$2"
|
|
shift 2
|
|
;;
|
|
--admin | -a)
|
|
BB_ADMIN_USERNAME="$2"
|
|
shift 2
|
|
;;
|
|
--password | -p)
|
|
BB_ADMIN_PASSWORD="$2"
|
|
shift 2
|
|
;;
|
|
--pushurl | -s)
|
|
BB_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 "${BB_SERVER_PUSH_URL}" ] &&
|
|
BB_SERVER_PUSH_URL="$(echo "${BB_SERVER_URL}" | perl -pe "s#(https?://)#\${1}${BB_ADMIN_USERNAME}:${BB_ADMIN_PASSWORD}@#")/scm/"
|
|
|
|
# mirror all remote repos and get changes
|
|
for prj in $(bb projects); do
|
|
for repo in $(bb repo "$prj"); do
|
|
if [ -d "$curp/$prj/$repo" ]; then
|
|
(
|
|
cd "$curp/$prj/$repo"
|
|
git remote update
|
|
)
|
|
else
|
|
git clone --mirror "${BB_SERVER_PUSH_URL}/$prj/$repo" "$prj/$repo"
|
|
fi
|
|
done
|
|
done
|
|
|
|
# migrate all repos to gitea
|
|
"$curp/../migrate.sh" "$@"
|