From 867bd32820be91cf3e5527d6b4d16b495e7b7f39 Mon Sep 17 00:00:00 2001 From: Iliyan Ivanov Date: Wed, 29 Jul 2020 17:17:23 +0300 Subject: [PATCH] switch to getopt --- migrate.sh | 77 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 62 insertions(+), 15 deletions(-) diff --git a/migrate.sh b/migrate.sh index 5038b55..25b4919 100755 --- a/migrate.sh +++ b/migrate.sh @@ -5,8 +5,8 @@ set -euf -o pipefail curp="$(cd "$(dirname "$0")" && pwd)" create_org() { - orgid=$(curl --silent -X POST "${apiurl}/orgs" \ - -H "Authorization: token ${token}" \ + orgid=$(curl --silent -X POST "${GITEA_SERVER_API_URL}/orgs" \ + -H "Authorization: token ${GITEA_ADMIN_TOKEN}" \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -d "{ \"username\": \"$1\", \"visibility\": \"limited\"}" | jq -r '.id') @@ -14,21 +14,68 @@ create_org() { } create_repo() { - repoid=$(curl --silent -X POST "${apiurl}$2" \ - -H "Authorization: token ${token}" \ + repoid=$(curl --silent -X POST "${GITEA_SERVER_API_URL}$2" \ + -H "Authorization: token ${GITEA_ADMIN_TOKEN}" \ -H "accept: application/json" \ -H "Content-Type: application/json" \ -d "{\"auto_init\": false, \"private\": true, \"name\": \"$1\"}" | jq -r '.id') [[ "$repoid" != "null" ]] && sleep 5 || true } -serverurl="$1" -token="$2" -admin="$3" -password="$4" -repos="${@:5}" -pushuri="$(echo "$serverurl" | perl -pe "s#(https?://)#\${1}${admin}:${password}@#")" -apiurl="$serverurl/api/v1" +ARGUMENT_LIST=( + "url:" + "token:" + "admin::" + "password::" + "pushurl::" +) + +# defaults +: ${GITEA_ADMIN_USERNAME:=$USER} +: ${GITEA_ADMIN_PASSWORD:=} +# example ssh://git@gitea.example.com:3022 +: ${GITEA_SERVER_PUSH_URL:=} + +opts=$( + getopt \ + --longoptions "$(printf "%s," "${ARGUMENT_LIST[@]}")" \ + --name "$(basename "$0")" \ + --options "" \ + -- "$@" +) + +while [[ $# -gt 0 ]]; do + case "$1" in + --url) + GITEA_SERVER_URL="$2" + shift 2 + ;; + --token) + GITEA_ADMIN_TOKEN="$2" + shift 2 + ;; + --admin) + GITEA_ADMIN_USERNAME="$2" + shift 2 + ;; + --password) + GITEA_ADMIN_PASSWORD="$2" + shift 2 + ;; + --pushurl) + GITEA_SERVER_PUSH_URL="$2" + shift 2 + ;; + *) + break + ;; + 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" # repo examples # /path/to/repo:orgname ( orgname only ) @@ -37,14 +84,14 @@ apiurl="$serverurl/api/v1" # /path/to/repo ( use name from path, no org ) # init repos -for repo in ${repos}; do +for repo in "$@"; 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")" + [ -z "$repoName" ] && repoName="$(basename "$repoPath" ".git")" if [ -z "$repoOrg" ]; then repoAPIEP="/user/repos" - repoOwner="${ADMIN_USER}" + repoOwner="${GITEA_ADMIN_USERNAME}" else create_org "$repoOrg" repoAPIEP="/org/$repoOrg/repos" @@ -53,6 +100,6 @@ for repo in ${repos}; do create_repo "${repoName}" "${repoAPIEP}" 1>&2 ( cd "$repoPath" - git push "$pushuri/${repoOwner}/${repoName}.git" master + git push "${GITEA_SERVER_PUSH_URL}/${repoOwner}/${repoName}.git" master ) done